静的サイトジェネレーターを Hugo に切り替えた

ここ半年から一年の間、ちょっとしたコマンドラインツールの開発にはずっと golang を使ってきてて、せっかくなのでサイトジェネレーターもこの際 golang 製に変えてみようということで、 Hugo を使ってみることにした。今のところの使用感としては、

  • バイナリ拾ってくるだけなのでインストール簡単
  • サイト生成速度が速い!
  • Jekyll と同様に Front Matter がある(各ページのメタデータを定義できるもの)
  • 他のツールにもあるが、ローカルサーバでのプレビュー機能便利
  • 他のツールほどメジャーではないせいか、既成のテンプレートが少ない (´;ω;`)
  • Go 標準のテンプレートパッケージ使ってるためか、テンプレートでいろいろやろうとすると制約が厳しい

といったところ。 golang の特質はそのままのため、がんばって言語環境整備しなくても、 Windows とか他のプラットフォームでも同じように使えるのはいいところだと思う。コード量もそれほどではないので、自分で機能を追加するのもそれほど難しくない

一方でテンプレートは本当に選択肢が少なすぎるので、勉強も兼ねて、 Jekyll 用のテーマの Lanyon を移植して、それにちょっとだけ手を加えたものを使うことにした。こちらは気が向いたら公開したい

このテンプレートを作っていてわかったのは、 golang 標準の text/template と派生の html/template のテンプレートパッケージでは、書式自体は分かりやすくていいものの、制御構文が少なかったり定義した変数のスコープの絡みとかでいろいろと制約があり、プログラム側に手を入れて補助関数を作らないと、単純なものでも機能実現できないものが多々あるなあというところ。この辺りは、ロジックはあくまでプログラム側で処理し、テンプレートはそれを表示するだけだ、という考え方でできているのだと思うが、ちょっとしたカスタマイズでプログラム自体に手を入れなければいけないのは、メンテナンスの面でちょっとつらい。柔軟性の高い補助関数とかが Hugo 本家に入るのを見ていくしかないのかな、という気もする

ともあれ、 Hugo 自体は必要十分な機能がよくまとまっていて、何よりサイト生成が早いこともあって、気軽に何度でもトライアンドエラーを繰り返して試せるので、個人的には気に入っている。しばらくいろいろ試してみたいと思う