Couldn't load this page.

← ブログ
Engineering

Claude Code sandbox:組み込みの分離、Docker、クラウド

Yura Oak

Claude Code sandboxは、エージェントの作業中のアクセスを制限します。/sandboxを使用して組み込みのシェルサンドボックスを有効にするか、Dockerコンテナ内でClaude Codeを実行するか、独立したクラウドマシンを割り当てることができます。適切な選択は、セッションが必要とするファイル、プロセス、認証情報によって異なります。

ローカルでの作業には、組み込みのサンドボックスから始めます。再現性のある開発環境にはdev containerを使用します。リモートジョブや複数のエージェントを同時に動かす場合は、クラウドサンドボックスが各タスクに専用のワークスペースを提供します。

組み込みのClaude Code sandboxが保護する範囲

Claude Codeはオペレーティングシステムの制御を利用して、シェルツールとそのツールが開始するプロセスを制限します。macOSではSeatbeltを、Linuxではbubblewrapを使用します。サンドボックスはファイルへの書き込みを制限し、許可されたドメインのプロキシを通じてネットワークアクセスを制限できます。

ツールを追加する際、この適用範囲が重要になります。Claude Codeの組み込みファイルツール、フック、ローカルMCPサーバーは、シェルサンドボックスの外側に配置されます。エージェントプロセス全体とそのローカルツールを封じ込めるには、コンテナ、仮想マシン、または個別に構成されたサンドボックスランタイム内で実行します。リモートMCPサービスは、そのサービスに与えられた権限を引き続き保持します。Claude Codeのサンドボックス文書を参照してください。

設定含まれるもの引き続き制御が必要なもの
組み込みのClaude Code sandboxシェルコマンドとその子プロセスファイルツール、フック、MCPサービス、読み取り可能なパス、許可されたドメイン
Docker dev containerコンテナ内のプロセスとファイルホストマウント、Dockerソケットへのアクセス、権限、ネットワークポリシー
クラウドワークスペース独立したマシンまたはランタイム上のエージェントプロセスアップロードされたデータ、認証情報、ネットワークアクセス、ワークスペースの実際の分離境界

Claude Codeのサンドボックスモードを有効にする

macOSでは、Claude Codeはシステムの既存のサンドボックスサポートを使用します。LinuxまたはWSL2では、まず必要なパッケージをインストールします。DebianまたはUbuntuシステムの場合:

sudo apt-get install bubblewrap socat

プロジェクトでClaude Codeを起動し、次のように入力します。

/sandbox

レビュープロセスに合ったモードを選択します。Auto-allowモードでは、承認プロンプトなしでサンドボックス化されたシェルコマンドを実行できます。通常の権限では、シェルサンドボックスをアクティブにしたまま、通常の承認フローを維持します。ネイティブWindowsでこのサンドボックスを使用するにはWSL2が必要です。設定ガイドにプラットフォームの要件と制限が記載されています。

シェルコマンドをサンドボックス内に保持する必要があるセッションでは、次のようにClaude Codeを起動します。

claude --settings '{"sandbox":{"enabled":true,"allowUnsandboxedCommands":false,"failIfUnavailable":true}}'

allowUnsandboxedCommands: falseは、サンドボックス外で実行されるコマンドのエスケープパスを無効にします。failIfUnavailable: trueは、サンドボックスサポートがない場合に起動を失敗させます。設定で除外されたコマンドも確認してください。デフォルトではファイルの読み取り範囲が広いため、セッションがマシン上の他のファイルを参照してはならない場合は、読み取り制限を追加します。

長時間の実行前に境界を確認する

Claudeにシェルツールを通じて以下のコマンドを実行するよう依頼します。

touch ~/sandbox-probe
curl --noproxy '*' https://example.com

ホームディレクトリ配下のプロジェクトフォルダからテストを実行します。意図した制限が適用されていれば、最初のコマンドはプロジェクト外に書き込むため失敗します。2つ目のコマンドは、ネットワークプロキシをバイパスできるかをテストします。直接のネットワークアクセスがブロックされていれば失敗します。プロキシを経由する許可されたリクエストは引き続き成功します。

Claudeにチェックを実行させます。別のターミナルで手動でコマンドを入力しても、エージェントのシェルサンドボックスのテストにはなりません。

サンドボックスモード、auto mode、権限のスキップ

権限モードは、Claudeがいつ承認を求めるかを決定します。サンドボックス化は、オペレーティングシステムがコマンドに許可する操作を制御します。

Claude Codeのauto modeは、分類器を使用してどのアクションを進行できるかを決定します。これはシェルサンドボックスのauto-allowモードとは異なります。どちらかの設定を変更する前に、権限モードを確認してください。

--dangerously-skip-permissionsは、日常的な権限プロンプトをバイパスします。コンテナを作成したり、ファイルアクセスを制限したり、ネットワークポリシーを設定したりすることはありません。明示的な拒否ルールや一部のチェックは引き続き適用されます。無人作業に使用する場合は、まず周囲の分離環境を構成してテストしてください。このワークフローについては、dangerously-skip-permissionsのガイドで解説しています。

DockerでClaude Codeを実行する

dev containerは、チームに同じ初期環境を提供し、エージェントのプロセスをコンテナ内に保持します。Dockerをインストールし、Dev Containersをサポートするエディタを使用します。プロジェクトの.devcontainer/devcontainer.jsonにこのファイルを追加します。

{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "remoteUser": "vscode",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "22"
    },
    "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
  }
}

コンテナ内でプロジェクトを開いてビルドし、ターミナルでclaudeを実行してサインインします。この構成では、Claude CodeとNode.js 22がインストールされます。プロジェクトに必要な他のランタイムや依存関係を追加してください。機能バージョンは、インストールされるClaude Codeのリリースを固定しません。

この正確な構成のクリーンビルドをテストしました。その後、Claudeが意図的に失敗させたNode.jsのテストを修正し、別のnode --testの実行が成功しました。Node.js機能を明示的に含めることが重要です。Claude Code機能のみを使用した最初のクリーンビルドは、Node.jsとnpmのインストール中に失敗しました。

エージェントに作業を渡す前にマウントを確認してください。書き込み可能なプロジェクトマウントを使用すると、ホスト上のファイルを変更できます。ホームディレクトリ、本番環境の認証情報、ホストのDockerソケットのマウントは避けてください。この最小構成では、ネットワークの許可リストは追加されません。設定に必要な制御については、Anthropicのdev containerのガイドとDockerのセキュリティ文書を参照してください。

DockerコンテナとDocker Sandboxesの違い

DockerはDocker Sandboxesという製品も提供しています。そのドキュメント化されたアーキテクチャでは、microVMと分離されたDockerデーモンを使用します。通常のdev containerは、Dockerを使用しているという理由だけでそれらの特性を得るわけではありません。ワークスペースの同期も、選択したDocker Sandboxesのモードに依存します。2つの設定を同等に扱う前に、そのアーキテクチャとセキュリティモデルを読んでください。

クラウドサンドボックスが役立つ場合

リモートワークスペースは、ラップトップの切断後もタスクを実行し続ける必要がある場合、エージェントに個別の作業ツリーが必要な場合、またはアプリケーションがユーザーごとにワークスペースを作成する場合に役立ちます。リポジトリをコピーし、エージェントを実行し、変更を検査して、保持したいファイルを取得できます。

Lizard Sandboxesは、各サンドボックスを独自のカーネルを持つFirecracker microVMとして実行します。

独立したマシンを使用することで、ラップトップから共有していないファイルからジョブを遠ざけることができます。そのマシン内に配置した認証情報やファイルは、そこで実行されるコードから引き続き利用できます。タスクに合わせてスコープを設定してください。

Lizard SandboxesでClaude Codeを実行する

Lizard CLIをインストールし、サインインしてプロジェクトを選択します。モデルの呼び出しには、Anthropic APIキーまたはサポートされているClaudeサブスクリプショントークンが必要です。

Anthropic APIキーを登録するには、次を実行します。

lizard agents add anthropic

Claudeサブスクリプションの場合は、トークンを作成し、Lizard CLIに登録します。

claude setup-token
lizard agents add claude

プロンプトで認証情報を貼り付けます。リポジトリやコマンド履歴には残さないでください。以下のコマンドは登録が成功したことを前提としています。ライブテストでは既存のClaudeサブスクリプショントークンを使用しました。

ワークスペースを作成する

YOUR_PROJECT_IDをプロジェクトIDに置き換えます。

lizard sandbox create \
  --project YOUR_PROJECT_ID \
  --template claude \
  --size small \
  --timeout 3600000 \
  --json

そのレスポンスのサンドボックスIDをSBに設定します。

SB=YOUR_SANDBOX_ID

ここでのタイムアウトにより、ワークスペースの有効期間は1時間になります。デフォルトは5分であり、コマンドを実行しても延長されません。ジョブに十分な時間を設定し、期限切れになる前に作業を保存してください。ライフサイクルコマンドについては、CLIリファレンスを参照してください。

GitHubトークンなしでコミット済みリポジトリをコピーする

ローカルリポジトリからGitバンドルを作成し、アップロードします。

BUNDLE_DIR=$(mktemp -d)
git bundle create "$BUNDLE_DIR/app.bundle" HEAD
lizard sandbox files put \
  "$SB" "$BUNDLE_DIR/app.bundle" /workspace/app.bundle
lizard sandbox exec "$SB" -- \
  git clone /workspace/app.bundle /workspace/app

バンドルには、HEADから到達可能なコミット済み履歴が含まれます。コミットされていないファイルや追跡されていないファイルは除外されますが、その履歴にコミットされたシークレットは一緒に転送されます。転送前にリポジトリを確認してください。このバンドルをクローンすると、チェックアウトがデタッチされたHEADになる場合があります。それでもエージェントの編集を検査し、変更されたファイルをエクスポートできます。

Claudeに小さなタスクを与える

lizard sandbox prompt "$SB" \
  --agent claude \
  --cwd /workspace/app \
  "Run the tests. Fix one failing test with the smallest reasonable change. Report what changed and which tests passed."

--agent claudeは保持してください。エージェントオプションを省略すると、代わりにデフォルトのエージェントが選択される場合があります。Lizardランナーはリモートワークスペース内で権限バイパスを使用するため、タスクは対話型プロンプトなしで実行できます。したがって、ワークスペースの境界と提供する認証情報は、タスクと一致している必要があります。内部のコードは、プロセスが利用できるモデルの認証情報を読み取ることができます。

テストでは、Python関数が2つの数値の差を計算していましたが、テストではその和が期待されていました。Claudeはその関数を変更し、その後の独立したテスト実行は成功しました。

結果を確認して取得する

lizard sandbox exec "$SB" -- \
  git -C /workspace/app status --short
lizard sandbox exec "$SB" -- \
  git -C /workspace/app diff
lizard sandbox files get \
  "$SB" /workspace/app/path/to/changed-file ./changed-file.review

path/to/changed-fileをダウンロードしたいファイルに置き換えます。変更をマージする前に、プロジェクトのテストを自分で実行してください。リモートの差分を確認し、テストを再実行して、修正されたファイルをダウンロードしました。その内容はリモートの結果と一致していました。

結果を保存したら、ワークスペースを一時停止します。

lizard sandbox pause "$SB"

ステータスがpausedになるまで待ちます。一時停止が成功すると、コンピューティングの課金が停止します。サンドボックスを削除する前に作業をエクスポートし、サンドボックスの削除後もデータを保持する必要がある場合はPersistent Volumesを使用します。保存されたデータには引き続き料金が発生する場合があります。

クラウドワークスペースのコスト

2026年10月18日時点のLizardのコンピューティング料金です。

サイズCPUとメモリ1時間あたりのコンピューティング
Small2 vCPU, 4 GB$0.0162
Medium4 vCPU, 8 GB$0.0324
Large8 vCPU, 16 GB$0.0648

Smallの料金では、100サンドボックス時間は$1.62のコンピューティング使用量を消費します。モデルの呼び出し、ストレージ、およびその他の課金リソースは別になります。

Lizard Proは月額$19(税込み)で、$19分の使用量が含まれます。その額を超える使用量はpay as you goとなります。新規アカウントには$5分の使用量が含まれる7日間のトライアルが提供されます。カードの登録が必要です。ClaudeサブスクリプションまたはAnthropic APIの料金は、Lizardの料金とは別になります。ジョブのサイズを決定する前に、最新の料金を確認してください。

実行中のサンドボックスは、アイドル状態でもコンピューティングを消費します。完了したら正常に一時停止してください。コンピューティングが一時停止されていても、Persistent Volumesのストレージには課金される場合があります。

よくある設定の問題

問題確認事項
Linuxでネイティブサンドボックスが起動しないbubblewrapとsocatをインストールし、Claude Codeを再起動します。ホストの名前空間の制限を確認してください。
必要なドメインがブロックされる必要なホストのみを許可リストに追加し、プロキシ経由で再試行します。
コンテナ内でbubblewrapが失敗するネストされたサンドボックス化は、ホストとコンテナの構成に依存します。分離を暗黙的に無効にするのではなく、サポートされている設定に従ってください。
Dockerの実行中にホストファイルが変更される書き込み可能なマウントを確認します。マウントされたリポジトリは、それらの編集をホストと共有します。
Lizardで間違ったエージェントが起動する--agent claudeを明示的に渡します。
クラウドジョブが完了する前に終了する適切な有効期間を設定し、期限切れになる前に結果を保存します。コマンドを実行しても有効期間はリセットされません。

テスト内容

2026年10月18日に、macOS上およびLizard CLI 4.0.58を通じた新規のSmall Firecrackerサンドボックス内でClaude Code 2.1.286を実行しました。macOSのチェックでは、ワークスペースへの書き込みが許可され、プロジェクト外への書き込みとプロキシをバイパスする直接のネットワークリクエストの両方がブロックされました。

クラウドテストでは、Gitバンドルのアップロード、クローン作成、Claudeによる失敗したPythonテストの修正、独立したテストの再実行、差分の確認、ファイルのダウンロード、一時停止をカバーしました。サンドボックスがpausedに到達したことを確認しました。

Dockerテストでは、ARM64上のDocker Engine 28.1.1、Dev Containers CLI 0.89.0、Node.js 22.23.3、Claude Code 2.1.302を使用しました。修正された構成はクリーンなコンテナからビルドされ、Claudeが失敗したNode.jsテストを修正し、別の再実行で成功しました。また、Linuxパッケージのインストールコマンドも検証しました。

認証には既存のClaudeサブスクリプショントークンを使用しました。初回のOAuth登録の繰り返しや、ネイティブWindows/WSLの分離テストは行っていません。これらのチェックはここで説明したコマンドと結果をカバーするものであり、セキュリティ監査ではありません。

どの設定を選択すべきか

必要なパスとドメインを定義できるローカルのシェルタスクには、組み込みのClaude Code sandboxから始めます。チームで共有の開発環境が必要な場合はdev containerを使用します。タスクにリモートコンピューティングが必要な場合や、同時実行エージェント用に個別の環境が必要な場合は、クラウドワークスペースを選択します。

初めてLizardを実行する場合は、小さなリポジトリをコピーし、Claudeに失敗しているテストを1つ修正するよう依頼し、差分を確認してワークスペースを一時停止します。Claude Codeガイドに現在の設定手順が記載されています。

AI で構築。Lizard で公開。

本番公開にプラットフォームチームは必要ありません。クラウド全体が、1 つの CLI コマンドですぐ使えます。

無料で始める
サービス
—
アドオン
—
デプロイ
—
Sandboxes の起動数
—

当サイトでは、基本機能と分析のために Cookie を使用しています。詳しくはCookie ポリシーをご覧ください。