スポンサーリンク

Claude Codeの実行環境と定期実行:Hooks・Routinesの使い分け【2026年8月版】

スポンサーリンク
スポンサーリンク

Claude Codeの設定は、突き詰めると三つの問いに集約されます。コードをどこで動かすのか、処理をいつ起動するのか、判断を誰に渡すのか。プロンプトの書き方より前に、この三層をどう組むかで一日の作業量が変わります。

この記事では、デスクトップアプリとCLIの両方に共通する実行環境の選択肢、定期実行の三つの仕組み、イベント駆動のHooks、ブラウザ操作の二系統、そしてサブエージェントと動的ワークフローの分担を、公式ドキュメントの記述に沿って整理します。設定手順だけでなく、最小間隔やトークン消費、権限の落とし穴といった運用時に効く数値も併記しました

記載内容は2026年8月27日時点で code.claude.com/docs を確認したものです。バージョン依存の挙動が多い領域なので、導入前に該当ページを直接読むことをおすすめします。

Claude Codeの実行環境は4種類:Local・Cloud・SSH・WSLの選び方

結論から書くと、ローカル以外を選べるようになったこと自体が、この一年でいちばん大きい変化です。デスクトップアプリのCodeタブでは、セッション開始前にプロンプト欄で環境を選びます。

環境変数は環境ドロップダウンのLocalにある歯車から登録し、暗号化して保存されるCloudAnthropic管理のインフラ(既定) なし(毎回クローン)アプリを閉じても走り続ける。

環境 コードが動く場所 ローカルファイル 押さえておく点
Local 自分のマシン アクセス可能 アプリはシェルプロファイルからPATHと一部の変数だけを読む。
リポジトリを複数追加できる。@メンション、ターミナル、ファイルペイン、プラグインブラウザは使えない
SSH 接続先のリモートマシン リモート側のみ 初回接続時にリモートへClaude Codeが自動インストールされる。リモート側はLinuxかmacOS
WSL(Windows) WSL2ディストリ内 アクセス可能 Linuxツールチェーンとネイティブパスを使う。プラグインとChrome連携は非対応

SSH接続の追加は、環境ドロップダウンの「+ Add SSH connection」から行います。入力欄は名前、user@hostname もしくは ~/.ssh/config のホスト名、ポート(空欄なら22)、秘密鍵のパスの4つだけです。接続後はパーミッションモード、コネクタ、プラグイン、MCPサーバーがそのまま使えます。

ここで一つ注意点があります。SSHセッションが読むのリモートホスト側の ~/.claude/skills/ です。手元のMacに置いたスキルは効きません。筆者はこれを見落として、なぜスキルが呼ばれないのか一度悩みました。

組織で配る場合は、管理者が managed settings に sshConfigs を書けば全員のドロップダウンに接続先が並び、sshHostAllowlist で接続先を絞れます。空配列を入れるとSSHセッション自体を無効化できます。(出典:Claude Code Docs「Desktop application」https://code.claude.com/docs/en/desktop )

手元で動かす必然性が高いのは、GUIの見た目を確認する開発です。Browserペインはローカルとリモートのちらでも動きますが、ネイティブアプリの画面操作を伴う検証は結局ローカルが速い。逆にテストスイートの実行や大規模リファクタは、Cloudに投げてアプリを閉じてしまうほうが合理的です。

なお、ローカルセッションを外から触りたいだけなら、環境を変えずにRemote Controlという選択肢もあります。プロセスは自分のマシンに残したまま、claude.ai/code やモバイルアプリを窓として使う仕組みで、リサーチプレビュー扱いです。(出典:Claude Code Docs「Remote Control」https://code.claude.com/docs/en/remote-control )

定期実行は3層構造:/loop・Desktopローカルタスク・クラウドRoutines

公式ドキュメントは定期実行を三つに分けて説明しています。選択基準は「ローカルファイルが必要か」と「マシンの電源が落ちていても走らせたいか」の2軸だけです。

クラウドRoutines Desktopローカルタスク /loop
実行場所 クラウド(既定でAnthropic管理) 自分のマシン 自分のマシン
マシン起動が必要 不要 必要 必要
セッションを開いておく必要 不要 不要 必要
再起動後も残る 残る 残る --resume 時に未失効分のみ復元
ローカルファイル 不可(毎回クローン)
MCP タスクごとにコネクタ設定 設定ファイルとコネクタ セッションから継承
権限確認 なし(自律実行) タスクごとに設定 セッションから継承
最小間隔 1時間 1分 1分

/loop は同梱スキルです。/loop 5m デプロイの状況を確認して のように間隔とプロンプトを渡すと、cron式に変換してジョブを登録します。単位は s m h d で、秒はcronの粒度に合わせて分単位に切り上げられます。間隔を省略すると、Claudeが1分から1時間の範囲で次の待ち時間を都度決めます。

制約も明確です。セッションを閉じれば消え、繰り返しタスクは作成から7日で失効し、1セッションに保持できるのは50件まで。待機中に Esc を押せば次の発火が取り消されます。負荷分散のため、時間単位より長い繰り返しは指定時刻から最大30分遅れて発火する点も覚えておくと、動かないと騒がずに済みます。(出典:Claude Code Docs「Run prompts on a schedule」https://code.claude.com/docs/en/scheduled-tasks )

Desktopのローカルタスクは、CodeタブのサイドバーからRoutines→New routine→Localで作ります。スケジュールのプリセットはManual、Hourly、Daily(既定9:00)、Weekdays、Weeklyの5つ。15分おきや毎月1日のような指定は、セッション内でClaudeに日本語で頼めば設定されます。プロンプトの実体は ~/.claude/scheduled-tasks/<タスク名>/SKILL.md に置かれ、直接編集すると次回実行から反映されます。

取りこぼしの扱いは実務的です。アプリ起動時やスリープ復帰時に直近7日分の未実行を確認し、いちばん新しい1回だけを追いかけ実行して残りは破棄します。6日間スリープしていた日次タスクは、復帰時に1回だけ走るだからプロンプト側に「17時以降なら要約だけ出す」といったガードを書いておくべきです。(出典:Claude Code Docs「Schedule recurring tasks in Claude Code Desktop」https://code.claude.com/docs/en/desktop-scheduled-tasks )

クラウドRoutinesはリサーチプレビューで、Pro・Max・Team・EnterpriseかつClaude Code on the webが有効なアカウントで使えます。保存する内容はプロンプト、リポジトリ、環境、コネクタ。トリガーはスケジュール、API、GitHubイベントの3種類で、同じRoutineに併用できます。CLIから/schedule で会話的に作成でき、細かいcron式は /schedule update で指定します。

見落としやすい仕様が三つあります。第一に、作成時点で接続済みのコネクタが既定で全部入るため、不要なものを外さないと書き込み権限まで渡ります。第二に、Claudeが自由に押せるのは claude/ で始まるブランチで、それ以外は保護状態や他人のコミットを見て拒否されます。第三に、実行一覧の緑表示はセッションがインフラ的に完走した印であって、タスクが成功した証明ではありません。中身は開いて読む必要があります。(出典:Claude Code Docs「Automate work with routines」https://code.claude.com/docs/en/routines )

Hooksでイベント駆動にする:31イベントと5種類のハンドラ

Hooksは「毎回必ず走らせたい処理」の置き場です。CLAUDE.mdに書いた指示は守られることが多いだけですが、Hooksは条件が合えば確実に実行されます。

公式リファレンスを確認したところ、イベントは本稿時点で31種類ありました。SessionStartUserPromptSubmitPreToolUsePostToolUseStop あたりが中心で、PreCompact PostCompactFileChangedConfigChangeSubagentStart なども並びます。イベントは発火頻度で3系統に整理されています。セッションに1回、ターンに1回、ツール呼び出しごとの3つです

ハンドラは5種類です。シェルコマンドを叩く command、HTTP POSTを投げる http、接続済みMCPサーバーのツールを呼ぶ mcp_tool、モデルに単発評価させる prompt、サブエージェントを起こして検証させる agent(実験的)。定タイムアウトはcommand系が600秒、promptが30秒、agentが60秒です

ルールベースで判断できない条件をモデルに任せられるのが prompt 型の役割です。ただし全イベントで使えるわけではありません。SessionStart commandmcp_tool のみ対応と明記されています。ここを取り違えると設定は静かに無視されます。

もう一つの罠が終了コードです。ブロックするのは 2 だけで、Unixの慣習である 1 は非ブロッキングエラーとして扱われ、処理はそのまま進みます。スクリプトのパスを間違えた場合も同様に「Failed with non-blocking status code」と出るだけなので、ポリシー目的のHookは初回実行時に必ず表示を確認してください。

配置場所はスコープを決めます。~/.claude/settings.json が全プロジェクト、.claude/settings.json がそのプロジェクト、.claude/settings.local.json がGit管理外、加えてプラグインの hooks/hooks.json、スキルとサブエージェントのフロントマターも指定できます。/hooks で読み取り専用の一覧が開き、どのファイル由来かまで確認できます。一時停止disableAllHooks です。(出典:Claude Code Docs「Hooks reference」https://code.claude.com/docs/en/hooks )

ブラウザ操作の2系統:BrowserペインとClaude in Chromeの違い

両者はログイン状態の扱いで役割が分かれます。デスクトップアプリのBrowserペインはクリーンなプロファイルで動き、個人のログインや履歴を一切持ちません。自作アプリの動作確認と、認証の要らないサイト閲覧向けです。

Browserペインでは、Claudeがスクリーンショットを撮り、DOMを調べ、要素をクリックし、見つけた不具合を直すところまで自動で行います。既定で編集ごとに自動検証が走り、.claude/launch.json autoVerifyfalse にすると止められます。外部サイトへの書き込み操作には安全性分類器が入り、AutoとBypass以外のモードではドメイン許可リストの確認も加わります。

分のアカウントとして操作させたい場合はChrome拡張のClaude in Chromeを使います。拡張バージョン1.0.36以上、Chrome・Edge・その他Chromium系ブラウザに対応し、--chrome または /chrome で接続します。ブラウザのログイン状態を共有するので、すでにサインイン済みのサービスをそのまま触れます。ログイン画面やCAPTCHAに当たると停止して人間に渡す設計です。

制約も具体的です。WSLでは使えず、APIキーや長期トークンでの認証時は無効化されます。ファイルアップロードは合計10MBまでで、node_modules 配下のようにハードリンクが複数ある実体は拒否されます。既定で有効化すると常時ブラウザツールが読み込まれ、コンテキスト消費が増えるため、筆者は必要なときだけフラグを付ける運用にしています。(出典:Claude Code Docs「Use Claude Code with Chrome」https://code.claude.com/docs/en/chrome )

並列化の設計:サブエージェント・スキル・動的ワークフローの分担

「計画を誰が持つか」で選ぶと迷いません。公式ドキュメントの整理をそのまま表にします。

サブエージェント スキル エージェントチーム 動的ワークフロー
正体 Claudeが起こすワーカー Claudeが従う手順書 同格セッションを統括するリード ランタイムが実行するスクリプト
次を決めるのは Claude(ターンごと) Claude(手順に従う) リードエージェント スクリプト
中間結果の置き場 Claudeのコンテキスト Claudeのコンテキスト 共有タスクリスト スクリプト変数
再利用できるもの ワーカー定義 手順そのもの チーム定義 オーケストレーション自体
規模 1ターンに数件 同程度 長期稼働の数体 1実行で数十〜数百体

動的ワークフローはClaude Code v2.1.154以降、有料プラン全体で使えます。Proは /config の該当行で有効化が必要です。プロンプトに ultracode を含めるか「ワークフローで進めて」と頼むと、ClaudeがJavaScriptのオーケストレーションスクリプトを書き、バックグラウンドで実行します。

数値上の制約が効きます。同時実行は最大16体、1実行あたり合計1000体まで。スケジュールされたエージェントが25体を超えるか、予測トークンが150万を超えると「Large workflow」の警告が出ます。既定のサイズ指針medium(15体未満)です。

コスト面で誠実に書くと、同じ作業を会話で進めるよりトークンを多く使います。まずは1ディレクトリだけを対象にして /workflows でトークン消費を見ながら判断するのが安全です。中断からの再開規則も独特で、起動順で再生されるため、途中で止めたエージェントより後に起動した分は完了済みでも再実行されます。細かいエージェントに分けて投げるほど進捗が残る、という設計です。

う一点、権限の挙動は要注意です。起動時の確認は自分のパーミッションモードに従いますが、ワークフローが起こすサブエージェントは常に acceptEdits で動き、ファイル編集は自動承認されます。(出典:Claude Code Docs「Orchestrate subagents at scale with dynamic workflows」https://code.claude.com/docs/en/workflows )

カスタムサブエージェントの作り方と、スキルとの境界

サブエージェントはYAMLフロントマター付きのMarkdown1枚です。.claude/agents/ に置けばプロジェクト用、~/.claude/agents/ なら全プロジェクトで使えます。必須項目は namedescription の2つだけ。

任意項目が実際の使い勝手を決めます。tools で許可ツールを絞り、disallowedTools で除外し、modelhaiku などに落としてコストを下げる。permissionModeskills(起動時にスキル本体を注入)memory(~/.claude/agent-memory/ などに永続メモリ)、isolation: worktree(専用のGit worktreeで作業)も指定できます。v2.1.198以降、/agents は作成ウィザードを開かなくなり、Claudeに依頼するか自分でファイルを書く形に変わりました。

制約として、サブエージェントからは AskUserQuestion が外されます。つまり利用者に質問を投げ返せません。同時実行の既定上限は20体、入れ子は既定で3層までです。(出典:Claude Code Docs「Create custom subagents」https://code.claude.com/docs/en/sub-agents )

スキルとの境界は、コンテキストの持ち方で決まります。スキルは会話と同じコンテキストで動く手順のパッケージで、フォルダにSKILL.mdと参照ファイルやスクリプトを同梱でき、起動時は名前と説明だけを読み込み、必要になった段階で本文、さらに必要になった段階で参照ファイルを開く段階的開示が効きます。サブエージェントは別コンテキストで起動し、渡された指示だけを見て結果を返します(出典:Claude Platform Docs「Agent Skills」https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview )

筆者の判断としては、手順が固まっている作業はスキル、長い出力を本流から隔離したいときはサブエージェント、という切り分けが実用的です。ペルソナだけを固定したいならサブエージェント1枚で足りますが、スクリプトや参照資料まで束ねたいならスキルのほうが素直です。

セッションが増えたときの整理:worktree分離とサイドバー操作

並行作業を増やすと、最初に壊れるのはサイドバーです。デスクトップアプリはGitリポジトリのセッションごとにworktreeを切って隔離し、既定の置き場は <project-root>/.claude/worktrees/ です。設定でブランチ接頭辞を付けられます。

サイドバー上部のコントロールでは、ステータス、プロジェクト、環境でのフィルタと、プロジェクト単位のグルーピングができます。セッション名はツールバーのタイトルをクリックして変更します。PRがマージまたはクローズされたら自動でアーカイブする設定を入れておくと、放置セッションが溜まりません。

Claudeに他セッションの様子を尋ねたり、メッセージを送らせたりもできます。ここで見える範囲はデスクトップアプリが自で動かすローカル・SSH・WSLのセッションだけで、クラウドセッションやターミナルのCLIセッションは対象外です。既定では直近20件、アーカイブ済みは除外されます。アーカイブ実行前にはどのモードでも必ず確認が入ります。

.env のようなgitignore対象を新しいworktreeへ持ち込みたい場合は、プロジェクトルートに .worktreeinclude を置きます。

コストと権限で先に決めておくこと

動化の設計より先に、使用量と権限の線を引いておくほうが安全です。Routinesは通常のッションと同じようにサブスクリプションの使用量を消費し、加えてアカウントごとに1日あたりの実行数上限があります。一度限りの実行はその次上限には数えません。消費状況は claude.ai/code/routines か claude.ai/settings/usage で確認できます。

権限モードはManual、Accept edits、Plan、Auto、Bypass permissionsの5つ。AutoはOpus 4.6以降、Sonnet 4.6以降、Fable 5で使えます。Bypassはクラウドセッションでは選べず、Pro・Max では設定からの有効化、TeamとEnterpriseでは組織ポリシーが管理します。

Desktopのローカルタスクはタスクごとにパーミッションモードを持ちます。Manualのまま許可のないツールを呼ぶと実行が止まって待ち続けるので、作成直後に「Run now」で一度走らせ、出てきた確認に「always allow」を選んでおくのが定石です。承認内容はタスク詳細ページから確認と取り消しができます。

組織側の制御も一通り揃っています。ローカルセッションの禁止disableDesktopLocalSessions、ワークフローの停止は disableWorkflows、Hooksを管理側のものだけに絞るのは allowManagedHooksOnly。管理下の端末で機能が出てこない場合は、まずこのあたりを疑うのが早いです。

よくある疑問

Q. /loop とDesktopのローカルタスクはどちらを使うべきですか。
A. 開いているセッションの文脈を使って何かを見張るなら /loop、明日以降も定期的に走らせたいならローカルタスクです。/loop はセッションを閉じると消え、繰り返しタスクは7日で失効します。

Q. クラウドRoutinesを5分間隔で走らせられますか。
A. できません。最小間隔は1時間で、それより短いcron式は拒否されます。1分間隔が必要なら /loop かDesktopのローカルタスクを使います。

Q. Hooksを設定したのに何も起きません。
A. まず終了コードを確認してください。ブロックできるのは 2 のみです。次にイベントとハンドラ型の組み合わせを確認します。SessionStartcommandmcp_tool にしか対応していません。/hooks で読み込まれている定義と出所を確認するのが最短です。

Q. ノートPCを閉じてもタスクを走らせたいのですが。
A. クラウドRoutinesが唯一の選択肢です。Desktopのローカルタスクはアプリ起動中かつマシンが起きている間だけ発火し、スリープ中の時刻は飛ばされます。設定の「Keep computer awake」でアイドルスリープは防げますが、ふたを閉じればスリープします。

Q. 動的ワークフローとサブエージェントの並列実行はどう違いますか。
A. 計画の所在が違います。サブエージェントではClaudeがターンごとに次を決め、結果はコンテキストに戻ります。動的ワークフローではスクリプトが分岐と中間結果を持ち、Claudeのコンテキストには最終結果だけが返ります。

次に試す3つの設定

  1. 常時起動しているマシンかリモートのLinux機に対してSSH接続を1件登録し、時間のかかるテスト実行をそちらへ移す。スキルはリモート側の ~/.claude/skills/ に置く。
  2. いま手作業で毎朝やっている確認を1つ選び、Desktopのローカルタスクにする。成後すぐ「Run now」で権限確認を消化しておく。
  3. PostToolUse にフォーマッタを1本だけ仕込み、/hooks で読み込みを確認する。終了コードは 0 2 だけを使う。

仕様の変更が速い領域です。この記事の内容は2026年8月27日時点の公式ドキュメントに基づいています。導入前に該当ページの最新版を確認してください。

コメント

タイトルとURLをコピーしました