実現したいこと

HugoはSCSSのコンパイル結果などをresources/_gen/にキャッシュとして保存する。キャッシュのファイル名には内容などから計算したハッシュ値が入っており、キャッシュの元になった内容が変わるとハッシュ値も変わる。ビルドを繰り返すうちに、以前のハッシュ値のまま参照されなくなったキャッシュファイルが残り続ける。

--gcを付けると、ビルド後に使われなくなったキャッシュファイルを削除できる。

使い方

hugo--gcを付ける。

$ hugo --gc

ビルド結果のサマリーにCleanedという行が追加され、削除した件数が表示される。

動作確認: このブログで実際に2件削除された

このブログのresources/_gen/assets/には、削除前の時点で同じSCSSファイルに対応するキャッシュが2種類残っていた。

$ find resources/_gen -type f
resources/_gen/assets/styles.scss_52d4f7c404efe5b5e43f3a5f191f95c4.content
resources/_gen/assets/styles.scss_52d4f7c404efe5b5e43f3a5f191f95c4.json
resources/_gen/assets/styles.scss_5c935fda4121e02848cf7ff8550d445d.content
resources/_gen/assets/styles.scss_5c935fda4121e02848cf7ff8550d445d.json

--gcを付けてビルドすると、サマリーにCleaned | 2と表示される。

$ hugo --gc
                   |  JA
-------------------+-------
  Pages            | 1302
  Paginator pages  |  122
  Non-page files   |  905
  Static files     |    8
  Processed images |    0
  Aliases          |   16
  Cleaned          |    2

Total in 918 ms

resources/_genを確認すると、片方のハッシュのキャッシュファイル2つ(.content.json)が削除され、現在のビルドで実際に使われている側だけが残っている。

$ find resources/_gen -type f
resources/_gen/assets/styles.scss_5c935fda4121e02848cf7ff8550d445d.content
resources/_gen/assets/styles.scss_5c935fda4121e02848cf7ff8550d445d.json

この状態でもう一度--gcを付けてビルドすると、削除するものが無いためCleaned | 0になる。

$ hugo --gc
  Cleaned          |    0

resources/_genはGitの管理外

resources/_gen/.gitignoreで除外されており、Gitの管理対象に含まれていない。--gcによるキャッシュの削除はビルド成果物の整理であり、リポジトリの追跡対象には影響しない。ビルドのたびに毎回付けても問題ない。

参考: hugo | Hugo