GitHub Actionsで定期実行を5分で設定する方法¶
この記事の対象者
- GitHub Actionsで定期的なタスクを自動化したい開発者
この記事のポイント¶
- GitHub Actionsの
scheduleトリガーが設定できる timezoneを使う場合とUTC換算する場合を判断できる- 高負荷時間帯の遅延・dropを避ける設定にできる
2026年時点の重要な変更点
GitHub Actionsのscheduleは、cron式に加えてIANA timezoneを指定できる。以前のように必ずUTCへ換算する必要はない。ただし、高負荷時間帯、特に毎時0分付近では定期実行が遅延し、負荷が高い場合はqueueされたjobがdropされる可能性がある。
定期実行の仕組み¶
GitHub Actionsのscheduleイベントは、指定した時刻にワークフローを自動実行する。 内部的にはcron式を使用するが、GitHub上で完結するため、サーバー設定は不要だ。
公式ドキュメント上の現在の要点は次の3つだ。
- ワークフローはデフォルトブランチ上の最新コミットで実行される
- 最短実行間隔は5分
timezoneを省略した場合はUTC基準、指定した場合はそのIANA timezone基準
実装手順¶
ステップ1: ワークフローファイルを作成¶
.github/workflows/scheduled-task.ymlを作成:
name: 定期実行タスク
on:
schedule:
- cron: '17 9 * * *' # 毎日9:17
timezone: "Asia/Tokyo"
workflow_dispatch: # 手動実行も可能に
17分にしているのは、毎時0分付近の高負荷時間帯を避けるためだ。UTC換算で管理したい場合は、timezone行を削除し、cron式をUTCの時刻で指定する。
ステップ2: Claude Code実行ジョブを追加¶
jobs:
run-claude:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Claude Code実行
env:
CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
run: |
# Claude Codeで自動化タスクを実行
npx claude-code --task "デイリーレポート生成"
ステップ3: GitHubにプッシュして有効化¶
git add .github/workflows/scheduled-task.yml
git commit -m "Add scheduled workflow"
git push origin main
よく使うcron式パターン¶
| 実行タイミング | cron式 | 日本時間(JST) |
|---|---|---|
| 毎日朝9:17 | 17 9 * * * + timezone: "Asia/Tokyo" | 9:17 |
| 平日朝9:17 | 17 9 * * 1-5 + timezone: "Asia/Tokyo" | 9:17(月-金) |
| 毎週月曜9:17 | 17 9 * * 1 + timezone: "Asia/Tokyo" | 月曜9:17 |
| 毎月1日9:17 | 17 9 1 * * + timezone: "Asia/Tokyo" | 1日9:17 |
| 6時間ごと | 17 */6 * * * | UTCの0:17, 6:17, 12:17, 18:17 |
timezoneを使わない場合、GitHub ActionsはUTC基準だ。日本時間9:00に動かしたいなら、JSTはUTC+9なので 0 0 * * * と指定する。
トラブルシューティング¶
| 症状 | 原因 | 解決策 |
|---|---|---|
| 実行されない | cron式の誤り | crontab.guruで検証 |
| 時刻がずれる | timezone未指定、またはUTC換算ミス | timezone: "Asia/Tokyo"を指定するか、UTC基準で計算 |
| 毎時0分付近で遅れる | GitHub Actionsの高負荷時間帯 | 0分を避け、17分や23分などにずらす |
| たまに実行されない | 高負荷でqueueされたjobがdropされた可能性 | 重要処理は手動実行や再実行手段を用意する |
| 60日で停止 | public repositoryの非アクティブ | リポジトリに定期的にコミット |
高度な設定(クリックで展開)
### 複数スケジュールの設定on:
schedule:
- cron: '17 9 * * *'
timezone: "Asia/Tokyo"
- cron: '23 12 * * 5'
timezone: "Asia/Tokyo"
jobs:
scheduled-task:
strategy:
matrix:
environment: [dev, staging, prod]
runs-on: ubuntu-latest
steps:
- name: Run for ${{ matrix.environment }}
run: echo "Running for ${{ matrix.environment }}"
- name: エラー通知
if: failure()
uses: actions/github-script@v7
with:
script: |
github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Scheduled task failed',
body: 'Check the workflow run for details'
})
次のステップ¶
公式情報¶
- Workflow syntax for GitHub Actions - on.schedule
- Events that trigger workflows - schedule
- GitHub Changelog: Timezone support for scheduled workflows
この記事は、従来の複数のcron関連記事から GitHub Actions に特化した内容を抽出・整理したものだ。