JavaScriptを有効にしてください

[Hugo] 予約投稿したい(Hugoの機能について調べた)

 ·  ☕ 3 分で読めます

概要

週1で定期的に記事を投稿するような感じにしたかった。

簡単なやり方

以下の流れだとdateで設定した日時以降のビルドでその時点で過去の日付の記事が表示されるようになる。

  • フロントマターのdateを未来の日付にして、draft: falseにする
  • config.tomlbuildFuture = falseを設定する
  • 本番環境で定期的にビルドする

記事のアップロードを計画的に行うような場合だとこれで対応できそう。
ただこのブログは楽に続けることが目標なので計画性はない。

実際にやりたいこと

  • 適当に記事を書き溜めていって、draft: falseのものが週1回1件のペースで自動的に公開される。
    • 定期的に書いてるような気分になりたいので公開は一定のペースで行いたい
    • 公開可能な記事をストックしていきたい
  • dateは公開日が自動的に設定される
    • 定期的に記事を公開したいけど、dateの日付をいちいち気にしたくない

対応

以下の流れを考えてみる

  • 投稿可能な記事を抽出
  • 抽出した記事の日付を投稿日に合わせる
  • Github Actionsで上記を定期実行してデプロイ

前提

  • Hugo v0.96.0+extende
  • zzo commit 01f9e43e59b0efcc3d17d2d435834bb69c6e6668

調べたこと

Hugoの機能

hugo list futureで未来の日付の記事一覧を表示できる
https://gohugo.io/commands/hugo_list_future/

試しにdateを未来にして実行したが、何も表示されない。
(2022/12/30時点で実行。以下の状態のファイルがあった。)

❯ head content/ja/posts/hoge2.md 
---
title: "Hoge2"
date: 2023-01-01T00:00:00+09:00
slug: cdffd8e3c7c32cede251b9b999c1a6fe
draft: true
---

draft: truefalseに変えてみたら表示された。

❯ hugo list future
content/ja/posts/hoge2.md,2023-01-01T00:00:00+09:00

日付が先の場合にはビルドされないっぽい記載があったので、ブラウザで確認すると未来の日付のものが表示されてた。

dateの日付を変えただけだったのでpublishDateに変えてみたけど、それでも同じだった。
https://gohugo.io/content-management/front-matter/

設定を確認すると特に何かした覚えはなかったけど、config.tomlに以下の記述があった。

buildFuture = true

これをfalseに変更するとdateが未来の場合にはビルドされなくなった。
表示を確認したいときはサーバー起動時にオプションをつけると表示される

❯ hugo server --buildFuture

Netlifyでプレビューされる時には上記オプションがついた状態でビルドされるようなので、
特に設定しなくても未来の日付の記事の表示確認ができた。
ログを見ると以下が実行されていた。

$ hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL

まとめ

未来の日付にしておいて、その日以降のビルドで公開する時

  • dateを未来にする
  • draft: falseにする
  • config.toml buildFuture = falseにする
  • 開発環境で表示確認をする時にはサーバー起動時にオプションをつけるhugo server --buildFuture

雑だがデフォルトで書き込まれるdateを9999年12月31日とかにしたら必ず未来になる。
その上で、draft: falseになってる記事が公開可能なものと判断しても良さそう。

抽出については別で検討する。


書いた人
keee
Webエンジニア

目次