Hugoで月別アーカイブを作る

2017/09/08

blogに月別アーカイブをつけてみました。

このblogはHugoで作られています。Hugoには月別アーカイブというそのものズバリの機能はないので一工夫が必要。 いくつかやり方はあるみたいですが、今回は一番シンプルっぽかったTaxonomyを使いました。

デフォルトで用意されているtagsやcategoriesも実はTaxonomyの一種。tagやcategoryと同じような感じで扱えます。

config.tomlにtaxonomiesの定義を追加します。

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

サイドバーに置いてある月別一覧はこんな感じ。

<ul>
  {{ range $name, $items := .Site.Taxonomies.archives }}
    <li><a href="{{ $.Site.BaseURL }}archives/{{ $name | urlize | lower }}">{{ $name }} ({{ .Count }})</a></li>
  {{ end }}
</ul>

あとは各記事のFront Matterにarchivesを定義するだけ。 2017/09のようにスラッシュ区切りで名前をつけるといい感じにディレクトリを作ってくれます。 なので、月別じゃなくて年別で作りたかったらarchivesを2017とかにすればOK。月別も年別も、ということなら両方定義すればいけるはずです。

+++
date = "2017-09-08T22:13:57+09:00"
slug = "hugo_monthly_archives"
title = "Hugoで月別アーカイブを作る"
categories = ["development"]
tags = ["hugo", "blog"]
archives = ["2017/09"]
draft = false
+++

archetypesに以下のような定義をしておくと、新規記事のarchivesを自動で埋めてくれます。

archives = ["{{ dateFormat "2006/01" .Date }}"]

既に存在する記事は手動で修正しましょう。 数が多い場合は何かしらプログラムを書くのがいいと思います。 今回はエディタの置換を駆使して何とかしました。

(2017/09/12追記)

逆順(最近の記事を上)で並べ替えるため、サイドバーはいまはこんな感じになっています。

<ul>
	{{ range $items := .Site.Taxonomies.archives.Alphabetical.Reverse }}
		<li><a href="{{ $.Site.BaseURL }}archives/{{ .Name | urlize | lower }}">{{ .Name }} ({{ .Count }})</a></li>
	{{ end }}
</ul>



関連(するかもしれない)記事


おススメ