Claude Codeクラウドセッションとは — 使えるツールと制限
Claude Codeのクラウドセッションとは何か。使えるツール、ローカル設定の引き継ぎ範囲、GitHubトークンの扱い、CPU・メモリ・ディスクと時間の上限、上限に当たったときの選択肢を扱います。
Claude Codeのクラウドセッションとは、自分のマシンではなくクラウド上のVMで動くClaude Codeのセッションです。ノートPCを閉じても動き続け、ブラウザやスマホから進み具合を見たり指示を足したりできます。ProとMaxとTeamのプランで使え、Enterpriseでは対象のシートが必要です。クラウドのVMに別料金はかからず、利用量はプランの上限に数えられます。
Claude CodeのクラウドセッションはUbuntu 24.04(x86_64)のVM(仮想マシン)を毎回新しく起動し、リポジトリをクローンした状態で始まります。主要な言語ランタイムとビルドツールは最初から入っており、GitHubのissueやPRもトークンを意識せず操作できます。一方でVMには4vCPU・16GBメモリ・30GBディスクという上限があり、大きなビルドやテストはここで止まることがあります。
ローカルでは動くのにクラウドでは動かない、という食い違いの典型は「リポジトリにコミットされていないものは届かない」です。Web版の始め方そのものはClaude Code Web版とはにあり、ここではセッションの中で何が使えて何が使えないかを扱います。
ローカルで動いた設定がクラウドで効かないとき
クラウドセッションはリポジトリのクローンから始まるので、コミットされているものだけが引き継がれます。自分のマシンだけにある設定は届きません。
| 設定 | クラウドセッションで使えるか |
|---|---|
リポジトリのCLAUDE.md・.claude/rules/ | クラウドセッションで使えるか使える(クローンの一部) |
リポジトリの.claude/settings.jsonのhooksと権限ルール | クラウドセッションで使えるか使える。ただしリポジトリが1つのセッションのみ |
リポジトリの.mcp.jsonのMCPサーバー | クラウドセッションで使えるか使える。同じくリポジトリが1つのセッションのみ |
リポジトリの.claude/skills/ .claude/agents/ .claude/commands/ | クラウドセッションで使えるか使える |
リポジトリの.claude/settings.jsonのenabledPlugins | クラウドセッションで使えるか使えない(プラグインはインストールされない) |
ユーザーの~/.claude/CLAUDE.md | クラウドセッションで使えるか使えない(自分のマシンにしかない) |
ユーザーの~/.claude/skills/等 | クラウドセッションで使えるか使えない(claude.aiで有効化したSkillは自動で読み込まれる) |
claude mcp addのデフォルトスコープ・ユーザースコープのMCPサーバー | クラウドセッションで使えるか使えない(~/.claude.jsonはマシン側の設定) |
| AWS SSOのような対話型認証 | クラウドセッションで使えるか使えない(ブラウザ操作を伴う認証はセッション内で完結しない) |
settings.jsonのenvにある通信系変数(NODE_EXTRA_CA_CERTS等) | クラウドセッションで使えるか使えない(無視され、セッションのデバッグログに記録される) |
| 組織のサーバー管理設定 | クラウドセッションで使えるか使える(ただしClaude Tagのセッションを除く) |
リポジトリ設定の行に「リポジトリが1つのセッションのみ」と付くのは、複数のリポジトリをまたぐセッションやプロジェクトのスレッドが、クローンの1つ上の階層から始まるためです。その階層にはhooksも.mcp.jsonも置かれておらず、読まれません。
ユーザースコープのMCPサーバーをクラウドでも使いたいときは、claude mcp add --scope projectでリポジトリの.mcp.jsonに書き、その変更をコミットします。プラグインはenabledPluginsに書いてもクラウドには入らない点に注意が必要で、ユーザー設定側で有効にしたプラグインも同様に届きません。
環境変数とセットアップスクリプトは、その環境を使う全員が読める状態で保存されます。外部サービスのキーは、ProとMaxプランなら環境に登録するAPI認証情報(エージェントプロキシが対象ホストへのリクエストに付ける仕組み)に置けます。TeamとEnterpriseプランでは、この仕組みが使えないため環境変数に置くことになり、読める人の範囲がそのまま漏洩範囲になります。
手元のCLIで確認できる範囲
クラウド側の挙動はセッションを起動しないと確かめられませんが、手元のclaudeからは入口だけ確認できます。v2.1.285でログインしていない状態(空の設定ディレクトリ)から試すと、Remote Controlはclaude.aiのサブスクリプションを求められました。
$ claude --version
2.1.285 (Claude Code)
$ claude remote-control
Error: You must be logged in to use Remote Control.
Remote Control is only available with claude.ai subscriptions. Run `claude auth login` to sign in with your claude.ai account.claude --helpには--remote-control [name](Remote Controlを有効にして対話セッションを始める)と--teleport [session](クラウドのセッションを手元で再開する)が並びます。上限に当たったときの逃げ道の1つがサブスクリプション前提であることは、後述の選択肢を考えるうえで先に知っておく価値があります。
クラウドセッションの始め方と手元への戻し方
ターミナルからはclaude --cloud "タスクの説明"で新しいセッションを起動します。VMが複製するのは手元のチェックアウトではなく現在のブランチのGitHubリモートなので、ローカルのコミットは先にpushします。以前の--remoteは非推奨の別名として今も動きます。
claude --cloud "tests/の失敗しているテストを直して"
claude --teleport走っているセッションを手元で続けるにはclaude --teleportでセッションを選びます。同じclaude.aiアカウントでログインし、同じリポジトリのチェックアウトから実行する必要があります。手元に引き込んだ後の作業はローカルに残り、claude.aiやスマホのセッションには反映されません。逆向きの、既存のターミナルセッションをクラウドへ送る操作はCLIにはありません。
クラウドセッションに最初から入っているツール
VMには次のツールチェーンがあらかじめ入っています。
| カテゴリ | 内容 |
|---|---|
| Python | 内容pip・poetry・uv・black・mypy・pytest・ruffを含むPython 3.x |
| Node.js | 内容20・21・22(npm・yarn・pnpm・bun・eslint・prettier・chromedriver同梱) |
| Ruby | 内容3.1・3.2・3.3(gem・bundler・rbenv) |
| PHP | 内容8.3(Composer) |
| Java | 内容OpenJDK 21(Maven・Gradle) |
| Go / Rust | 内容Go(モジュール対応)、rustcとcargo |
| C/C++ | 内容GCC・Clang・cmake・ninja・conan |
| Docker | 内容docker・dockerd・docker compose |
| データベース | 内容PostgreSQL 16・Redis 7.0 |
| ユーティリティ | 内容git・gh・jq・yq・ripgrep・tmux・vim・nano |
Node.jsは/opt/node20・/opt/node21・/opt/node22に並んでおり、既定でPATHに通っているのは22です。別バージョンを使うときは、そのバージョンのbinをPATHの先頭に足すようClaudeに頼みます。bunは入っていますが、プロキシとの相性問題でパッケージ取得が正しく動かないことがあります。
正確なバージョンは、Claudeにcheck-toolsの実行を頼むと分かります。スラッシュコマンドではなくVM上のシェルコマンドです。Ruby・PHP・bun・PostgreSQL・Redisはcheck-toolsが報告しないので、psql --versionのようにツール自身のコマンドを頼みます。
# Claudeへの依頼として実行される(VM内のコマンド)
check-tools
psql --version一覧にない.NET SDKのようなツールチェーンは、レジストリが許可リストに入っていても事前インストールされません。次節のセットアップスクリプトで入れます。
テスト・サービス起動・パッケージ追加はClaudeへの依頼にする
VMへのシェルアクセスはなく、コマンドはすべてClaudeが実行します。「テストを直す」ではなく「tests/の失敗しているテストを直して」のように、プロンプトで依頼します。pytestやcargo testは追加設定なしで動き、jestのようにプロジェクトの依存として宣言したランナーは依存関係のインストール時に入ります。
PostgreSQLとRedisは入っていますが起動していないので、起動もClaudeに頼みます。クラウド外でRedisにMCP経由で繋ぐ手順はRedis MCPサーバーの使い方にあります。
service postgresql start
service redis-server startDockerはdocker compose upを頼めばコンテナが立ち上がり、Docker Hubなど主要レジストリは既定の許可リストに入っています。
セットアップスクリプトと環境キャッシュ
事前インストールにないものは、セットアップスクリプトで入れます。Claude Codeの起動前にroot権限で走るBashスクリプトで、書き方の詳細はセットアップスクリプトの解説にあります。ここでは、実行から次のセッションまでの流れを押さえます。
セットアップスクリプトが次のセッションに効くまで
- 1
環境で最初のセッションが始まる
スクリプトが走ります。0以外で終了するとセッション自体が起動しないので、必須でない行には
|| trueを付けます。 - 2
約5分以内に終われば、ファイルシステムが保存される
インストールしたパッケージ、取得したDockerイメージ、書き出したファイルが残ります。5分前後を超えるとキャッシュされません。
- 3
以降のセッションは保存済みの状態から始まる
スクリプトは再実行されません。ただし起動していたDBや
docker compose upのスタックのようなプロセスは残らず、セッションごとにClaudeへ起動を頼みます。 - 4
スクリプトか許可ホストを変えると作り直される
キャッシュは約7日で期限が切れ、そのときも作り直されます。既存セッションの再開ではスクリプトは再実行されません。
イメージの取得が遅いときは、スクリプトにdocker compose pullかdocker compose buildを入れておくと、取得済みイメージがディスクに残ります。セッション途中でClaudeに頼んだインストールは他のセッションに引き継がれない点が、スクリプトとの違いです。
GitHubのissueとPRを、トークンを意識せず扱える
組み込みのGitHubツールで、issueの読み取り、PR一覧の取得、diffの取得、コメント投稿がセットアップなしで動きます。認証は専用のGitHubプロキシが受け持つため、実際のトークンがコンテナに入ることはありません。
GH_TOKENかGITHUB_TOKENを自分で設定するかどうかで、コンテナの中の見え方が変わります。
トークンを設定した場合としない場合
自分で設定した
トークンはコンテナへそのまま渡り、gh CLIもスクリプトも直接使います。環境を使う誰でも読める通常の環境変数として扱われます。
どちらも未設定
Claudeが実行するコマンドの中では、両方の変数がproxy-injectedという文字列に見えます。ghは動きますが、GITHUB_TOKENを直接読むスクリプトはこの文字列を受け取ってしまい、認証に使えません。
どちらの状態かは、Claudeにecho $GH_TOKENを頼めば分かります。ghは事前インストール済みで、gh releaseやgh workflow runのように組み込みツールが扱わない操作もClaude経由で実行できます。ghはGH_TOKENを自動で読むので、gh auth loginは要りません。
プロキシには3つの制限があります。1つ目はGraphQLで、PR系のワークフロー向けに決められた操作しか通りません。Projects v2のようにGraphQLでしか提供されない機能は、GH_TOKENを自分で設定していてもThis GraphQL query is not enabled for this sessionという403で拒否され、メッセージはgh api repos/{owner}/{repo}/...というREST代替を案内します。2つ目はリポジトリの範囲で、APIとリリースアセットの取得はセッションに紐づいたリポジトリだけが対象です。紐づいていないリポジトリのアセットをセットアップスクリプトで取得すると403になります。3つ目はgit pushで、通るのはセッションの作業ブランチに対してだけです(Push protection)。クローン・フェッチ・PR操作は通常どおり動きます。
ローカルで通っていた別ブランチへのpushがクラウドで拒否されるときは、まずこの制限を疑います。なお、このプロキシはAnthropic-hosted環境の仕組みで、セルフホスト環境では展開側の資格情報を使います。
セッションのURLを別の場所に載せる
クラウドセッションが作るコミットにはClaude-Session: <url>のトレーラーが付き、PR本文にもセッションURLが入ります。この付与を止めたいときは、v2.1.183で追加されたattribution.sessionUrlをfalseにします。Slack投稿やレポートファイルのように別の場所へURLを載せたいときは、環境変数CLAUDE_CODE_REMOTE_SESSION_IDから組み立てるコマンドの出力を使います。
echo "https://claude.ai/code/${CLAUDE_CODE_REMOTE_SESSION_ID/#cse_/session_}"リソース上限と時間の上限
大きなビルドやメモリを多く使うテストは、VMの上限を超えると途中で止められることがあります。公式にVMのスペックを選ぶ操作の記述は見当たりません。
Anthropic-hosted環境のVMの目安
CPU
4 vCPU
目安で、変わることがある
メモリ
16GB
超えるとタスクが止まることがある
ディスク
30GB
取得したDockerイメージもここに載る
時間の上限は、リソースとは別に効きます。
- Claudeが実行するコマンド: 環境は独自のタイムアウトを持たず、Bashツールの既定が使われる。既定は2分で、Claudeは最大10分まで求められる。タイムアウトに達したコマンドは停止でなくバックグラウンドへ移る(
sleepで始まるコマンドを除く) - SessionStartフック:
timeoutを指定しなければ600秒でキャンセルされる。async: trueのフックには適用されない - アイドル状態のセッション: 数分操作がないとVMは一時停止し、ファイルは保存される。次のメッセージで同じVMが復元される。停止したVMは後で回収されることがある。MCPコネクタのツール呼び出しの承認待ちやMCPサーバーへのサインイン待ちも、非アクティブに数えられる
コマンドのタイムアウトは、環境変数BASH_DEFAULT_TIMEOUT_MSとBASH_MAX_TIMEOUT_MS(ミリ秒)で環境ごとに延ばせます。たとえばBASH_DEFAULT_TIMEOUT_MS=600000で既定が10分になります。回収されたセッションは、claude.ai/codeから開き直すと新しいVMに会話履歴が復元されます。ただし、回収時に動いていたサブエージェントやシェルコマンドは復元されません。
上限に当たったときの選択肢
CPU・メモリ・ディスクの上限を上げる設定はないので、選択肢は2つで、性格も対象プランも違います。
| 選択肢 | 何が変わるか | 利用できるプラン |
|---|---|---|
| Remote Control | 何が変わるか自分のマシンでClaude Codeを起動し、ブラウザやスマホから操作する。VMの制約を受けない | 利用できるプランPro・Max・Team・Enterprise(APIキーは不可。TeamとEnterpriseはOwnerが先に有効化) |
| セルフホスト環境 | 何が変わるか組織が用意したランナー上でセッションを実行する。ツールチェーンとリソース上限は自分たちの管理下 | 利用できるプランTeamとEnterpriseのパブリックベータ |
社内ネットワークのサービスやDBに到達させたい、独自のツールを事前に焼き込みたい、コード実行を自社インフラに留めたい、という要件ならセルフホスト環境の領分です。個人のProやMaxで手元のマシンの余力を使いたいだけなら、選べるのはRemote Controlのほうです。
セルフホスト環境は既定で無効です。Ownerが管理画面のCloud environmentsページでAllow self-hosted environmentsを有効にする必要があり、これにはClaude Code on the webが組織で有効になっていることが前提です。Zero Data Retentionを有効にしている組織では使えません。推論はセルフホスト環境でもAnthropic APIを使い、Bedrock・Vertex・Foundry・LLMゲートウェイへのルーティングはできません。運用手順はClaude Code self-hosted-runnerとはにあります。
ネットワークアクセスは環境ごとに設定できる
外に出られる範囲は環境単位で決まります。既定のTrustedはパッケージレジストリやGitHubなどの許可リストのみ、Fullは任意のドメイン、Noneは外部通信なし、Customは自分で指定したドメインリストです。
どのレベルでも、GitHub通信(専用プロキシ経由)、有効化したMCPコネクタの通信(Anthropicのサーバー経由)、登録済みAPI認証情報の宛先ホストは、許可リストを経由しない別経路で届きます。エラーが出たときの読み方は「Host not allowed in a cloud session」の意味と対処にあります。
まとめ
クラウドで動かないものは、まずリポジトリにコミットされているかで切り分けられます。VMの上限を恒常的に超える作業は、Remote Controlかセルフホスト環境へ移すのが前提になります。