このブログで使用している Hugo のテーマは hello-friend-ng なのだが、目次機能がデフォルトでオフになっている。

そのためそもそもそんな機能あったのかというレベルだったのだが、デフォルトをオンに変更し、今まで書いた記事も一括で目次がつくように変更してみた。

記事のテンプレートをコピー

themes配下のテーマソースの中から記事のテンプレートとなっている部分をコピーしてくる。

たぶんどのテーマも共通で archetypes 配下にあるのではないだろうか。

themes配下のテーマソースを直接触らないように注意!!

cp {themes/hello-friend-ng/,}archetypes/posts.md

posts.md

そして値を変更する。

hello-friend-ngではtoc: trueの部分が目次表示の判定部分

---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: false
toc: true
images:
tags:
  - untagged
---

目次のトピック文字変更

hello-friend-ngでは目次のタイトルがTable of Contentsになっているのでそれを変更する。

先ほどと同じ要領で該当ソースを見つけコピーして, 変更する.

mkdir i18n
cp {themes/hello-friend-ng/,}i18n/en.toml

en.toml

[tableOfContents]
other = "目次"

ここはもしかしたらconfig.tomlをいじるだけで変更できるかもしれないが、わからないのでパス。

過去記事を一括変更

デフォルト値を変更しただけでは過去記事は目次非表示のままなので一括変更する。

みんな大好きシェルスクリプトだ。

grep -rl -e '^toc: false$' content/posts/ | xargs -n1 sed -i.bak 's/^toc: false$/toc: true/g'

toc: false -> toc: trueに変更するだけなのですぐにできる。

git 管理しているのでミスがあれば git checkout

git checkout content/posts/

変更差分を確認して、問題なさそうであれば .bakファイルも一括で削除する

パイプラインに渡す前に確認を忘れずに

find content/posts/*bak | xargs -n1 rm

参考