Hugoで未来の日付が認識されない問題とその解決方法

ブログ運営

はじめに

Hugoは軽量で高速な静的サイトジェネレーターとして人気があるが、未来の日付を記事に設定した場合に問題が生じることがある。この問題はHugoの仕様に起因するものであり、特定の操作において記事が認識されないという制約が存在する。本記事では、この仕様の詳細と実用的な解決方法について解説する。


問題の概要

Hugoでは、記事のフロントマターで指定した日付 (date) が現在より未来の場合、以下の操作で該当の記事が無視される:

  1. ローカルプレビュー (hugo server)
  2. 本番環境での静的ファイル生成 (hugo)

実例

以下のようなフロントマターを持つ記事を考える:

---
title: "Hugoで未来の日付"
date: 2024-12-20
description: "未来の日付に設定した記事が表示されない問題"
tags:
  - Hugo
---

上記の設定で hugo server を実行すると、記事はローカルプレビューに表示されない。同様に、デプロイ後の公開環境でも認識されない。


解決方法

1. 日付を現在または過去に設定する

最も簡単な方法は、記事の date を現在または過去の日付に変更することである。これにより、Hugoは記事を通常どおり認識し、プレビューや公開時に正しく表示する。

修正例

---
title: "Hugoで未来の日付"
- date: 2024-12-20
+ date: 2024-12-08
description: "未来の日付に設定した記事が表示されない問題"
tags:
  - Hugo
---

この変更により、hugo server コマンドで記事がプレビューに表示されるようになる。


2. publishDate を活用する

publishDate フィールドをフロントマターに追加することで、未来の日時を指定しつつ、Hugoがその記事を認識するように設定できる。

設定例

---
title: "Hugoで未来の日付"
date: 2024-12-08
publishDate: 2024-12-20
description: "未来の日付を利用したスケジュール投稿"
tags:
  - Hugo
---

この設定では、hugo コマンドでの静的ファイル生成時に publishDate が適用され、指定した日時以降に記事が公開される。ただし、hugo server ではこのフィールドが無視される点に注意が必要。


注意事項

Hugoの仕様による制限

Hugoには、記事のスケジュール投稿を自動で処理する機能がない。そのため、publishDate はあくまで静的ファイル生成時に有効となり、GitHub ActionsやNetlifyなどのCI/CDツールを活用することで初めてスケジュール投稿が可能になる。

日付の取り扱いに関する留意点

  • draft: true が指定されている記事は、日付にかかわらずプレビューや公開時に無視される。
  • expiryDate を設定すると、指定日以降に記事が非公開となる。

まとめ

Hugoでは未来の日付を扱う際に仕様上の制約があるが、適切に対処することで問題を回避できる。date を現在または過去の日付に設定するのが最も手軽な方法であり、publishDate を用いたスケジュール投稿も実現可能である。さらに、CI/CDツールを組み合わせることで、より柔軟な運用が期待できる。

Hugoの仕様を理解し、効率的なブログ運営を実現しよう。

コメント