「よし、記事を書いたぞ!保存!」
「hugo server で確認!」
「…あれ?一覧に出てこない…?」

もしあなたがこんな現象に遭遇したら、まず疑うべきは 「日付 (date)」 です。

Hugoの「未来日付」ルール

Hugoには、「日付が未来になっている記事は、まだ公開すべきではないと判断してビルドしない」 というデフォルトのルールがあります。

例えば、今が 1月1日 だとします。
記事の Front Matter がこうなっていたら…?

+++
title = "私の日記"
date = 2024-01-02T00:00:00+09:00  # 👈 明日の日付!
+++

Hugoはこれを 「あ、これは明日公開予定の記事だな。まだ隠しておこう」 と気を利かせて、生成されるHTMLから除外してしまうのです。

どういう時に起きる?

  1. 手動で日付を入力した時:
    • 「明日の朝に公開したいから、日付を明日にしておこう」と書いた場合。
  2. タイムゾーンのズレ:
    • 設定が UTC(世界標準時)のままだったりして、本来「今日」のつもりでも Hugo にとっては「未来」と判定されるケース。
  3. テンプレートのコピー:
    • 他の記事から Front Matter をコピペして、日付を適当に変えた時にうっかり未来にしてしまった場合(今回私はこれをやりました…😅)。

解決策

1. 日付を過去(または現在)に戻す

最もシンプルな方法は、date を現在以前の日時(2024-01-01T... など)に書き換えることです。

2. 「未来の日付でも表示する」オプションを使う

開発中(hugo server)だけは未来の記事も確認したい、という場合は、コマンドにオプションを付けます。

hugo server --buildFuture

または -F でもOKです。

逆手に取れば「予約投稿」ができる!

この機能は、裏を返せば 「予約投稿」 に使えます。
例えば、NetlifyやGitHub Actionsなどで「毎日決まった時間に自動でビルドする」ような設定をしておけば、
「記事ファイルの date を来週にしておく」だけで、その日になったら勝手に公開される という仕組みが作れるのです!

Hugoの「お節介」とも言えるこの機能、仕組みを知っていれば強力な武器になりますね。
もし記事消滅事件に遭遇したら、まずはカレンダーを確認してみてください!📅