Hugoアップデートでサイトが動かない!フォルダ構成の変更とSummary対策でハマった話
久しぶりにブログ書くぞ~!と、Hugoのアップデートを気軽にしたらテンプレートにあちこちエラーが出まして……動かなくなっちゃった…!
あれこれハマりつつ、公式サイトと睨めっこしながらなんとかテンプレート改修しました。
新しいバージョン (v0.149.0) になって変わったこと
Hugo のテンプレートシステムが、v0.146.0 から新しくなりました。(2025年4月11日より)
これにより、一部のフォルダ名が変更になったり、削除されたりしています。
テンプレートの layouts
フォルダの構成が変わりました
layouts
の新しいフォルダ構成は以下の通り
主に、レイアウトフォルダの構成が変わったことにより、以下の個所を修正しなくてはいけませんでした。
変更部分 | 必要な修正 |
---|---|
_default の削除 |
_default 内のファイルを layouts に移動 |
partials を _partials に変更 |
フォルダ名を変更する |
shortcodes を _shortcodes に変更 |
フォルダ名を変更する |
テンプレートから _internal という概念を削除 |
{{ partial "_internal/xxx.html"}} という表現を {{ partial "xxx.html" }} に置き換える |
index.html の削除 |
index.html を home.html に変更する |
なお、他にも変更箇所はあります。
詳細は以下の公式サイトのドキュメントをご覧ください。
公式サイトNew template system in Hugo v0.146.0
{{ .Summary }}
の仕様変更 (プレーンテキスト→HTMLに変更)
レイアウトのフォルダ構成はひとまずクリアして、次に困ったのが {{ .Summary }}
です。
キリンスキでは、ブログの記事一覧に「本文の一部」を自動で表示しています。これは、home.html
のテンプレート内に {{ .Summary }}
を追加することで表示しています。
この Summary
というテンプレート用タグに仕様変更があったようで、これまでの設定では思った通りの取得ができなくなってしまいました。
これまでの設定 (config.toml
または hugo.toml
) は、以下の通り。
hasCJKLanguage = true -> 日本語対応の設定
summaryLength = 30 -> 表示する文字数(およそ)
今までは上記の設定だけで本文の テキストのみ が表示されていたのですが、仕様変更によりHTMLを返すようになってしまったようです。
対策: {{ .Summary | plainify }}
を使う
あれこれ変更して、現在は以下のテンプレートタグを使用しています。
{{ .Summary | strings.Truncate 35 | plainify }}
plainify
: テキストのみを取得するstrings.Truncate 35
: 表示する文字数
この変更でうまく動いたので、アップデート前の設定で使用していた summaryLength = 30
は削除しました。
{{ .Summary }}
は、<meta>
タグ内の description
などにも使用しているのでそこも忘れず変更しました。
ちなみにこの変更は2024年8月からだそうで…。
おそらくこれから困る人が出てくるに違いない。
しかし、前回も似たようなこと があったんですが、今回も…。
アップデート放置してるとこういうことが起きがちで反省。
これ書いてる間にもバージョンアップしてますからね。活発で何よりです…。
長くなっちゃったので、デザイン変更についてはまた別の記事にまとめようと思います。