タクソノミー
Hugo は、ユーザー定義のタクソノミーをサポートしています。
タクソノミーとは?
Hugo では、タクソノミー と呼ばれるユーザー定義のコンテンツのグループ分けをサポートしています。タクソノミーとは、コンテンツ間の論理的な関係を分類したものです。
定義
- タクソノミー
- コンテンツを分類するために使用される分類法
- 用語
- タクソノミー内のキー
- 値
- 用語に割り当てられたコンテンツの一部
タクソノミーの例: 映画の Web サイト
映画に関する Web サイトを作成しているとします。 以下のタクソノミーを含めることができます。
- Actors (俳優)
- Directors (監督)
- Studios (スタジオ)
- Genre (ジャンル)
- Year (年)
- Awards (賞)
次に、それぞれの映画で、これらのタクソノミーの用語を指定します (つまり、それぞれの映画コンテンツファイルの フロントマター に記述します)。これらの用語から、Hugo は自動的に各俳優、監督、スタジオ、ジャンル、年、賞のページを作成し、それぞれが特定の俳優、監督、スタジオ、ジャンル、年、賞に一致するすべての映画のリストを作成します。
映画タクソノミーの構成
映画サイトの例で続けると、以下はタクソノミーの観点からのコンテンツの関係を示しています。
俳優 <- タクソノミー
ブルース・ウィリス <- 用語
シックスセンス <- 値
アンブレイカブル <- 値
ムーンライズ・キングダム <- 値
サミュエル・L・ジャクソン <- 用語
アンブレイカブル <- 値
アベンジャーズ <- 値
トリプル X <- 値
コンテンツから見れば、使用するデータやラベルは同じでも、関係性が違って見えるはずです。
アンブレイカブル <- 値
俳優 <- タクソノミー
ブルース・ウィリス <- 用語
サミュエル・L・ジャクソン <- 用語
監督 <- タクソノミー
M・ナイト・シャマラン <- 用語
...
ムーンライズ・キングダム <- 値
俳優 <- タクソノミー
ブルース・ウィリス <- 用語
ビル・マーレイ <- 用語
監督 <- タクソノミー
ウェス・アンダーソン <- 用語
...
タクソノミーのデフォルト
Hugo はタクソノミーをネイティブにサポートしています。
サイト設定
ファイルに一行も追加しなくても、Hugo は自動的に tags
と categories
にタクソノミーを作成します。これは、以下のように手動で タクソノミーを設定する
のと同じことになります。
Hugo にタクソノミーを作成させたくない場合は、サイト設定
で disableKinds
を以下のように設定します。
Kind | 説明 | 例 |
---|---|---|
home |
ホームページのランディングページ | /index.html |
page |
指定されたページのランディングページ | my-post ページ (/posts/my-post/index.html ) |
section |
指定されたセクションのランディングページ | posts セクション (/posts/index.html ) |
taxonomy |
タクソノミーのランディングページ | tags タクソノミー (/tags/index.html ) |
term |
あるタクソノミーの用語のランディングページ | tags タクソノミーの用語 awesome (/tags/awesome/index.html ) |
デフォルトの宛先
タクソノミーが使用され、タクソノミー テンプレート
が提供されると、Hugo は自動的にタクソノミーのすべての用語をリストしたページと、各用語に関連するコンテンツのリストを含む個々のページの両方を作成することになります。たとえば、categories
タクソノミーを設定で宣言し、コンテンツのフロントマターで使用すると、以下のページが作成されます。
example.com/categories/
に、すべての タクソノミー内の用語 を一覧表示する 1 つのページを作成します。- 個々のタクソノミーのリストページ
(たとえば、
/categories/development/
) は、それぞれの用語に対して、任意のコンテンツファイルの フロントマター の中でそのタクソノミーの一部としてマークされたすべてのページのリストを表示します。
タクソノミーを設定する
デフォルト
以外のカスタム タクソノミーをサイト全体で使用する前に、[サイト設定][config] で定義する必要があります。各タクソノミーの複数形と単数形のラベルを指定する必要があります。 たとえば、TOML では singular key = "plural value"
、YAML では singular key: "plural value"
となります。
例 “シリーズ” という名前のカスタム タクソノミーを追加する
例: デフォルトのタクソノミーを削除する
デフォルトの tags
タクソノミーのみを使用し、 サイトの categories
タクソノミーを削除したい場合は、 サイト設定
の taxonomies
値を変更することで実行できます。
すべてのタクソノミーを完全に無効にしたい場合は、Hugo タクソノミーのデフォルト
の disableKinds
の使い方を参照してください。
コンテンツにタクソノミーを追加する
サイトレベルでタクソノミーを定義すると、コンテンツタイプ や コンテンツセクション に関係なく、どんなコンテンツもタクソノミーに割り当てることができるようになります。
タクソノミーへのコンテンツの割り当ては、フロントマター で行われます。タクソノミーの 複数形 の名前を持つ変数を作成し、コンテンツタイプのインスタンスに適用したいすべての用語を割り当てるだけです。
例: タクソノミーを使ったフロントマター
タクソノミーの順序付け
コンテンツファイルは、関連するタクソノミーのそれぞれに対して重みを割り当てることができます。 タクソノミーの重みは、タクソノミーリスト テンプレート
のコンテンツのソートや順序付けに使用でき、コンテンツファイルの フロントマター
で宣言されます。 タクソノミーの重みを宣言するための規則は、taxonomyname_weight
です。
以下の TOML と YAML の例では、コンテンツが 22 の重みを持ち、 tags
タクソノミーの “a”、“b”、“c” の値に割り当てられたページをレンダリングする際に、順序付けの目的で使用されます。また、“d” カテゴリページをレンダリングする際には、44 の重みが割り当てられています。
例: タクソノミーの weight
(重み)
タクソノミーの重みを使用することで、同じコンテンツが異なるタクソノミーの中で異なる位置に表示されることがあります。
タクソノミーまたは用語にカスタム メタデータを追加する
タクソノミーの用語にカスタム メタデータを追加する必要がある場合、その用語のページを /content/<TAXONOMY>/<TERM>/_index.md
に作成し、そのフロントマターにメタデータを追加する必要があります。「俳優」の例を続けて、各俳優にウィキペディアのページへのリンクを追加したいとします。用語ページは以下のようになります。
---
title: "Bruce Willis"
wikipedia: "https://en.wikipedia.org/wiki/Bruce_Willis"
---