コンテンツにスキップ

GitHub Actionsで定期実行を5分で設定する方法

この記事の対象者

  • GitHub Actionsで定期的なタスクを自動化したい開発者

この記事のポイント

  1. GitHub Actionsのscheduleトリガーが設定できる
  2. timezoneを使う場合とUTC換算する場合を判断できる
  3. 高負荷時間帯の遅延・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:1717 9 * * * + timezone: "Asia/Tokyo"9:17
平日朝9:1717 9 * * 1-5 + timezone: "Asia/Tokyo"9:17(月-金)
毎週月曜9:1717 9 * * 1 + timezone: "Asia/Tokyo"月曜9:17
毎月1日9:1717 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'
      })

次のステップ

公式情報


この記事は、従来の複数のcron関連記事から GitHub Actions に特化した内容を抽出・整理したものだ。