Claude Code Routines完全ガイド — スケジュール・API・GitHub連携と安全設計
Claude Code Routinesの仕組み、3トリガーの設定、権限とシークレットの安全設計、Desktop scheduled tasksや/loopとの使い分けをまとめます。
Claude Code Routinesは、プロンプト・リポジトリ・connectorを1セットで保存し、スケジュールやAPI呼び出し、GitHubイベントで自動実行するクラウド機能です。実体はAnthropicが管理するclaude.ai/code側で動き、ローカルマシンの電源が落ちていても走ります。承認プロンプトは一切なく、shellコマンドからPR作成まで全自律です。research preview段階の機能で、挙動やAPI仕様は今後も変わります。
Routineの正体 — 保存済み設定の自動実行
Routineは「プロンプト + 1つ以上のリポジトリ + connectorの組」を1回保存し、あとはトリガー任せで繰り返し実行する仕組みです。CLIやDesktopアプリは設定を作る入口の1つにすぎず、実行そのものはすべてクラウド側で完結します。
構成要素は次の5つです。
| 要素 | 内容 |
|---|---|
| プロンプト | 内容起動のたびに渡す指示文。会話の途中に紛れ込む未検証の入力ではなく、事前に保存済みの正規タスクとして扱われる。自己完結していないと自律実行が成立しない |
| リポジトリ | 内容実行のたびにdefaultブランチから新規clone。ローカルの未コミット変更は一切引き継がない |
| 環境 | 内容ネットワークアクセス(Trusted / Custom / Full)・環境変数・setup scriptを束ねるcloud environment。setup scriptの実行結果はキャッシュされ、毎回は再実行されない |
| connector | 内容Slack・Linear・Google Drive等のMCP接続。Routine作成時点で接続済みの全connectorが既定で含まれる |
| トリガー | 内容scheduled・API・GitHubの組み合わせ。1つのRoutineに複数トリガーを同時設定できる |
Routineが使える範囲は「選んだリポジトリ・環境のネットワーク設定・含めたconnector」の3つで決まります。リポジトリにコミットされたSkillsもそのまま呼び出せるため、実行できることの幅は通常のCloud sessionと変わりません。
3つのトリガーは何が違うか
スケジュールトリガー
決まった時刻・周期で起動します。プリセットはhourly・daily・weekdays・weeklyの4種類。時刻はローカルタイムゾーンで入力すると自動でUTC変換され、実行のたびに数分の一定オフセット(stagger)がかかります。同じRoutineなら毎回同じオフセットになるため、実行タイミングの予測は可能です。
プリセットにない間隔(2時間おき・毎月1日など)は、近いプリセットを選んでから/schedule updateでcron式を直接指定します。最小間隔は1時間で、それより短い周期のcron式は拒否されます。
一回限りの実行(one-off)は、指定した未来のタイムスタンプで1回だけ発火し、そのあと自動的に無効化されます。CLIからは自然言語で指定できます。アカウントによってはこのCLI経由のone-off指定がまだ使えず、/scheduleが繰り返しスケジュールしか提示しない場合はWeb側(claude.ai/code/routines)で作成します。
/schedule tomorrow at 9am, summarize yesterday's merged PRs
/schedule in 2 weeks, open a cleanup PR that removes the feature flagone-off実行は通常のサブスクリプション利用枠は消費しますが、後述の1日あたりの実行回数上限(run)にはカウントされません。
APIトリガー
外部システムからHTTP POSTで起動するトリガーです。エンドポイントはRoutine単位で発行され、認証もRoutineごとのbearer token(sk-ant-oat01-形式、表示は1回のみ)を使います。
curl -X POST https://api.anthropic.com/v1/claude_code/routines/trig_01ABCDEFGHJKLMNOPQRSTUVW/fire \
-H "Authorization: Bearer sk-ant-oat01-xxxxx" \
-H "anthropic-beta: experimental-cc-routine-2026-04-01" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"text": "Sentry alert SEN-4521 fired in prod. Stack trace attached."}'リクエストボディのtextは自由形式の文字列(freeform string)で、JSONとしてはパースされません。構造化データのつもりで送っても、Claudeにはただの文字列として届きます。上限は65,536文字。成功時のレスポンスは次の形です。
{
"type": "routine_fire",
"claude_code_session_id": "session_01HJKLMNOPQRSTUVWXYZ",
"claude_code_session_url": "https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ"
}/fireにはidempotency keyの仕組みがありません。webhook側がリトライすると、そのたびに別セッションが新規作成されます。
GitHubトリガー
Pull requestとReleaseのイベントで起動します。対応イベントはPull request(opened / closed / assigned / labeled / synchronized等)とRelease(created / published / edited / deleted)。フィルタはAuthor・Title・Body・Base branch・Head branch・Labels・Is draft・Is mergedの8種類で、演算子はequals・contains・starts with・is one of・is not one of・matches regexから選べます。matches regexはフィールド全体を評価するため、hotfixを含むタイトル全般に反応させたいなら.*hotfix.*と書く必要があります(前後の.*を省くと完全一致になります)。
GitHubトリガーにはClaude GitHub Appのインストールが必須です。/web-setupはリポジトリのclone権限を与えるだけで、webhook配信は有効になりません。マッチしたイベント1件ごとに新しいセッションが1つ立ち上がり、複数イベント間でセッションが再利用されることはありません。research preview期間中はRoutine単位・アカウント単位それぞれに1時間あたりの上限があり、超えた分のイベントは破棄されます。
作成経路はWeb・CLI・Desktopの3つ
すべての経路が同じクラウドアカウントに書き込むため、どこで作っても他の経路から即座に見えます。
- Web(claude.ai/code/routines): 新規作成・編集・API tokenの発行を一括で行える正面玄関。3種のトリガーすべてを設定可能
- CLI(
/schedule、別名/routines): 対話形式でscheduled triggerを作成。/schedule list・/schedule update・/schedule runで既存Routineの管理もできる。API・GitHubトリガーの追加はWeb側で行う - Desktopアプリ: サイドバーのRoutinesからNew routineを選び、Cloudを選ぶとRoutine、Localを選ぶとDesktop scheduled task(ローカル実行)になる
作成後の管理も経路をまたいで共通です。詳細ページの「Run now」で次回実行を待たずに即時起動でき、「Repeats」セクションのトグルでスケジュールを一時停止・再開できます。一時停止中も設定は保持され、削除しない限り消えません。Routineを削除しても、それまでに作られた過去のセッション自体は残ります。
/scheduleがUnknown commandになる場合は、Console API keyやBedrock等のクラウド経由認証を使っている(claude.aiログインが必須)ことが原因であるケースが大半です。ANTHROPIC_API_KEY・ANTHROPIC_AUTH_TOKEN・apiKeyHelperはclaude.aiログインより優先されるため、これらが設定済みだと先に外す必要があります。それ以外では、DISABLE_TELEMETRY / DO_NOT_TRACK / CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC / DISABLE_GROWTHBOOKのいずれかが環境変数やsettings.jsonで設定されていることが原因です。組織のOwnerが管理画面でRoutinesを無効化している場合は「organization's policy」というメッセージが出て、ローカル設定では上書きできません。
権限とシークレットの安全設計
Routineセッションには権限モードの選択肢がなく、実行中の承認プロンプトも一切ありません。だからこそ、何にアクセスできるかを事前にどれだけ絞るかが安全性を決めます。
- リポジトリ・環境・connectorは実際に必要な範囲だけに絞る。含めたconnectorのツールはすべて、書き込みも含めて無承認で呼び出せる
- コミットとPRは接続済みGitHub identityの本人名義で記録される。Slack投稿やLinearチケットも同様に、紐づいたアカウントの操作として残る。「自動でも自分の名前が付く」前提でガバナンスを設計する
claude/-prefixブランチ以外へのpushは条件付きで拒否される。対象ブランチが保護設定されている、他人がそのブランチから開いたPRが存在する、Routineの所有者以外がコミットしたブランチである、のいずれかに該当すると弾かれる- APIトリガーの
textは信頼できない入力として届く。<routine-fire-payload>ブロックで囲まれ、プロンプト側が明示的に参照しない限りClaudeは中の指示に従わない。トークンが漏れても、それだけで任意の指示を実行させることはできない設計になっている - 環境変数はそのcloud environmentを使う全員に見える。認証情報を環境変数に置くときはこの前提で扱う
- ネットワークアクセスはTrusted / Custom / Fullの3段階。既定のTrustedはパッケージレジストリやクラウドAPI等の許可リストのみを通し、リスト外への通信は
403(x-deny-reason: host_not_allowed)で拒否される。connectorの通信はAnthropicのサーバー経由になるため、この許可リストの対象外で動く。自社サービスに直接アクセスさせたいときだけCustomでドメインを追加する - API tokenはRoutine単位でスコープされ、fire専用で読み取り権限を持たない。漏えいしても影響はそのRoutineの起動に限られる。紛失・流出時はWebの同じ画面からRegenerateかRevokeで即座に無効化できる
料金とクオータの仕組み
Routineは個人のclaude.aiアカウントに紐づき、チームメンバー間で共有されません。組織で同じ設定を使いたい場合も、各メンバーが自分のアカウントに作成する必要があります。利用枠も通常のinteractive sessionと同じ基準でサブスクリプションを消費し、それに加えて1日あたりの実行回数(run)がアカウント単位で上限管理されています。上限値はプランによって異なり、現行ドキュメントは具体的な数を公表していません(2026年4月の提供開始発表ではPro 5回 / Max 15回 / Team・Enterprise 25回とされていました)。自分のアカウントの残り回数はclaude.ai/code/routinesで確認できます。
one-off実行はこの上限にカウントされません(通常のサブスクリプション利用枠は消費します)。上限に達すると、extra usageが有効な組織は従量制の追加利用(metered overage)で続行でき、無効な組織は429(Retry-Afterヘッダ付き)で拒否されます。Freeプランでは利用できず、Pro以上でも「Claude Code on the web」が有効になっている必要があります。Team・EnterpriseのOwnerは管理画面のトグルで組織全体のRoutinesを無効化でき、無効化中は既存Routineも停止し新規作成もできません。
4つの自動化手段をどう使い分けるか
Claude Codeには繰り返し実行の仕組みが4つあります。動作場所・最小間隔・永続性がそれぞれ違うため、比較すると選び方が見えてきます。
| 観点 | Routines(Cloud) | Desktop scheduled tasks | /loop | GitHub Actions cron |
|---|---|---|---|---|
| 実行場所 | Routines(Cloud)Anthropicクラウド | Desktop scheduled tasksローカルマシン | /loopローカルマシン(セッション内) | GitHub Actions cronGitHub側のrunner |
| マシン起動必須 | Routines(Cloud)不要 | Desktop scheduled tasks必要 | /loop必要 | GitHub Actions cron不要 |
| セッション維持必須 | Routines(Cloud)不要 | Desktop scheduled tasks不要 | /loop必要(--resumeで復元可) | GitHub Actions cron不要 |
| ローカルファイルアクセス | Routines(Cloud)なし(毎回fresh clone) | Desktop scheduled tasksあり | /loopあり | GitHub Actions cronなし(actions/checkoutで都度取得) |
| 時刻の扱い | Routines(Cloud)ローカル時刻を自動でUTC変換 | Desktop scheduled tasksローカル時刻 | /loopローカル時刻 | GitHub Actions cron既定はUTC(IANAタイムゾーン指定も可) |
| 最小間隔 | Routines(Cloud)1時間 | Desktop scheduled tasks1分 | /loop1分 | GitHub Actions cron5分 |
| セッション文脈(Skills / MCP) | Routines(Cloud)まるごと再現 | Desktop scheduled tasksまるごと再現 | /loop継続中のセッションそのもの | GitHub Actions cronClaude Code Action経由で都度新規起動 |
| 権限プロンプト | Routines(Cloud)なし(自律実行) | Desktop scheduled tasksタスクごとに設定可 | /loopセッションを継承 | GitHub Actions cronworkflow権限で制御 |
マシンを閉じていても回したい定期タスクはRoutinesが最有力です。ローカルの設定ファイルやビルド成果物に直接触る必要があるなら、そのアクセス権を持つのはDesktop scheduled tasksと/loopだけになります。すでにCIパイプラインが組まれていて5分刻みの短周期が必要な場合は、GitHub Actions cronのほうが既存の秘密情報管理やジョブ依存関係にそのまま乗ります。/goalコマンドのように「条件を満たすまでセッション内で回す」用途は、そもそも定期実行ではなく別の機構です。
公式ユースケース6選をどう設計するか
公式docsが挙げる6つのシナリオは、トリガーとタスクの相性を考える出発点として具体的です。
バックログ整理は毎晩のscheduledトリガーが基本形です。前回実行以降に開いたissueを読み、ラベル付けと担当割り当てを行い、Slackへ要約を投稿します。issue trackerへの書き込み権限を持つconnectorだけを含め、リポジトリの書き込み範囲はラベル・アサイン操作に絞ると被害範囲が小さくなります。
アラートトリアージはAPIトリガー向きです。監視ツールが閾値超過時にfireし、textにアラート本文を渡します。プロンプト側で「routine-fire-payloadブロック内のアラートを調査せよ」と明示しないと、Claudeはそのテキストを無視した状態で終わるため、opt-inの一文を忘れないことが要点です。
独自基準のコードレビューはGitHubトリガーのpull_request.openedが定番です。Is draftフィルタでfalseを指定すればドラフトPRをスキップでき、レビューコストを実質的なレビュー対象だけに絞れます。
デプロイ後の検証はCDパイプラインからのAPIトリガーが向いています。デプロイの完了をトリガーにスモークテストとログの異常検知を走らせ、リリースチャンネルへgo/no-goを投稿する構成なら、人手を介さずに初動判断だけ済ませられます。
ドキュメントの乖離検出は週次のscheduledトリガーです。前回実行以降にマージされたPRを走査し、変更されたAPIを参照しているドキュメントを洗い出して更新PRを作ります。
SDK横展開はGitHubトリガーのpull_request.closedをマージ済みに限定して使います。片方の言語のSDKへの変更を、もう一方の言語のSDKへ機械的に移植するタスクは、人間が個別に反映するより取りこぼしが減ります。
落とし穴と誤解しやすい挙動
- 実行後に表示されるgreenのステータスは、インフラが正常だったことしか意味しない。プロンプトのタスクが期待通り完了した保証ではなく、実際にPRやtranscriptを開いて確認する運用が要る
.mcp.jsonに書かない限り、ローカルのclaude mcp addで追加したMCPサーバーはRoutineから見えない。ローカル設定はマシン上に保存され、claude.aiアカウントには同期されない/loopの定期firingが呼べるのは「Claudeが自分の判断で呼べるSkill」だけ。/permissionsのような組み込みコマンドやdisable-model-invocation: trueが付いたSkillは、実行されずプレーンテキストとしてClaudeに届くだけになる- Desktopのscheduled runでは、セッション間メッセージングが使えない。実行中に別セッションへメッセージを送るような組み方はできない
- Desktopのキャッチアップは1回だけ。7日分寝ていたタスクでも、直近の未実行1回分だけが実行され、それより古い分は破棄される。タイミングが重要な処理はプロンプト側に「5時以降ならスキップ」等のガードを書く必要がある
.claudeディレクトリやタスクファイルがsymlinkだと、/loopのスケジュール登録自体が失敗するCLAUDE_CODE_DISABLE_CRONが止めるのは/loopとローカルのcronツールだけ。Routines自体を止めるには、組織のOwnerが管理画面のトグルを操作する必要がある
APIエラーとトラブルシューティング
| HTTP | error type | 主な原因 |
|---|---|---|
| 400 | error typeinvalid_request_error | 主な原因anthropic-betaヘッダ欠落 / textが65,536文字超 / Routineがpaused中 |
| 401 | error typeauthentication_error | 主な原因Authorizationヘッダ無し、またはtokenが該当Routineと不一致 |
| 403 | error typepermission_error | 主な原因アカウント・組織にこのエンドポイントへのアクセス権がない |
| 404 | error typenot_found_error | 主な原因Routineが存在しない |
| 429 | error typerate_limit_error | 主な原因実行回数の上限またはusage上限到達(Retry-Afterヘッダ付き) |
| 500 | error typeapi_error | 主な原因予期しないサーバーエラー。指数バックオフで再試行 |
| 503 | error typeoverloaded_error | 主な原因一時的な過負荷。通常のClaude Platform APIでは同じerror typeが529として返る |
Routinesは開発フローの何を変えるか
GitHub Actions cronとの決定的な違いは、Claudeのセッション文脈をまるごと再現できる点にあります。GHA上のClaude Code Actionはワークフローごとに都度新規起動する構成である一方、Routineはそれ自体が「保存済みセッションの設計図」として存在し、Skillsとconnectorを積んだ状態でそのまま起き上がります。
強みが出るのは、判断を伴う繰り返し作業です。レビュー基準の適用、ドキュメントとコードの乖離検出、アラートの原因調査は、単純な条件分岐では書けない部分をClaudeの判断に任せられます。逆に、決まったコマンドを決まった手順で流すだけのジョブは、最小間隔1時間という制約も相まってRoutineの出番ではありません。5分刻みのヘルスチェックや秒単位の再試行は素直にGitHub Actionsかcronに任せたほうが速く、シンプルです。
よくある質問
Routinesは無料プランで使えますか
使えません。Pro・Max・Team・Enterpriseのいずれかで、かつ「Claude Code on the web」が有効になっている必要があります。
/scheduleが動きません。なぜですか
Console API keyやBedrock等のクラウド経由認証を使っている、DISABLE_TELEMETRY等の環境変数が設定されている、Claude Code on the webのセッション内から実行している、のいずれかが典型的な原因です。
Routineが起こしたコミットは誰の名前になりますか
接続済みのGitHub identityの本人名義になります。Slack投稿やLinearチケットも同様に、紐づいたアカウントの操作として記録されます。
30分おきにRoutineを動かせますか
動かせません。最小間隔は1時間です。それより短い周期が必要な場合は/loop(1分単位、ただしセッション維持が必要)かGitHub Actions cron(5分単位)を使います。
RoutineからAPIキーで認証できますか
できません。/fireエンドポイントの認証はx-api-keyのClaude API keyではなく、Routineごとに発行されるbearer token(sk-ant-oat01-形式)専用です。Anthropic SDKからの呼び出しにも対応していません。
Routineはローカルの未コミット変更を見られますか
見られません。実行のたびにリポジトリのdefaultブランチから新規cloneするため、ローカルの作業状態は一切引き継がれません。
Routineを組織全体で止めるには
Team・EnterpriseのOwnerがclaude.ai/admin-settings/claude-codeのRoutinesトグルを無効にします。既存Routineは即座に停止し、メンバーは新規作成もできなくなります。
API triggerのtokenを紛失したら
Web側の同じRoutine編集画面からRegenerate(再発行)かRevoke(失効)を選べます。tokenは1つのRoutineをfireする権限しか持たず、読み取り権限は含まれません。
まとめ
Claude Code Routinesは、プロンプト・リポジトリ・connectorを1回保存すれば、クラウド側が代わりにスケジュール・API・GitHubイベントで動かし続ける自動化の仕組みです。最小間隔1時間とfresh cloneというクラウド実行の制約はありますが、Skillsとconnectorを積んだセッション文脈をまるごと再現できる点は、GitHub Actions cronにも/loopにもない強みです。
権限とシークレットの設計は、connector・リポジトリ・ネットワークアクセスを必要な範囲だけに絞ることと、コミットやPRが本人名義で記録される前提を織り込むことに尽きます。導入時の典型的なつまずきはClaude Codeが期待通りに動かない10シナリオ、通知の組み合わせ方はHooks実例カタログを合わせて参照すると設計しやすくなります。
関連する記事
Claude Code をもっと見る →Claude Code(クロードコード)とは — CLI起点のエージェント型開発ツール
Claude Codeワークフロー — Ultraplan/Ultrareview/Checkpointing
Claude Code GitHub Copilot違い — CLIエージェントとIDE補完、設計思想と料金で使い分ける
Claude Code Clineの違いと使い分け — CLIエージェントとVS Code拡張、課金モデルで選ぶ
ダイナミックワークフローとは — Claude Codeが数百のサブエージェントを並列で束ねる新機能の仕組みと使い方
Anthropicが語る「Claudeを封じ込める」3パターン — サンドボックスとVMの隔離設計