web
Next.js + Cloudflare Pagesで記事の予約投稿を実装する
ブログ記事の公開を自動化!publishDateフィールドとCloudflareの定期ビルドを組み合わせて、手間なく予約投稿を実現する方法を解説します。
2025-12-026 min readAdabana Saki
-views
Next.jsCloudflare自動化ブログGitHub Actions
Next.js + Cloudflare Pagesで記事の予約投稿を実装する
毎日ブログ記事を公開したいけど、毎回手動でdraft: falseに変更してデプロイするのは面倒ですよね。
この記事では、publishDateフィールドを使って記事の予約投稿を実現する方法を紹介します。
<callout type="tip" title="予約投稿の全体像">記事のfrontmatterにpublishDateを設定しておき、毎日の定期ビルドで日付を比較することで、指定日以降に自動公開される仕組みを作ります。
従来の問題点
多くのNext.jsブログでは、記事の公開/非公開をdraftフラグで管理しています:
Markdown
この方法だと、公開するたびに以下の手順が必要です:
- ファイルを編集して
draft: falseに変更 - コミット&プッシュ
- デプロイを待つ
毎日投稿するには手間がかかりますね。
</callout>解決策:ビルド時の日付判定
publishDateフィールドを導入し、ビルド時にその日付と現在日付を比較することで、自動的に公開/非公開を判定します。
Mermaid Diagram
Loading diagram...
メリット
- コミット履歴が汚れない - GitHub Actionsで毎日自動コミットする方法と違い、不要なコミットが発生しない
- シンプル - 記事に
publishDateを書くだけ - 柔軟 - いつでも公開日を変更できる
実装方法
1. 型定義にpublishDateを追加
TypeScript
lib/blog.ts
2. 記事取得ロジックを修正
TypeScript
lib/blog.ts
publishDateが設定されている場合はそちらを優先publishDateがない場合は従来のdraftフラグで判定- UTCで統一することで、ビルド環境のタイムゾーンに依存しない
- これにより既存の記事との後方互換性を維持
3. Cloudflare Pagesの定期ビルド設定
記事が自動公開されるには、毎日ビルドを実行する必要があります。
<details-block title="Deploy Hookの作成手順">- Cloudflare Dashboard → Pages → プロジェクト → Settings
- 「Builds & deployments」→「Deploy hooks」
- 新しいhookを作成してURLをコピー
GitHub Actionsワークフロー
YAML
.github/workflows/scheduled-deploy.yml
- リポジトリ → Settings → Secrets and variables → Actions
- 「New repository secret」をクリック
- Name:
CLOUDFLARE_DEPLOY_HOOK - Value: コピーしたDeploy Hook URL
使い方
記事のfrontmatterにpublishDateを設定するだけ:
Markdown
動作の流れ
Mermaid Diagram
Loading diagram...
まとめ
| 方法 | メリット | デメリット |
|---|---|---|
| 手動でdraft変更 | シンプル | 毎日の手間がかかる |
| GitHub Actionsで自動コミット | 完全自動 | コミット履歴が汚れる |
| publishDate + 定期ビルド | 自動&履歴クリーン | 初期設定が必要 |
一度設定してしまえば、あとは記事を書いてpublishDateを設定するだけ。ブログ運営の手間を大幅に削減できます。
この方法は、Cloudflare Pages以外のホスティングサービス(Vercel、Netlifyなど)でも同様に実装できます。定期ビルドの方法は各サービスのドキュメントを参照してください。