このブログはjekyllを使って作っています。とあるきっかけで開発PCを移行することになり、ブログ執筆環境も再構築し直す必要が出ました。もともとコンテンツ以外の依存、例えばjekyllのプラグインなどをプロジェクトの構成物として管理していなかったため、移行を行うにあたり、環境の完全な再現ができなくなってしまいました。
jekyllを使ったブログなどのプロジェクトにおいて、Gemfileとbundlerを使って、依存するgemを管理する方法を纏めておきます。
jekyllのプロジェクト直下に、次のようなGemfile
を作成する。
source 'https://rubygems.org'
gem 'jekyll', '3.1.6'
group :jekyll_plugins do
gem 'jekyll-paginate'
end
group :jekyll_plugins
のブロック内には、jekyllのプラグインを列挙する。
bundlerを実行し、プロジェクトローカルに依存するgemをインストールする。
bundle install --path ./vendor/bundler
これにより、プロジェクト直下にvendor/bundler
ディレクトリが生成され、jekyll本体をはじめ、依存するgemがインストールされる。
bundlerを経由してjekyllを起動する。
bundle exec jekyll serve
この時、次のようなエラーが発生する。
ERROR: YOUR SITE COULD NOT BE BUILT:
------------------------------------
Invalid date '<%= Time.now.strftime('%Y-%m-%d %H:%M:%S %z') %>':
Document 'vendor/bundler/ruby/2.3.0/gems/jekyll-3.1.6/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb'
does not have a valid date in the YAML front matter.
このエラーは、jekyllがvendor
ディレクトリ配下もサイトコンテンツとして認識し、ファイルをHTMLに変換しようとすることで発生した模様。対策としては、_config.yml
を修正し、vendor
ディレクトリをサイト構成ディレクトリから除外すればよい。
次の1行を追記する。
exclude: ['Gemfile', 'Gemfile.lock', 'vendor']
念の為、Gemfile
とGemfile.lock
も除外しておく。
これでjekyllのプロジェクトもGemfileとbundlerを使って依存関係を管理できるようになりました。
今後jekyll new
する場合は、予めbundle init
でGemfileを作成し、bundlerの管理対象としておけばよさそうです。
この記事を書くにあたり、次のサイトを参考にさせて頂きました。