「毎朝9時にPRレビューをしてほしい」「週次で依存パッケージの更新チェックだけ走らせたい」──こういった定期処理をGitHub Actionsで実装すると、YAMLの設定管理・secrets運用・ランナーコストが積み重なります。Claude Code Scheduled Tasksを使えば、自然言語のプロンプトをcron式に紐づけるだけで同じことが実現できます。
本記事では、Cloud/Desktop/loopの3モードの違いから、実際のセットアップ手順・ユースケース別の設定例・GitHub Actionsとの使い分け基準まで、まとめて解説します。
GitHub Actionsとの連携を深掘りしたい場合はGitHub Actions自動化ガイドを、issueの自動トリアージについてはGitHub Issueトリアージ自動化ガイドを参照してください。
3つの実行モードを理解する
Claude Code Scheduled Tasksには実行環境ごとに3つのモードがあります。どのモードを選ぶかで「マシンを起動しておく必要があるか」「ローカルファイルにアクセスできるか」が変わります。
| モード | 実行場所 | マシン起動 | ローカルファイル | MCP対応 | 最小間隔 | Linux対応 |
|---|---|---|---|---|---|---|
| Cloud | claude.aiサーバー | 不要 | ×(リポジトリのみ) | ○ | 1時間 | ○ |
| Desktop | ローカルPC | 必要 | ○(フルアクセス) | ○ | 任意 | × |
| /loop | ローカル端末 | 必要(セッション中) | ○ | ○ | 1分 | ○ |
Cloudモードはマシンがオフでも動き続けるクラウド実行が最大のメリット。GitHubリポジトリへのアクセスはGitHub App経由で行います。DesktopモードはmacOS/Windowsのみ(Linuxは非対応)で、ローカルの全ファイルにアクセスできるため、社内ファイルサーバや秘密鍵が必要な処理に向いています。/loopコマンドはセッション中の短周期繰り返しに使うシンプルな手段です。
Cloud Scheduled Tasksのセットアップ
claude.aiのProまたはTeamプランが必要です(2025年6月時点)。設定は以下の手順で行います。
必要なもの
- Claude Pro / Team / Enterprise プラン
- GitHubリポジトリ(GitHub App連携用)
- タスクに必要な環境変数(APIキーなど)
ステップ1:Scheduled Tasksページを開く
https://claude.ai/code/scheduled にアクセスし、「New Scheduled Task」をクリックします。
ステップ2:GitHubリポジトリを連携する
Claude GitHub Appをインストールして対象リポジトリを選択します。これにより、タスク実行時にリポジトリのクローン・PR作成・コミットが可能になります。
# Claudeが使えるリポジトリ一覧を確認 gh api /user/installations --jq '.installations[].app_slug'
ステップ3:タスクを定義する
実行プロンプトとスケジュールを設定します。プロンプトは自然言語で書けます。
# プロンプト(自然言語で記述) 毎朝9時(JST)にリポジトリのopen PRを確認し、以下を行ってください: 1. レビュー待ちが48時間を超えているPRにコメントでリマインドを送る 2. CI/CDが失敗しているPRにはラベル "ci-failed" を付ける 3. 実施した操作のサマリーをPR #1(進捗管理用)にコメントする # スケジュール(cron式、UTC基準) 0 0 * * 1-5 # 平日9:00 JST = UTC 0:00
ステップ4:環境変数を設定する
タスクから使うAPIキーはタスク設定画面の「Environment Variables」に追加します。コード内では通常の環境変数として参照できます。
# プロンプト内で環境変数を参照する例 Slackの $SLACK_WEBHOOK_URL にサマリーを投稿してください。 Linear APIトークンは $LINEAR_API_KEY です。
cron式の書き方
スケジュールはcron式(UTC基準)で指定します。頻繁に使うパターンを整理します。
| 目的 | cron式(UTC) | 日本時間換算 |
|---|---|---|
| 平日朝9時 | 0 0 * * 1-5 |
月〜金 9:00 JST |
| 毎日夜の依存更新チェック | 0 15 * * * |
毎日 0:00 JST |
| 週次レポート(月曜朝) | 0 23 * * 0 |
月曜 8:00 JST |
| 毎時スキャン | 0 * * * * |
毎時0分 |
| 6時間ごと | 0 */6 * * * |
0/6/12/18時(JST+9) |
注意:Cloudモードの最小実行間隔は1時間です。それより短い間隔が必要な場合は/loopコマンドかDesktopモードを使います。また、cron式はUTC基準のため、JST(UTC+9)に換算して設定してください。
/loop コマンドで短周期タスクを回す
/loopコマンドはClaudeのセッション内で一定間隔の繰り返し処理を実行します。スクリプト開発中の動作確認や、CI待機ループのような短周期処理に向いています。
# /loop [間隔] [プロンプト] /loop 5m 現在のCIの状態を確認して、完了したらSlackに通知してください # デフォルト間隔は10分 /loop mainブランチへの新しいコミットがあれば差分を要約してください # 有効期限は3日(自動停止) # 停止するには Ctrl+C またはセッションを閉じる
セッションを閉じると停止するため、継続的な監視にはCloudモードが適しています。Desktopモードはマシンがスリープすると停止するため、サーバーマシンでの運用でなければ安定性はCloudモードに劣ります。
Desktop Scheduled Tasksの設定(macOS/Windows)
Claude Codeデスクトップアプリを使うとローカル環境でスケジュール実行ができます。ローカルの秘密鍵・設定ファイルにアクセスできるのが利点ですが、Linuxでは利用できません。
# タスク一覧を確認 /cron list # 新しいタスクを登録(自然言語でもcron式でも可) /cron create "毎朝8時にローカルのtests/ディレクトリを実行してレポートを生成" # タスクを削除 /cron delete <task-id>
Desktopモードのタスクは、マシンがスリープ中・シャットダウン中は実行されません。サーバーマシンを常時起動しているチーム向けの機能です。一般的なノートPCでの定期自動化にはCloudモードの方が安定します。
ユースケース別の設定例
実際によく使われる定期タスクのパターンを紹介します。
PRレビュー自動化
# スケジュール: 0 0 * * 1-5 (平日9:00 JST) # プロンプト: open PRの一覧を取得し、以下を確認してください: - レビュー未着手で24時間以上経過しているPRはコメントでリマインドを送る - テストが通っていてレビュー承認済みのPRはマージ候補としてラベルを付ける - コンフリクトが発生しているPRには "needs-rebase" ラベルを付ける 変更した内容のサマリーを最後に出力してください。
依存パッケージ更新チェック
# スケジュール: 0 23 * * 0 (月曜8:00 JST) # プロンプト: npm outdated または pip list --outdated を実行し、 セキュリティ上重要な更新があればPRを作成してください。 マイナーバージョン以上の更新は一覧にまとめてissueを作成するだけにし、 自動マージはしないでください。
デプロイ後の動作確認
# スケジュール: */30 * * * * (30分ごと) # プロンプト: $HEALTH_CHECK_URL にHTTPリクエストを送り、 ステータスコード200以外が返った場合は $SLACK_WEBHOOK_URL にアラートを送信してください。 過去1時間で3回以上アラートが発生した場合は "incident" ラベルをつけたGitHub Issueを作成してください。
コード品質の定期監査
# スケジュール: 0 22 * * 4 (金曜7:00 JST) # プロンプト: 以下を実行して週次品質レポートを作成してください: 1. eslint --max-warnings 0 でエラー件数を集計 2. 未使用のエクスポート関数をリストアップ 3. TODO/FIXMEコメントが増えていたらissueに記録 4. 結果をWEEKLY-REPORT.mdに追記してコミットする
GitHub Actionsとの使い分け
「Scheduled Tasksで何でもできる」ではなく、GitHub Actionsが向いている場面もあります。
| 観点 | Scheduled Tasks | GitHub Actions |
|---|---|---|
| 設定方法 | 自然言語プロンプト | YAMLワークフロー |
| トリガー | 時間ベース(cron) | イベント駆動(push/PR/issueなど) |
| 実行環境 | Claude AIサーバー / ローカル | GitHubホストランナー |
| コスト | Claudeのプラン内 | 分数課金(パブリックリポジトリは無料枠あり) |
| 向いている処理 | 判断・要約・自然言語処理 | ビルド・テスト・デプロイパイプライン |
| 再現性 | LLMの確率的な出力 | シェルコマンドの決定論的な実行 |
| 監査ログ | Claude会話履歴 | Actionsログ(永続) |
Scheduled Tasksが向いているケース:「判断」や「要約」が必要な処理。PRのラベル付け・レポート生成・コードレビューの促進・Slack通知文の生成など、自然言語の理解が価値を持つ作業です。
GitHub Actionsが向いているケース:ビルド・テスト・デプロイのような決定論的なパイプライン。「毎回同じ手順で実行される」必要がある処理はActionsで管理する方が監査しやすく、再現性も高いです。
実運用のポイント:両者は排他ではありません。「GitHub Actionsでビルド・デプロイ → Scheduled Tasksでデプロイ後のヘルスチェックと通知文生成」のように組み合わせると、それぞれの強みを活かせます。
MCP連携で外部サービスと繋ぐ
Scheduled TasksはMCPサーバーと組み合わせることで、外部サービスへの読み書きが可能になります。タスクのプロンプト内でMCPサーバーが提供するツールを自然に呼び出せます。
| MCPサーバー | できること | ユースケース例 |
|---|---|---|
| GitHub MCP | PR/Issue/コードの操作 | 自動ラベル付け・PR作成 |
| Slack MCP | メッセージ送受信 | 週次サマリーの投稿 |
| Linear MCP | チケット管理 | スプリント進捗の自動集計 |
| Google Drive MCP | ドキュメント読み書き | 週次レポートのスプレッドシート更新 |
| Notion MCP | ページ作成・更新 | 会議録・タスクの自動整理 |
MCP設定の詳細はMCP完全ガイドを参照してください。
セキュリティと注意事項
定期タスクを本番環境で動かす際に気をつけるべきポイントをまとめます。
本番環境での注意点
- APIキーの管理:環境変数に直接書かずにタスク設定画面のSecrets機能を使う
- 書き込み権限の最小化:GitHub Appの権限はタスクに必要な最小限に絞る(全リポジトリ権限は付けない)
- ドライランの確認:本番タスクを追加する前に「実行内容を報告するだけ」のプロンプトで動作確認する
- Issueトリアージとの組み合わせ:自動でcloseするタスクは撤退条件を明示する(GitHub Issueトリアージガイド参照)
- 実行ログの確認:Scheduled Tasksのログは定期的に確認し、意図しない操作がないかチェックする
よくある質問
まとめ
Claude Code Scheduled Tasksは、YAMLを書かずに自然言語で定期処理を定義できる新しいアプローチです。
- Cloudモード:マシン不要・GitHub App連携・最小間隔1時間
- Desktopモード:ローカルファイルアクセス可・macOS/Windowsのみ
- /loop:セッション内の短周期繰り返し・最小間隔1分
「判断が必要な定期処理はScheduled Tasks、決定論的なビルド・デプロイパイプラインはGitHub Actions」という使い分けが基本です。まずはPRレビューの促進や週次レポート生成といった低リスクなタスクから試してみることをおすすめします。
関連記事:GitHub Issueトリアージ自動化ガイド / Claude Code × GitHub Actions自動化ガイド / MCP完全ガイド
