ネットワークに接続していない環境で 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
を編集し、手元での再構築のための設定はその都度、自動生成されます。
これで断線環境でも、サイトの保守ができるようになりました。もちろん、サイトを公開するときはネットワークに接続しますけれど。