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」に設定済みです。表示される時刻はあなたの手元(日本時間)で実際に動く時刻です。
次に実行される時刻
※ 時刻はお使いの端末のローカルタイムで計算しています。