
GitHub Actionsは、リポジトリのコードを基盤にCI/CDタスクを自動化するための強力なツールです。その中でも cron スケジュールを利用することで、特定のタイミングで定期的にジョブを実行できます。本記事では、GitHub Actionsを使ってcronタスクを設定する方法、利点と欠点、さらに具体的な利用例について解説します。
cronの書き方チートシート
GitHub Actionsで使用するcron式の基本形式:
┌───────────── 分 (0 - 59)
│ ┌───────────── 時 (0 - 23) UTC
│ │ ┌───────────── 日 (1 - 31)
│ │ │ ┌───────────── 月 (1 - 12)
│ │ │ │ ┌───────────── 曜日 (0 - 6) (0=日曜日)
│ │ │ │ │
* * * * *
| スケジュール | cron式 | 説明 |
|---|---|---|
| 毎日午前0時(UTC) | 0 0 * * * | 日本時間で午前9時 |
| 毎週月曜9:30(UTC) | 30 9 * * 1 | 日本時間で月曜18:30 |
| 毎月1日午前0時 | 0 0 1 * * | 月初の定期実行 |
| 15分ごと | */15 * * * * | 最短実行間隔 |
| 平日午前10時 | 0 10 * * 1-5 | 月〜金のみ |
重要: GitHub ActionsのcronはUTC時刻で設定します。日本時間(JST = UTC+9)から9時間引いた時刻を指定してください。
GitHub Actions scheduleの基本設定
GitHub Actionsでは、on.scheduleトリガーを使って定期実行ジョブを設定できます。UNIXのcronと同じ形式でスケジュールを定義します。
基本的なワークフロー例
| |
複数スケジュールの設定
| |
利用する利点
1. GitHubインフラを利用
自社でサーバーやスケジューラーを構築する必要がなく、GitHubの安全で安定したインフラをそのまま利用できます。
2. コードと自動化の統合
リポジトリのコードやプロジェクトに直接関連するタスクを、自動化して定期的に実行可能です。
3. 柔軟なスケジュール
cron 形式を使うことで、日次・週次・月次といった多様なスケジュール設定ができます。
4. コストの最適化
パブリックリポジトリでは無制限に無料利用可能で、プライベートリポジトリでも一定の無料枠が提供されます。例えば、GitHub Freeプランでは月2, 000分の無料枠があります。
5. クロスプラットフォーム対応
Linux、Windows、macOSなど、さまざまなOSでジョブを実行できます。
注意点と欠点
1. 実行精度
cron のスケジュールはUTC基準で指定する必要があり、実際の実行時間に数秒から数分の遅延が発生する可能性があります。
2. 高頻度タスクには不向き
最短でも1分間隔での実行が可能ですが、リアルタイム性を求めるタスクには適しません。
3. リソース制限
無料枠を超過すると追加コストが発生するため、大規模なタスクや高頻度の利用ではコストに注意が必要です。
4. 利用規約への配慮
GitHub Actionsは主にリポジトリ関連のタスクに使用することが求められています。CI/CDと無関係の目的で過度に利用すると、利用規約違反と見なされる可能性があります。
実際の利用例
1. 定期テストの実行
| |
2. APIデータ収集
| |
3. Slack通知
| |
トラブルシューティング
ワークフローが実行されない場合
- デフォルトブランチを確認: cronはデフォルトブランチ(main/master)のワークフローのみ実行されます
- リポジトリのアクティビティ: 60日間活動がないとスケジュールが無効化されます
- UTC時刻を再確認: 日本時間との時差(-9時間)を考慮してください
実行が遅延する場合
GitHub Actionsのcronは、指定時刻から数分〜数十分遅延する可能性があります。厳密なタイミングが必要な場合は別のソリューションを検討してください。
手動でワークフローをテストする
| |
workflow_dispatchを追加すると、GitHub UIから手動でワークフローを実行できます。
よくある質問
GitHub Actions cronの最短実行間隔は?
最短で5分間隔(*/5 * * * *)です。1分間隔(* * * * *)も記述可能ですが、GitHubの推奨ではありません。
UTC時刻を日本時間に変換するには?
日本時間(JST)= UTC + 9時間です。逆に、UTCに変換する場合はUTC = JST - 9時間となります。
例:
- 日本時間の毎日18:00 → UTC 09:00 →
0 9 * * * - 日本時間の毎週月曜9:00 → UTC 日曜24:00(月曜0:00) →
0 0 * * 1
cronとworkflow_dispatchの違いは?
- cron (schedule): 自動的に定期実行
- workflow_dispatch: 手動でトリガー(GitHub UI、API、CLIから実行)
両方を併用すると、定期実行と手動実行の両方が可能になります。
まとめ
GitHub Actionsのcron(schedule)機能を使えば、リポジトリに関連したさまざまなタスクを簡単にスケジュール実行できます。
ポイント:
- cron式はUTC時刻で設定(日本時間 -9時間)
- デフォルトブランチのワークフローのみ実行
- 実行タイミングに数分の遅延が発生する可能性あり
- 無料枠を超過するとコストが発生
CI/CDに限定せず、データ収集や通知、自動化された更新作業など、幅広い用途に対応可能です。利用規約やコスト管理に注意しながら、効率的に運用しましょう。
参考リンク
- GitHub Actions公式ドキュメント - スケジュールイベント
- Crontab Guru - cron式のテストツール