Hugo - Taxonomyを使ってアーカイブページを作る
アーカイブページを静的構築する方法
Created at Updated at

1249 Words
⚠️

追記 (2020/03/14 01:35)

アーカイブ用の日付指定部分のフォーマットを

archives:
    - 2020
    - 2020/01
    - 2020/01/20

のようにしていると、少なくともHugoのバージョンv0.65.2ではTaxonomiesを使った記事列挙時にひとつの記事につき/archives/2020,/archives/2020/01,archives/2020/01/20の三つ分が重複して列挙されてしまう問題が発生した。

そのため、次のように年月日アーカイブページが同じディレクトリに並列して配置されるように修正したらうまくいった。

archives:
    - 2020
    - 2020-01
    - 2020-01-20

これでアーカイブリストのURLは/archives/2020,/archives/2020-01/,/archives/2020-01-20/となる。

以上の内容について記事内容に修正を加えた。


参考

静的サイトジェネレータHugoを使ったサイト構築(アーカイブ編) · feedtailor Inc. スタッフブログ

参考というかほぼそのまま全内容なのだが。。。

1. config.tomlに使用するTaxonomyを指定

[taxonomies]
  tag = "tags"
  archive = "archives"

テンプレートファイル名 = "Taxonomyのキー名"で指定する。

いまのところ当ブログではカテゴリーを使用していないので除外した。
tagscategoriesはデフォルトでは有効になっているが、[taxonomies]を明示的に指定した上でそれらを記述しないと勝手に生成されなくなる。
必要ならcategory = "categories"とか書いておく。

Taxonomies | Hugo # Hugo Taxonomy Defaults

2. レイアウトファイルを用意

Taxonomy編 で説明したように、以下の順に検索されます。

  1. /layouts/taxonomy/SINGULAR.html
  2. /layouts/_default/taxonomy.html
  3. /layouts/_default/list.html
  4. /themes/THEME/layouts/taxonomy/SINGULAR.html
  5. /themes/THEME/layouts/_default/taxonomy.html
  6. /themes/THEME/layouts/_default/list.html

前述の config.toml の設定では左辺が archive でしたので、上の 1 は /layout/taxonomy/archive.html となります。

http://staff.feedtailor.jp/2016/08/10/hugo_16/

3. 記事のフロントマターに項目を作成

archetypes/default.md

archives:
    - {{ now.Format "2006" }}
    - {{ now.Format "2006-01" }}
    - {{ now.Format "2006-01-02" }}

以上を記述しておくことで、hugo newした際に自動的にアーカイブ用の情報が挿入される。
この記事の場合の出力結果↓

posts/2020/01_20_00_hugo_taxonomies.md

---
title: "Hugo - Taxonomyを使ってアーカイブページを作る"
description: "アーカイブページを静的構築する方法"
tags: ["hugo"]
date: 2020-01-20T02:25:00+09:00
lastmod: 2020-01-20T02:25:00+09:00
archives:
    - 2020
    - 2020-01
    - 2020-01-20
draft: false
---

これで /archives/2020/ とか /archives/2020-01/ とか /archives/2020-01-20/ とかでアーカイブページを表示することができる。

やったぜ。

archivesに指定する内容を変更するなど必要に応じて。

この方法で日毎の記事を毎回静的生成してたらいつかすごい数になりそう。(なればいいですね)


余談

Goはあまり触れていないので日時のフォーマットが慣れないなぁ気持ち悪いなぁと思っていたのだけれども、やっぱりこういうことだったのね。。。→
Goのtimeパッケージのリファレンスタイム(2006年1月2日)は何の日? - Qiita