Claude Code Routinesでcronを置き換える—クラウド無人実行の設定

Claude Code Routinesでcronを置き換える—クラウド無人実行の設定 | mohablog

Claude Code Routines は、プロンプト・リポジトリ・コネクタをひとまとめに保存し、Anthropic のクラウドで自動実行する機能です。ノートPCを閉じても、夜間のPRレビューやバックログ整理が走り続けます。ローカルの cron に claude -p をぶら下げてきた運用の置き換え先になります。

目次

ローカルのcronで自動化すると何が止まるか

Claude Code をスクリプトから回す手は、すでにあります。claude -p "..." をシェルに書いて crontab に登録すれば、毎朝9時のPR要約も作れます(Claude Code -p フラグの使い方 に手順をまとめました)。

ただ、この方式は自分のマシンが動いている前提です。

  • ノートPCがスリープや電源オフだと cron は発火しない
  • VPNや鍵がローカルにある前提で、別マシンに移すと壊れる
  • 実行ログは手元のターミナルかファイルに散らばる
  • GitHubのPR作成イベントには反応できない(自前でwebhook受けが要る)

Routines はこれらをクラウド側にまとめて引き受けます。実行基盤が Anthropic 管理になり、起動条件もスケジュールだけでなく API と GitHub イベントに広がります。

Routinesが保存するもの、起動する3つの引き金

公式ドキュメント “Automate work with routines” は、routine をこう定義しています。

A routine is a saved Claude Code configuration: a prompt, one or more repositories, and a set of connectors, packaged once and run automatically.

プロンプト・リポジトリ・コネクタをひとつの単位として保存し、引き金が引かれるたびにクラウド上の完全な Claude Code セッションとして走ります。実行中の承認プロンプトはありません。権限モードの選択もなく、含めたコネクタのツールは書き込み系まで許可なしで叩けます。だからこそ、リポジトリ・環境・コネクタを必要な分だけに絞る設計が前提になります。

3つのトリガーは併用できる

1つの routine に複数のトリガーを付けられます。

  • Scheduled: 毎時・毎晩・毎週などの周期、または将来の特定時刻に1回
  • API: routine ごとのエンドポイントに bearer トークン付きで HTTP POST
  • GitHub: PR や release などのリポジトリイベントに反応

たとえばPRレビュー用の routine を、毎晩の定期実行・デプロイスクリプトからのAPI起動・新規PRごとの起動の3つで同時に走らせる、といった組み方ができます。

使えるのはどのプランか

Routines は Pro / Max / Team / Enterprise プランで、Claude Code on the web を有効にすると使えます。研究プレビュー段階のため、ドキュメントには “Routines are in research preview. Behavior, limits, and the API surface may change.” と明記されています。仕様は今後変わりうる前提で、変更を追える運用にしておきます。

スケジュールトリガーを設定する

3つのトリガーのうち、まず触るのはスケジュールです。プリセットは hourly / daily / weekdays / weekly の4つ。時刻はローカルタイムゾーンで入力し UTC へ自動変換されるので、クラウドの所在を気にせず「日本時間の朝9時」で指定できます。

CLIの/scheduleで会話的に作る

セッション内で /schedule を実行すると、Webフォームと同じ項目を会話で埋めていけます。説明文を直接渡す形も通ります。

/schedule daily PR review at 9am

対象リポジトリ・プロンプト・モデルを順に確認され、最後にこう保存されます。

✓ Routine saved: "daily PR review"
  Trigger:  daily at 09:00 (Asia/Tokyo -> 00:00 UTC)
  Repo:     mohablog/api
  Model:    claude-opus-4-8
  Manage at https://claude.ai/code/routines

作成済み routine の操作もCLIから通ります。/schedule list で一覧、/schedule update で変更、/schedule run で即時実行。ただし /schedule がCLIで作れるのはスケジュールトリガーだけ。APIとGitHubトリガーの追加はWebからになります。

1時間より短い間隔は弾かれる

「2時間ごと」「毎月1日」のような独自間隔は、フォームで近いプリセットを選んだあと /schedule update で cron 式を指定します。

/schedule update
# 対象 routine を選び、cron 式を入力する
0 */2 * * *    # 2時間ごと

ここで効いてくるのが 最小間隔は1時間という制約。これより頻繁な式は拒否されます。試しに */30 * * * * を保存しようとして弾かれ、この下限に気づきました。秒〜分単位のポーリングが要るなら、Routines ではなく別の仕組みを使うことになります。

もう1つ、実行は予定時刻ちょうどではなく数分ずれて始まります。ドキュメントが “stagger” と呼ぶ負荷分散で、ずれ幅は routine ごとに一定。きっかり毎時00分の到着を前提にした処理は組まないほうが安全です。

1回だけの予約実行

将来の特定時刻に1回だけ走らせる使い方もできます。自然言語で渡すと、現在時刻からの相対表現を絶対時刻に解決して確認してくれます。

/schedule in 2 weeks, open a cleanup PR that removes the feature flag

発火後はその routine が自動で無効化され、Web UI 上は Ran 表示に変わります。再実行したいときは新しい時刻を設定し直すだけ。1回実行は 1日あたりの実行上限にカウントされません。通常のサブスク使用量だけを消費します。

APIトリガーで外部システムから起動する

監視ツールやデプロイパイプラインから routine を叩きたいときは、APIトリガーを使います。routine ごとに専用のHTTPエンドポイントが発行され、bearer トークン付きのPOSTで新しいセッションが始まります。

追加はWebから。Edit routine の “Select a trigger” で API を選び、保存後にURLとトークンを生成します。トークンは一度しか表示されません。アラートツールのシークレットストアなどに即控えてください。

curl -X POST https://api.anthropic.com/v1/claude_code/routines/trig_01ABC.../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."}'

レスポンスは新しいセッションのIDとURLです。

{
  "type": "routine_fire",
  "claude_code_session_id": "session_01HJKLMNOPQRSTUVWXYZ",
  "claude_code_session_url": "https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ"
}

このURLをブラウザで開けば、実行をリアルタイムで追えます。リクエストボディの text は任意で、アラート本文や失敗ログなど実行ごとの文脈を渡せます。中身はパースされず、保存済みプロンプトに素のテキストとして添えられるだけ。JSONを渡しても文字列として届きます。

/fire エンドポイントは experimental-cc-routine-2026-04-01 という beta ヘッダ下で提供されます。研究プレビュー中はリクエスト・レスポンス形状やレート制限が変わりうるため、破壊的変更は新しい日付付きヘッダで切られ、直近2つ前までのヘッダは動き続ける仕様です。

GitHubイベントで起動する

PRやreleaseに反応して走らせるのがGitHubトリガーです。Web UIからのみ設定でき、対象リポジトリに Claude GitHub App がインストールされている必要があります。/web-setup はクローン用のアクセス権を渡すだけで、Appのインストールとwebhook配信は別物。トリガー設定の途中でインストールを促されます。

購読できるイベントは2カテゴリです。

イベント発火するタイミング
Pull requestPR が opened / closed / assigned / labeled / synchronized などで更新されたとき
Releaserelease が created / published / edited / deleted されたとき

フィルタで対象PRを絞る

全PRに反応させると無駄打ちが増えます。フィルタは Author / Title / Body / Base branch / Head branch / Labels / Is draft / Is merged の各フィールドに対し、equals・contains・starts with・is one of・is not one of・matches regex の演算子で条件を組みます。全条件が一致したときだけ発火します。

regexには落とし穴があります。matches regex はフィールド全体に対するマッチで、部分一致ではありません。タイトルに hotfix を含むPRを拾いたいなら .*hotfix.* と書きます。.* で囲まないと、タイトルが hotfix ちょうどの場合しか一致しません。単なる部分一致でいいなら、regexではなく contains を選ぶほうが安全です。

マッチしたイベントごとに独立したセッションが立ちます。セッションの使い回しはなく、2回のPR更新は2つのセッションになります。

クラウド実行ならではの制約

手元で動かないぶん、ブランチ・コネクタ・ネットワークに既定の縛りが入ります。

書き込めるブランチは既定でclaude/だけ

routine はデフォルトでは claude/ 接頭辞のブランチにしか push できません。保護ブランチや長命なブランチを誤って書き換えないための制限です。既存ブランチへ push させたいリポジトリでは、作成・編集時に Allow unrestricted branch pushes を有効にします。各実行はデフォルトブランチからクローンして始まります。

コネクタとネットワークは絞る

routine を作ると、接続済みのコネクタが既定で全部含まれます。使わないものは外す。実行中は許可なしで書き込み系ツールまで叩けるので、付けっぱなしは事故のもとです。

ローカルCLIで claude mcp add したサーバーはマシン側に保存されるため、コネクタ一覧には出てきません。routine で使うなら claude.ai 側でコネクタとして追加するか、リポジトリにコミットした .mcp.json で宣言します。

ネットワークは Default 環境だと Trusted アクセス。パッケージレジストリやクラウドAPIなど既定の許可リストには届きますが、それ以外は 403x-deny-reason: host_not_allowed で弾かれます。自前サービスを叩くなら、環境の Network access を Custom にして許可ドメインを足します。

実行回数とステータスの見方

routine は通常のセッションと同じくサブスク使用量を消費し、加えて 1日あたりの起動回数に上限があります。残り回数は claude.ai/code/routines で確認できます。1回限りの予約実行はこの日次上限の対象外です。

実行一覧の緑ステータスは「セッションがインフラ的なエラーなく開始・終了した」ことを示すだけ。プロンプトのタスクが成功したかは別問題です。ブロックされた通信や足りないコネクタ、タスク自体の失敗は、緑表示の裏でログを開かないと見えません。

ローカル実行や/loopとの使い分け

クラウドの Routines が常に最適とは限りません。手元のファイルを触る作業や、セッションを開いたまま回す軽い繰り返しには別の選択肢があります。

やりたいこと向いている仕組み
PCを閉じても定期/イベントで回したいRoutines(クラウド・Remote)
ローカルのファイルやツールに触れたいDesktop の Local スケジュールタスク
開いているセッション内で繰り返したい/loop などセッション内スケジュール
CIのジョブとしてPRイベントで動かしたいGitHub Actions

Desktop アプリの New routine では Remote と Local を選べます。Local を選ぶと自分のマシンで走るスケジュールタスクになり、ローカルファイルにアクセスできます。手元のHooksやSchedulerを組み合わせる自動化は、イベント駆動型ワークフロー自動化の記事にまとめています。

まとめ

Claude Code Routines は、ローカル cron と claude -p による自動化をクラウドへ移す機能です。要点を整理します。

  • 保存単位はプロンプト・リポジトリ・コネクタ。Anthropic 管理のクラウドで走り、PCを閉じても動く
  • トリガーは Scheduled / API / GitHub の3種で、1つの routine に併用できる
  • スケジュールの最小間隔は1時間。独自周期は /schedule update で cron 式を指定する
  • API は /fire に bearer トークン付きPOST。GitHub は Claude GitHub App のインストールが前提
  • 既定では claude/ ブランチにしか push せず、コネクタは全部入り。使う分だけに絞る
  • 研究プレビュー中で仕様は変わりうる。Pro / Max / Team / Enterprise で利用可能

最初の載せ替え先は、夜間のPRレビューやバックログ整理のように、無人で繰り返せて結果が明確なタスクです。

よくある質問

Q. ローカルで動かせますか。
A. Desktop アプリの New routine で Local を選ぶと、クラウドではなく自分のマシンで走るスケジュールタスクになります。ローカルファイルに触れたいときはこちらです。

Q. /schedule が “Unknown command” になります。
A. /schedule は claude.ai のサブスクログインが前提です。ANTHROPIC_API_KEY や Bedrock/Vertex などで認証していると隠されます。CLIが古い場合も出ないので、claude update で更新してください(ドキュメント上は v2.1.81 以降)。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次