HugoのTaxonomyを設定する

この記事は以前のホームページについて書かれたもので、内容が古いです。

ブログを書き始めて6日。だんだんHugoの気持ちがわかってきました。そろそろTaxonomy(分類)も触れたいなと感じたので、このブログに「タグ」を導入したいと思います。

タグを設定する

ArchetypesにデフォルトのFront Matterを書く

/archetypes/内にテンプレートを置いておくことで、新しい記事を作成したときにテンプレートの内容が原稿にコピーされて便利です。

---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
description: ""
tags: []
---

config.tomlの編集

Custom taxonomy under section? - support - HUGOが非常に参考になりました。ありがとうございます。

以下のように追記します。今回は、/blog/下でタグを管理したかったので、パーマリンクをイジっています。

[taxonomies]
  tag = 'tags'

[permalinks]
  '/tags' = '/blog/tags/:slug'

taxonomies

内部的な分類方法名 = パス等に使うときの分類方法名という形で設定します。(単数形 = 複数形が想定されている?)

参考: Taxonomies | Hugo

デフォルトだと/tags/下でタグ関係のページが公開されてしまうので、それを置き換えています。

参考: URL Management | Hugo

記事ページでのタグ

記事ページ(single.html)内では、.Params.tagsにその記事が持つタグが全て入っています。

  {{ range .Params.tags }}
    <li><a href="{{ $.Site.BaseURL }}blog/tags/{{ . | urlize}}">{{ . }}</a></li>
  {{ end }}

このブログでは現在以上のようになっています。組み込みのurlize関数が便利ですね。

参考: Single Page Templates | Hugo

タグを持つ記事一覧

taxonomy.html内の.Pagesにそのタグを持つ記事が全て入っています。

{{ range .Pages }}
  <article>
    <h4><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
    <time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
  </article>
{{ end }}

このブログでは現在以上のようになっています。

タグ一覧

terms.html内の.Site.Taxonomies.tagsにタグについて情報が入っています。今回は、.ByCountを使って、記事数に応じて並び替えています。

{{ range .Site.Taxonomies.tags.ByCount }}
  <article>
    <h4><a href="{{ $.Site.BaseURL }}blog/tags/{{ .Name | urlize }}/"># {{ .Name }} ({{ .Count }})</a></h2>
  </article>
{{ end }}

Taxonomyの完全・部分的な無効化

タグ等のTaxonomyを使わない場合は無効化することができます。 無駄なページが生まれるだけなので、必要ないなら切ってしまっても良いかと思います。

完全な無効化

以下の設定で、Taxonomy機能自体を無効化できます。

disableKinds = ['taxonomy']
ignoreErrors = ["error-disable-taxonomy"]

単にdisableKindsに追加すればよいかと思いきや、

ERROR 2022/09/06 00:56:59 You have the value 'taxonomy' in the disabledKinds list. In Hugo 0.73.0 we fixed these to be what most people expect (taxonomy and term).
But this also means that your site configuration may not do what you expect. If it is correct, you can suppress this message by following the instructions below.
If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site config:
ignoreErrors = ["error-disable-taxonomy"]

と怒られてしまうので、言われた通りにignoreErrors = ["error-disable-taxonomy"]を追加しています。

部分的な無効化

Categoryだけ要らないといった場合は、デフォルトの設定を上書きすることで無効化することができます。

[taxonomies]
  tag = 'tags'

たとえば、このブログの設定はこのようになっていますが、デフォルトであるはずのcategoryを書かなかったため、その機能が無効化されています。

Taxonomies | Hugoも併せてご覧ください。