ワークフローで Cron を使う
ワークフローファイルにスケジュールトリガーを追加します: on: schedule: - cron: '30 5 * * 1-5'。式は通常の 5 フィールド(分・時・日・月・曜日)を使い、* は YAML の特殊文字なので必ず引用符で囲みます。複数の cron を並べることもでき、どれが起動したかは github.event.schedule で分かります。
UTC と 5 分の制限
スケジュールは常に UTC で評価されるため、0 9 * * * は現地時刻ではなく UTC の 09:00 に実行されます。ツールの現地時刻列で換算しましょう。GitHub がサポートする最短間隔は 5 分です。@daily などのマクロは使えないので、各フィールドを記述してください。
遅延と非アクティブなリポジトリ
負荷が高い時間帯、特に毎時 0 分には、スケジュール実行の開始が遅れることがあります。時刻が厳密でなくてよければ、0 分ではなく 17 分のような半端な分を選びましょう。公開リポジトリでは、60 日間アクティビティがないとスケジュールされたワークフローが自動的に無効化されます。
スケジュールワークフローのテスト
schedule と並べて workflow_dispatch を追加すると、テスト中に手動でワークフローを起動できます。スケジュールはデフォルトブランチからのみ実行されるため、機能ブランチで cron を変更してもマージするまで反映されません。concurrency グループを使えば、遅い実行が次のスケジュール実行と重なるのを防げます。
よくある質問
- GitHub Actions の Cron はどのタイムゾーンですか?
- 常に UTC で、変更はできません。式を書くときは現地時刻を UTC に換算してください。
- ワークフローを毎分実行できますか?
- できません。最短間隔は 5 分で、それより頻繁なスケジュールでも最大で 5 分ごとにしか実行されません。
- スケジュールしたワークフローが時間どおりに動かないのはなぜ?
- スケジュールジョブはキューに入るため高負荷時に遅れることがあり、デフォルトブランチでのみ実行されます。非アクティブな公開リポジトリのワークフローも停止されます。
- GitHub Actions で @daily は使えますか?
- 使えません。0 0 * * * のような等価な 5 フィールドを使ってください。