ブログテーマを Hextra にしました

2025年9月8日

タイトルオチ。

何があった?

Hugo を最新版(執筆当時 0.149.1)に更新したらビルドが通らなくなりました。こりゃ大変。

In Hugo v0.146.0, we performed a full re-implementation of how Go templates are handled in Hugo. This includes structural changes to the layouts folder and a new, more powerful template lookup system.

New template system in Hugo v0.146.0

調べてみたところ、 上記の通り 0.146.0 でテンプレートシステムが大幅に刷新されたようで、この変更に対してまだ追従していないのが原因のようでした。 待ってればそのうち対応されるかもしれないしなんなら自分で対応してコントリビュートしてもいいよなとは思ったんですが、読めば読むほど僕が適当にやって終わらせられるものではないということがわかり、その手段はあえなく断念。

代わりに新しいテーマを探して移行しよう、というのが事の発端でした。あんなに手間がかかるとはつゆ知らず……

テーマ探し、またの名をかぐや姫の五つの難題

何はともあれ乗り換え先のテーマを探さなければなりません。当初の要件としてはおよそ以下のようなものでした。

  • Hugo 0.146 対応
  • Hugo Modules 対応
    • Go Modules の派生みたいな感じでテーマ関連リソースを imports として導入できるらしい
  • 記事一覧ページで記事ごとにサムネイルを表示できる
  • トップページに最近の記事を表示できる
  • GitHub-style alert syntax に対応している

Tip

GitHub-style alert syntax というのは、以下のような構文でこういうやつを出力できる機能です。

> [!WARNING]
> もみあげ

しかしこれを満たすテーマはそう多くありませんでした。そりゃそうだって?それともそんなことあるのかって?

まず 0.146 対応しているテーマ自体がまだそこまで多くありません。 大体 2025 年下半期以降に更新されているものは対応しているようでしたが、条件分岐のバグなどはともかくテンプレートシステムの変更に好き好んで追従したい人類などいるはずがありません。 まあ Hugo Modules は最近のテーマは割と対応しているっぽいのであまり気にしなくてよかったのが救いでしたね。

記事ごとのサムネイル、これもサポートしているテーマが思ったより少ない。 ……いや、少ないことよりももっと深刻な問題があります。それは記事サムネイルの指定方法にデファクトスタンダードが存在しないことです。 今まで使っていた LoveIt では frontmatter に featuredImage フィールドを指定していましたが、これがあるテーマでは thumbnail だったりまた別のテーマではファイル名探索だったり、本当にてんでんばらばらです。

トップページの記事リストはこの中だと最も難易度(?)が低いですね。ブログ向けテーマは多くがこの機能をサポートしています。 じゃあ何が問題なのかって?他の条件との積集合が異様なまでに少ないことです。これ本当になんでなんだろう。

GitHub-style alert syntax は、今後のテーマ乗換えにおける記事本文のポータビリティーを考慮しての条件設定です。 これも似たような要素を出力できるテーマ自体は数多くありますが、記事サムネイル同様記法のゆれが激しいという問題がありました。 LoveIt では shortcode で admonition というものを使っていましたが、この shortcode 名がテーマによってまちまちなのです。 そこに現れた救世主こそ GitHub-style alert syntax ……といいたいところですが、まだまだ対応しているテーマが少ない。困ったものですね。

妥協

一から作る時間もないので上の要件のうちいくつかを諦めることで妥協します。

トップページに記事一覧が出ないのはブログとしてどうなんだという気がしなくもないですが、どうせ僕が貼った記事のパーマリンクから飛んでくる人が大半でしょうから無くてもいいでしょう。代わりに PGP 公開鍵でも置いとけば賑やかしにはなるべ。

あと記事サムネイル。これも出ないとちょっと彩りが少ない気はしますが、記事一覧を諦めたことにより相対的にどうでもよさが高まったのでこれも諦めます。OGP のカード画像さえ指定できればいいしな。

つまり、こうです。これで光明が見えてきました。

  • Hugo 0.146 対応
  • Hugo Modules 対応
  • GitHub-style alert syntax に対応している

選ばれたのは

Hextra でした。シンプルでビルドが速くてモダン!