Hugoで更新日を自動取得して、投稿後に更新した記事のみ更新日を表示するやり方です。

記事を書くたびにフロントマターにlastmodを設定するのは面倒なので自動化します。

環境

  • Hugoのバージョン: 0.54.0
  • 使用テーマ: Robust(2019年3月10日時点の最新バージョン)

なおRobustテーマをカスタマイズする場合には、/themes/hugo_theme_robust 内のlayoutsフォルダをルートディレクトリのlayoutsフォルダへコピーして、コピー元のファイルではなくコピーしたファイルを編集します。

ただしすでにlayoutsフォルダ内の一部のファイルやフォルダをコピー済みの場合には、まだ存在していないファイルのみをコピーしてください。

またすでにlayoutsフォルダをまるごとコピー済みの場合には、コピーしないでください。

Gitへコミットした日時を取得する

config.tomlで

enableGitInfo = true

と書き加えます。

これによりgit.commitした日時がlastmodとして取得されます。

これだけでも更新日は自動的に取得され表示されるので、常に表示されててもいいなら次のコードは不要です。

更新がなければ更新日を表示しないようにする

Robustテーマだと、 /layout/_default/li.html や /layout/_default/summary.html などの日時を表示する部分を、

{{ if .Params.Date }}
    <li><i class="fas fa-pen"></i><time
        datetime="{{ .Date.Format "2006-01-02T15:04:05JST" }}">{{ .Date.Format ( .Site.Params.dateformat | default "2006年1月2日") }}</time>
    </li>

    {{ if ne (.Date.Format ( .Site.Params.dateformat | default "2006年1月2日")) (.Lastmod.Format ( .Site.Params.dateformat | default "2006年1月2日"))}}
        <li><i class="fas fa-sync-alt"></i><time
            datetime="{{ .Lastmod.Format "2006-01-02T15:04:05JST" }}">{{ .Lastmod.Format ( .Site.Params.dateformat | default "2006年1月2日") }}</time>
        </li>
    {{ end }}
{{ end }}

というふうに書き換えます。

これにより、更新がなければ更新日は表示されません。 更新してもいないのに更新日が表示されるのは野暮ったい気がしたので、このようにしました。

ただし、例えばconfig.tomlで

[params]
dateformat = "2006年1月2日T15:04:05"

のように秒まで表示するように設定していると、更新してなくても更新日時が表示されてしまいます。 これはファイルを作成して即コミットしたとしても、ファイルの作成時刻とコミット時刻に秒単位で時間差が生じるからです。

なのでdateformatはconfig.tomlで

[params]
dateformat = "2006年1月2日"

と日単位に設定しておき、記事を作成したらその日のうちにコミットするようにすれば更新日は表示されないということになります。

なお、

{{ if ne (.Date.Format ( .Site.Params.dateformat | default "2006年1月2日")) (.Lastmod.Format ( .Site.Params.dateformat | default "2006年1月2日"))}}

と条件付けしているので、投稿日と同じ日のうちに更新した場合でも更新日が表示されません。

ついでに固定ページ(お問い合わせページなど)に日時を表示したくなかったので、上記コードには{{ if .Params.Date }{{ end }}を加えておきました。 あとは固定ページファイルのフロントマターからdateを削除すればOKです。

注意点

なお、記事のフロントマターでlastmodを設定してしまうと、自動取得した更新日が表示されないので注意してください。

参考ページ

最近更新された記事(新着記事)のリストを表示する - まくまくHugo/Goノート