Hugo で記事ページに複数のターム(カテゴリ)を割り当てた場合にエラーにする

Hugo の仕組みでは、1 つのタクソノミーに割り当てられるタームの数を制限することはできません。 ここでは、複数のタームを割り当ててしまった場合に、エラー表示を行う方法を紹介します。

1つの記事ページに複数のタグを付けるのはよくあることですが、Web サイトのポリシーによっては、1 つの記事に付けられるカテゴリーは 1 つまでに制限したい、ということがあるかもしれません。 Hugo のデフォルトの仕組みでは、そのような制限はできないのですが、複数のカテゴリが付けられた記事を表示したときに、ログとページ上にメッセージを表示することはできます。

下記のシングルページテンプレートでは、categories タクソノミーに 2 つ以上の値(ターム)が設定されている場合に警告メッセージを出力しています。 errorf 関数を使ってテキスト出力を行うことで、画面上への出力と同時に、コンソール上にもエラーメッセージを出力することができます。

layouts/_default/single.html(抜粋)
{{ if .Params.categories }}
  {{ if gt (len .Params.categories) 1 }}
    <b>{{ errorf "カテゴリが 1 つ以上設定されています!" }}</b>
  {{ end }}
{{ end }}
☝️ ワンポイント len .Params.categories を実行するときに、.Params.categories が存在しないと nil dereference のエラーが発生してしまいます。 そのため、最初に if .Params.categories という存在チェックを入れています。

例えば、記事ページの先頭のフロントマターで、下記のように複数のカテゴリを割り当てるような記述をすると、上記の警告メッセージが表示されます。

content/sample-page.md
---
title: "サンプルページ"
categories: ["カテゴリ1", "カテゴリ2"]
---

サンプルページの本文。