まくまくHugo/Goノート
タクソノミーの基本
2017-12-31
Hugo が提供しているタクソノミー機能を使用すると、コンテンツ(ページ)をグルーピングすることができます。いわゆる、ブログなどで提供されている「タグ」や「カテゴリ」のような機能です。

タクソノミーとターム

Hugo では、多くのブログツールや CMS ツールと同様に、各ページに「タグ」や「カテゴリ」といった付加情報を付けてグルーピング(分類)することができます。 このグルーピング(分類)のことをタクソノミー (taxonomy) と呼んでいます。

タクソノミー (taxonomy)
グルーピング(分類)のための項目名。例えば、「タグ」や「カテゴリ」といった分類名自体がタクソノミーです。Hugo では、デフォルトで tagscategories というタクソノミーが定義されています。
ターム (term)
タクソノミーに割り当てる具体的な値。例えば、あるページのタグとして、「経済」と「日本」という値を割り当てたとすると、「経済」と「日本」のことをタームと呼びます。タグの一覧ページで表示される個々のタグ名がタームです。

コンテンツ(ページ)にタクソノミー・タームを割り当てる

コンテンツにタクソノミーを割り当てるには、記事先頭の Front matter 部分に、タクソノミー名とそこに割り当てるタームを記述します。 これは、具体例を見た方が分かりやすいですね。 下記の、tags:categories: というところでタクソノミーの設定を行なっています。

content/page.md

---
title: "記事のタイトル"
date: "2017-12-31"
tags: ["タグ1", "タグ2"]
categories: ["カテゴリ1", "カテゴリ2"]
---

この記事には、tags タクソノミーとして「タグ1」「タグ2」、categories タクソノミーとして「カテゴリ1」「カテゴリ2」というタームを割り当てています。

Hugo のデフォルトのタクソノミーとして、tagscategories が用意されています。 上記ではそれぞれのタクソノミーに タグ1カテゴリ1 といったタームを設定しています。

それぞれのタクソノミーの使い方は自由ですが、 どのタクソノミーにも複数のタームを割り当てることができます。 逆に、「1つのカテゴリには1つのページしか所属できない」という設定はできません。 そのような場合は、単純に Front matter で categories に割り当てるタームを1つだけにする、といった運用でカバーします(それよりは、セクションの機能(ディレクトリ階層)で分けた方がよいですね)。 参考までに、1つのページに複数のカテゴリを割り当ててしまった場合にエラー表示する方法をこちらで紹介しています

タクソノミータームの一覧ページ

コンテンツ(記事ページ)に何らかのタクソノミーを割り当てると、タクソノミーごとのターム一覧ページが自動的に生成されます。 例えば、tags タクソノミーに含まれているタームの一覧ページ(タグの一覧ページ)は、下記のようなアドレスでアクセスできるようになります。

https://example.com/tags/

同様に、categories タクソノミーに含まれているタームの一覧ページ(カテゴリの一覧ページ)は、下記のようなアドレスでアクセスできます。

https://example.com/categories/
これは、つまり、通常の記事ページとして tags.mdcategories.md という名前のファイルを作成してしまうと、上記のようなタームの一覧ページにはアクセスできなくなってしまうということを示しています。このあたりは URL をシンプルに保つためのトレードオフですね。

上記のような一覧ページ(HTML ファイル)は Hugo の仕組みで自動的に生成されますが、デフォルトでは空っぽ(真っ白)の HTML ページが出力されるだけです。 タームの一覧ページを正しくレンダリングするには、専用のテンプレートファイルを作成しておく必要があります。 詳しくは、下記のページを参照してください。

2017-12-31