このブログは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'
endgroup :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の管理対象としておけばよさそうです。
この記事を書くにあたり、次のサイトを参考にさせて頂きました。