英語ブログ用の静的サイトジェネレータ選定と導入の記録

以前に、自社サイト用に静的サイトジェネレータ(Static Site Generator)を選定して導入する話を書きましたが、今回、英語ブログ用の選定と導入をやったので、まとめておきます。今回は、だいたい以下の流れでした。

  • 継承機能が使えることという条件で、テンプレートエンジンを決める(Jinja2にした)。
  • ジェネレータの実行環境を決める(Jinja2を採用すると、ほぼ自動的にPython)。
  • ジェネレータを決める(Pelicanにした)。
  • やはり、意外とカスタマイズが必要で時間がかかったが、ブログのホスティングに比べて自由度が増して満足している。

英語ブログへの導入を考えた背景

英語ブログは、今まで記事もアクセスも非常に少なかったこともあり、あまり手間をかけずにPosthavenというホスティングサービスを使っていました。しかしながら、GPSロガー自作の記事を書こうとしたところ、画像の左寄せ・右寄せができない、コードのシンタックス・ハイライトができないなど、機能の不足にぶつかったことから、静的サイトジェネレータを導入することにしました。
検討時に参考にした、Posthavenから静的サイトジェネレータ(Hugo)に移行した記事を紹介しておきます。
https://blog.hypriot.com/post/moved-from-posthaven-to-hugo/

この記事でも、「静的サイトジェネレータの導入には20時間かかった」とかつての自分と似たようなことが書かれており、「ある程度手間のかかるもの」という覚悟をして作業できたのは良かったです。

テンプレートエンジンを選ぶ

以前のMetalsmith導入時にHandlebarsを使ったときに、「Webサイト作るのに、includeは不便だな」と感じていたため、いつか継承機能があるものを使ってみたいと思っていました。Twitterでやり取りしている人がJinja2を勧めていたことと、Wikipediaでざっと継承が使えるテンプレート言語を探しても、意外と有力なものがなかったことから、あまり調べずに決めました。
なお、Wikipediaにあるテンプレートエンジンの比較はこちら。
https://en.wikipedia.org/wiki/Comparison_of_web_template_engines

ジェネレータの実行環境について

Metalsmith導入時にnode.jsを使って、モジュール依存の多さと複雑さに悩まされたことから、今回は何か違うものにしようと思ってました。結局、Jinja2を選んだ時点でPythonに決まってしまいましたが、マルチプラットフォーム対応という点から、Goも候補としていました(Goは、テンプレートに継承機能がないので今回除外)。なお、Pythonではマルチプラットフォーム対応は最初から捨てて、VirtualBox内のLinux(Xubuntu)上で使っています。

ジェネレータを選ぶ

Jinja2を採用した静的サイトジェネレータは色々ありますが、単純に https://www.staticgen.com/ で一番スターが多かったことと、デザインテーマが豊富に配布されていることから、Pelicanにしました。

PelicanとJinja2を使ってみた感想

PelicanはWordpressを強く意識した設計になっていて、articleとpageという概念があります。この点、個人ブログにはぴったりでした。また、Metalsmithで苦労させられたヘッダメニューは、最初から準備されていました。
デザインテーマは100個程度ありますが、「1段組みで、派手でないもの」という条件でプレビューを絞り込んだ時点で、かなり減ります。また、タグごとの目次を作ったり、TABLEのスタイルを追加するなど、いくつかの修正を自分でやっています。
プラグインも豊富で、自分はPhotosという、Lightbox2対応のギャラリー(サムネイル画像を含む)を自動生成するものを使っていますが、ウォーターマークを埋め込む機能などもあり、なかなか便利でした。これも若干、自分で手を入れています。
今回、Pelicanの導入と設定にかかった時間は、デザイン選定やサーバ移転まで含めて13時間程度でした(コンテンツ作成の時間は除外)。それなりの時間がかかっていますが、Markdownに部分的にHTMLを混ぜて書ける環境が自分には快適で、学習コストの元は取れてると感じています。今後、静的サイトを作る機会があったら、再びPelicanを使ってみようかと思っています。Pelicanは、index.htmlを、記事一覧ではなくページにすることもできるので、ブログっぽくないサイトでも使えます。
また、Jinja2の継承は単純な機能ですが、ヘッダやナビゲーションを1つのファイルにまとめておけて、非常に便利でした。今後テンプレートエンジンを選定する際には、「継承機能があること」を絶対条件にしたいと思っています。