GitHub Actionsのcron(schedule)の書き方 — JST対応・遅延の注意点

GitHub Actionsの定期実行(scheduleトリガー)は、標準的な5フィールドのcron式で指定します。最大の注意点は式が【UTC基準】で解釈されることで、日本時間とは9時間ずれます。

書式の要点(標準cronとの違い)

  • フィールドは標準の5つ(分 時 日 月 曜日)。秒や年は指定できません。
  • YAMLでは式全体をクォートで囲みます(『*』がYAMLの記法と衝突するため)。
  • 最短間隔は5分。それより短い指定はできません。
  • デフォルトブランチ上のワークフローだけが定期実行されます。

日本時間(JST)で指定するには

JSTはUTC+9時間なので、動かしたい日本時間から9時間引いた時刻を書きます。例: 日本時間の朝9時 → UTCの0時 → 「0 0 * * *」。日本時間の深夜0時 → UTCの前日15時 → 「0 15 * * *」。曜日をまたぐ場合(日本時間の月曜8時59分以前)は曜日も1つ前にずらす必要があります。

コピペで使える設定例

平日の日本時間9時に実行(UTC 0時)

on:
  schedule:
    - cron: '0 0 * * 1-5'   # JST 9:00 = UTC 0:00

毎日の日本時間23時に実行(UTC 14時)

on:
  schedule:
    - cron: '0 14 * * *'    # JST 23:00 = UTC 14:00

つまずきポイント

  • UTCの9時間差を忘れるのが最も多いミス。上のツールで「実行サーバーのタイムゾーン=UTC」を選ぶと、手元の時刻でいつ動くか確認できます。
  • 指定時刻ぴったりの実行は保証されません。混雑時間帯(毎時0分など)は数分〜数十分遅延したりスキップされることがあります。重要なジョブは時刻を数分ずらすのが定石です。
  • リポジトリに60日間アクティビティがないと、定期実行は自動で無効化されます。
  • pushした直後の初回スケジュールは実行されないことがあります。

式を検証する(標準cron形式)

下のツールで式の意味と次回実行時刻を確認できます。このサービスはUTC基準のため、タイムゾーンを「UTC」に設定済みです。表示される時刻はあなたの手元(日本時間)で実際に動く時刻です。

次に実行される時刻

※ 時刻はお使いの端末のローカルタイムで計算しています。

公式ドキュメント

GitHub公式: scheduleトリガー