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式を作成)

各項目を選ぶと、上の式が自動で更新されます。「毎」のままの項目は現在の式を維持します。

次に実行される時刻

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

公式ドキュメント

GitHub公式: scheduleトリガー