jekyllのプロジェクトをGemfileとbundlerで管理する

このブログはjekyllを使って作っています。とあるきっかけで開発PCを移行することになり、ブログ執筆環境も再構築し直す必要が出ました。もともとコンテンツ以外の依存、例えばjekyllのプラグインなどをプロジェクトの構成物として管理していなかったため、移行を行うにあたり、環境の完全な再現ができなくなってしまいました。

jekyllを使ったブログなどのプロジェクトにおいて、Gemfileとbundlerを使って、依存するgemを管理する方法を纏めておきます。


Gemfileの作成

jekyllのプロジェクト直下に、次のようなGemfileを作成する。

source 'https://rubygems.org'

gem 'jekyll', '3.1.6'

group :jekyll_plugins do
  gem 'jekyll-paginate'
end

group :jekyll_pluginsのブロック内には、jekyllのプラグインを列挙する。

bundlerの実行

bundlerを実行し、プロジェクトローカルに依存するgemをインストールする。

bundle install --path ./vendor/bundler

これにより、プロジェクト直下にvendor/bundlerディレクトリが生成され、jekyll本体をはじめ、依存するgemがインストールされる。

jekyllの起動

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ディレクトリをサイト構成ディレクトリから除外すればよい。

_config.ymlの変更

次の1行を追記する。

exclude: ['Gemfile', 'Gemfile.lock', 'vendor']

念の為、GemfileGemfile.lockも除外しておく。


これでjekyllのプロジェクトもGemfileとbundlerを使って依存関係を管理できるようになりました。 今後jekyll newする場合は、予めbundle initでGemfileを作成し、bundlerの管理対象としておけばよさそうです。


参考

この記事を書くにあたり、次のサイトを参考にさせて頂きました。