GitHub Actionsで記事の予約投稿ができた件について

はじめに

このブログは静的HTMLで運用しています。

WordPressのような予約投稿機能がないので、公開日まで手動で待ってからindex.htmlを更新してpush…という運用でした。

面倒だったので、Claude Codeに相談してみました。

GitHub Actionsで自動化できるとのこと。やってみたら、本当にできました。

GitHub Actions Scheduled Publish Concept

背景:静的サイトの記事管理

このサイトはGitHub Pagesでホスティングしています。

記事はdocs/articles/に直接HTMLを置いています。

公開済み記事はindex.htmlの記事一覧に手動で追加。sitemap.xmlにも手動で追加。

未公開の記事はファイルは存在するけれど、indexには載せないという運用でした。

課題

記事を書き溜めておきたい。

でも公開日に手動でindex更新するのは面倒。

旅行中とか、PCがないときに困る。

WordPressみたいに「この日に公開」と設定しておきたい。

解決策:GitHub Actions + cron

GitHub Actionsのスケジュール実行機能を使います。

毎日決まった時間にスクリプトを実行。公開日を過ぎた記事を自動でindex/sitemapに追加。自動でコミット&プッシュ。

これで予約投稿が実現できます。

実装したもの

ファイル構成

追加したファイルは3つです。

  • .github/workflows/scheduled-publish.yml - 定時実行ワークフロー
  • scripts/publish-scheduled.mjs - 公開処理スクリプト
  • scheduled-articles.json - 公開予定記事リスト

scheduled-articles.json

公開予定の記事をJSONで管理します。

publishDatefilenametitleの3項目。公開されたら自動で削除されます。

{
  "articles": [
    {
      "publishDate": "2026-01-30",
      "filename": "20260130_example-article.html",
      "title": "記事タイトル"
    }
  ]
}

スクリプトの処理

処理の流れはこうです。

  1. scheduled-articles.jsonを読み込む
  2. 今日の日付(JST)と比較
  3. 公開日を過ぎた記事を抽出
  4. index.htmlの記事一覧に追加
  5. sitemap.xmlに追加
  6. scheduled-articles.jsonから削除
  7. 変更をコミット&プッシュ
Static Site Automation Workflow

GitHub Actionsワークフロー

毎日07:00 JST(22:00 UTC)に実行されます。

手動実行も可能です(workflow_dispatch)。変更がなければコミットしません。

運用フロー

記事を予約投稿したいとき

  1. 記事HTMLをdocs/articles/に作成
  2. scheduled-articles.jsonに追加
  3. git push
  4. あとは自動で公開される

手動で今すぐ公開したいとき

GitHub → Actions → Run workflowで手動実行できます。

Developer Relaxing with Automation

ハマったポイント

タイムゾーン

GitHub Actionsの実行環境はUTCです。

スクリプト内でJSTに変換する必要がありました。

権限設定

GitHub Actionsからコミット&プッシュするには書き込み権限が必要です。

Settings → Actions → Workflow permissionsで「Read and write permissions」を選択しました。

おわりに

静的サイトでも予約投稿ができるようになりました。

WordPressのような動的CMSに頼らなくても、GitHub Actionsを使えば同じことができます。

実装自体はClaude Codeに手伝ってもらって、1時間もかかりませんでした。

これで旅行中でも記事が公開されます。PCを開けない日が続いても大丈夫。

静的サイトは自由度が高いのが魅力です。こうやって必要な機能を後から足していける。

同じように静的サイトで記事管理している方の参考になれば幸いです。