GitHub Actionsのcron(schedule)の書き方 — timezone対応・遅延対策
GitHub Actionsの定期実行(scheduleトリガー)は、標準的な5フィールドのcron式で指定します。指定がなければUTCですが、現在はtimezoneに「Asia/Tokyo」を指定して日本時間のまま書けます。
書式の要点(標準cronとの違い)
- フィールドは標準の5つ(分 時 日 月 曜日)。秒や年は指定できません。
- YAMLでは式全体をクォートで囲みます(『*』がYAMLの記法と衝突するため)。
- 最短間隔は5分。それより短い指定はできません。
- timezoneには「Asia/Tokyo」のようなIANAタイムゾーン名を指定できます。省略時はUTCです。
- デフォルトブランチ上のワークフローだけが定期実行されます。
日本時間(JST)はtimezone指定が簡単
scheduleの各項目にtimezone: "Asia/Tokyo"を加えると、cron式を日本時間のまま書けます。timezoneを使わない既存設定ではUTC基準のため、日本時間から9時間引いて指定します。曜日をまたぐ換算ミスを避けるならtimezone指定が分かりやすい方法です。
コピペで使える設定例
平日の日本時間9時に実行(timezone指定)
on:
schedule:
- cron: '0 9 * * 1-5'
timezone: "Asia/Tokyo"timezoneを使わず毎日の日本時間23時に実行(UTC換算)
on:
schedule:
- cron: '0 14 * * *' # JST 23:00 = UTC 14:00つまずきポイント
- timezoneを省略した場合はUTCです。日本時間のつもりで式だけを書くと9時間ずれます。
- 負荷が集中する毎時0分付近は、実行が遅れたり一部ジョブが破棄されたりする可能性があります。厳密な正時が不要なら7分や13分などへずらします。
- 公開リポジトリでは、リポジトリ活動が60日間ないとscheduleが自動で無効化されます。
- scheduleイベントはデフォルトブランチの最新コミット上で動きます。ワークフローファイルもデフォルトブランチに置く必要があります。
式を検証する(標準cron形式)
下のツールで式の意味と次回実行時刻を確認できます。timezoneに「Asia/Tokyo」を指定する例として、日本時間のまま式を確認できます。timezoneを省略する設定では「UTC」に切り替えて検証してください。
ドロップダウンで組み立てる(クリックだけでcron式を作成)
各項目を選ぶと、上の式が自動で更新されます。「毎」のままの項目は現在の式を維持します。
次に実行される時刻
※ 時刻はお使いの端末のローカルタイムで計算しています。