GitHub Actionsのcronを日本時間(JST)で設定する方法

結論を先に。GitHub Actions の schedule の cron は必ず UTC で解釈され、タイムゾーンは指定できません。日本時間(JST)で動かしたい時刻から9時間引いた値を UTC の cron として書きます。たとえば毎朝9時(JST)に動かしたいなら 0 0 * * *(UTC 0時 = JST 9時)です。

# JST 09:00 に実行したい → UTC 00:00
on:
schedule:
- cron: "0 0 * * *"

日付や曜日を入れると計算がずれやすいので、JST↔cron 変換ツールを作りました。日本時間を入れれば貼れる cron が出ますし、既存の cron が JST で何時に走るかも確認できます。

原因:cron は UTC 固定

GitHub Actions のスケジュールは、ワークフローの schedule に書いた cron を UTC として扱います。TZ などでタイムゾーンを変える仕組みはありません。ローカルが日本時間の感覚で 0 9 * * * と書くと、それは UTC 9時 = JST 18時に動いてしまいます。

対処:9時間引く

JST は UTC+9 なので、cron の時(hour)フィールドから9を引きます。

  1. 日中の時刻はそのまま引くだけです。
JST 15:00 → UTC 06:00 → cron: "0 6 * * *"
  1. JST が0時〜8時台のときは、9を引くと前日になります。時は +15 して、曜日や日付を1日戻します。
JST 07:00 → UTC 22:00(前日)→ 毎日なら "0 22 * * *"
  1. 曜日を指定するときは、この「前日ずれ」で曜日もずれます。平日(月〜金)の JST 7時なら、UTC では日〜木の22時です。
JST 平日 07:00 → cron: "0 22 * * 0,1,2,3,4" # UTC 日〜木

つまずきやすい点

  • 分(minute)は JST でも UTC でも同じなので、毎時実行 M * * * * はそのまま使えます。
  • 曜日は 0 が日曜、1〜6 が月〜土です(7 も日曜として使えます)。
  • 定刻ぴったりには起動しません。GitHub 側の混雑で数分〜十数分遅れることがあり、高負荷な時刻(毎時0分など)は特に遅れがちです。厳密な時刻が必要な処理には向きません。

まとめ