ネットワークに接続していない環境で Jekyll 遠隔テーマを利用したサイトの保守をする方法を試してみました。
Jekyll を使って担当している講義の静的ウェブサイトを運営しています。このウェブサイトでは
GitHub は Jekyll は 10 種類程度のテーマを選択することができますが、それに飽き足らない場合には GitHub にホスティングされている遠隔テーマ(remote theme)に対応したテーマを利用することもできます。わたしが利用している basically basic というテーマもそうした遠隔テーマのひとつです。
遠隔テーマの使い方は簡単で、基本的には Gemfile をすこし調整した上で、_config.yml のなかの普通は theme: <テーマの名前> と書くところを remote_theme: "<テーマの名前>" に置き換えるだけです。具体的な設定については遠隔テーマ(remote theme)の内容やbasically basicのReadmeを見て下さい。具体的な設定については私のサイトのリポジトリのなかの Gemfile と _config.yml が参考になるでしょう。
これでしばらく快適に過していたんですが、ひとつ困ったことを見つけました。移動中、ネットワーク接続を停止しているときに bundle exec jekyll build ... すると、サイトの再構築がエラーを生じるのです。原因は remote_theme: 設定があると、再構築のたびに GitHub にアクセスするためのようです。Gemfile に該当する Gem を追加してもだめでした。
悩み
remote_theme: 機能は使いたいけれど、断線環境では再構築ができないという悩みです。
解決の方針
そこで、Jekyll の環境設定を二種類用意することにしました。
遠隔テーマ設定 (_config.yml)
こちらの設定は GitHub に push するためのものです。すでに書いたように、この設定では断線環境での再構築ができません。
ローカルテーマ設定 (etc/_config.yml)
こちらの設定は手元でビルドするためのものです。Gemfile に記載したテーマの Gem を利用して環境を構築し、手元のウェブサーバで内容を確認できます。環境が手元のパソコンに閉じているため、断線環境下で利用できます。
以下に示すように _config.yml と etc/_config.yml の内容の違いは、前者が remote_theme: 設定を用いるのに対し、後者が theme: 設定を施す点だけです。
70,71c70,71
< remote_theme: "mmistakes/jekyll-theme-basically-basic"
< #theme: jekyll-theme-basically-basic
---
> #remote_theme: "mmistakes/jekyll-theme-basically-basic"
> theme: jekyll-theme-basically-basic
そして以下がサイト再構築に用いているスクリプトです。
# !/bin/sh
rm -f etc/_config.yml
cat _config.yml | sed -e 's/^remote_theme/#remote_theme/' -e 's/^#theme:/theme:/' > etc/_config.yml
bundle exec jekyll build --config etc/_config.yml --destination $HOME/Sites/classes --incremental --watch $*
_config.yml の内容を元にテーマ設定を置換したものを、etc/_config.yml に生成し、bundle exec jekyll build で生成したばかりの etc/_config.yml を利用します。
サイトの保守には、_config.yml を編集し、手元での再構築のための設定はその都度、自動生成されます。
これで断線環境でも、サイトの保守ができるようになりました。もちろん、サイトを公開するときはネットワークに接続しますけれど。