砂遊びのイラスト

サンドボックス環境を MCP サーバーで提供する Container Use

AI コーディングエージェントは便利ですが、任意の Bash コマンドを実行できるため、ユーザーのシステムに影響を与える可能性があります。Container Use は MCP サーバーとして動作し、AI コーディングエージェントにサンドボックス環境を提供します。この記事では Container Use の利用方法について紹介します。

Claude Code, Cline, Cursor といった AI コーディングエージェントは多くの開発者に受け入れられており、生産性の向上に大きく貢献しています。他方で安全のために AI コーディングエージェントの実行には注意を払う必要があることを忘れてはいけません。基本的にはユーザーに都度許可を求めるように設計されているものの、AI コーディングエージェントは任意の Bash コマンドを実行できます。例えば rm -rf ~/ のようなコマンドを実行されると、ユーザーのホームディレクトリが意図せず削除されてしまいますし、curl コマンドで悪意のあるコードをダウンロードして実行されると、ユーザーのシステムに深刻な被害を与える可能性があります。

はじめのうちは AI コーディングエージェントがこれから実行しようとするコマンドを、注意深く確認してから許可を与えるように扱っていたユーザーも多いでしょう。ですが Bash コマンドの許可システムは利便性とのトレードオフです。多くの許可を求められていくうちに、ユーザーは次第に許可を出すことに対して無頓着になっていくことがあります。これにより、意図しないコマンドが実行されるリスクが高まります。

また AI コーディングエージェントの種類によっては一切の許可を求めないで実行するオプションを提供しているものもあります。このオプションを使用すると AI コーディングエージェントの自律性や実行速度は向上しますが、ユーザーは AI コーディングエージェントが実行するコマンドを一切確認できなくなります。

このようなリスクを軽減するために、サンドボックス環境で AI コーディングエージェントを実行する機運が高まっています。サンドボックス環境では AI コーディングエージェントが実行するコマンドは、ユーザーのシステムに影響を与えないように制限されます。また、複数の AI コーディングエージェントを並行して実行したとしても、サンドボックス環境ではそれぞれのエージェントが独立した環境で実行されるため、互いのコードの変更に干渉を受けずに進められるという利点もあります。

サンドボックス環境を提供する方法の 1 つとして、Container Use が挙げられます。Container Use は Dagger が開発したツールで、コーディングエージェントにサンドボックス環境を提供する目的で開発されました。MCP サーバー として動作するのが特徴であり、MCP サーバーをサポートしている AI コーディングエージェントであれば、Container Use を介してサンドボックス環境を利用できます。

この記事では Container Use の利用方法について紹介します。

Container Use のインストール

Container Use はシェルスクリプトによるインストールが提供されています。以下のコマンドを実行することで、Container Use をインストールできます。

curl -fsSL https://raw.githubusercontent.com/dagger/container-use/main/install.sh | bash

もしくは Homebrew を使用してインストールすることもできます。Homebrew を使用してインストールした場合は自動でシェルの補完が有効になります。

brew install dagger/tap/container-use

以下のコマンドで Container Use が正しくインストールされているか確認できます。

container-use version
 
container-use version 0.2.0
commit: 387bfbefa991848697beeeac58b165a875b67da6
built: 2025-07-08T20:07:16Z

Container Use の使い方

Container Use は MCP サーバーとして動作します。使用している AI コーディングエージェントごとに MCP サーバーの使用方法は異なりますが、基本的な流れは同じです。ここでは Claude Code を例に Container Use の使い方を紹介します。

以下のコマンドで MCP サーバーの設定を Claude Code に登録します。

claude mcp add container-use -- container-use stdio

claude mcp list コマンドで登録されている MCP サーバーの一覧を確認できます。

claude mcp list
container-use: container-use stdio

オプショナルとして AI コーディングエージェントに Container Use のサンドボックス環境を使用するように指示するプロンプトを CLAUDE.md ファイルに追記できます。

curl https://raw.githubusercontent.com/dagger/container-use/main/rules/agent.md >> CLAUDE.md

指示の内容は以下のようになります。

CLAUDE.md
ALWAYS use ONLY Environments for ANY and ALL file, code, or shell operations—NO EXCEPTIONS—even for simple or generic requests.
 
DO NOT install or use the git cli with the environment_run_cmd tool. All environment tools will handle git operations for you. Changing ".git" yourself will compromise the integrity of your environment.
 
You MUST inform the user how to view your work using `container-use log <env_id>` AND `container-use checkout <env_id>`. Failure to do this will make your work inaccessible to others.

Container Use のサンドボックス環境を利用する

実際に Claude Code で Container Use のサンドボックス環境を利用してみます。Container Use を使用するためには以下の要件があります。

  1. Docker が起動されていること
  2. git レポジトリであること

まずは新しいディレクトリを作成して、git レポジトリを初期化します。

mkdir todo-app
cd todo-app
git init

以下のプロンプトを入力してアプリケーションを生成してもらいましょう。

claude "React, TypeScript, Tailwind CSS を使用して、TODO アプリケーションを作成してください。アプリケーションは以下の機能を持つ必要があります。
- タスクの追加、削除、完了の管理
- タスクのフィルタリング(すべて、未完了、完了)
- タスクの保存と読み込み(ローカルストレージを使用)"

Claude Code は Container Use の MCP サーバーが提供されているツールを利用することで、サンドボックス環境でコマンドを実行できます。Container Use の MCP サーバーは 10 個のツールを提供しています。

  • environment_add_service: サンドボックス環境にデータベースやキャッシュなどのサービスをコンテナイメージから追加する
  • environment_checkpoint: 現在のコンテナの状態をイメージとして保存する
  • environment_create: 新しいサンドボックス環境を作成する
  • environment_file_delete: パスを指定してファイルを削除する
  • environment_file_list: カレントディレクトリのファイル一覧を取得する
  • environment_file_read: ファイルの内容を読み込む
  • environment_file_write: ファイルに内容を書き込む
  • environment_open: 既存のサンドボックス環境を開く
  • environment_run_cmd: サンドボックス環境内でコマンドを実行する
  • environment_update: 新しい instructions と toolchains でサンドボックス環境を更新する

最初に指示を受けたタイミングで environment_create ツールを使用し、サンドボックス環境を作成します。ツールの許可を求められるので承認しましょう。

container-use list コマンドを実行すると、作成されたサンドボックス環境の一覧を確認できます。

container-use list
ID               TITLE                                  CREATED         UPDATED
pleased-buzzard  React TypeScript TODO App Development  39 seconds ago  36 seconds ago

続いて Claude Code は React プロジェクトを作成するために npm create vite@latest todo-app -- --template react-ts コマンドを実行します。シェルコマンドは environment_run_cmd ツールを通じて実行されます。environment_run_cmd はコマンドを実行する環境、実行するコマンド、コマンドを実行する理由を引数に受け取り呼び出されます。

このコマンドはサンドボックス環境内で実行されるため、ユーザーのシステムに影響を与えることはありません。その証拠に ls コマンドを実行してみても、package.json ファイルなどはローカルのディレクトリには存在しないことがわかります。

ls
CLAUDE.md

ファイルの書き込みは environment_write_file ツールを使用して行われます。

コードの生成が完了したら npm run dev コマンドを実行して開発サーバーでアプリケーションを起動します。environment_run_cmd ツールを background: true オプションを指定して呼び出しているため、バックグラウンドでコマンドを実行されます。

コンテナ内でポート 5173 で開発サーバーが起動されたうえで、http://127.0.0.1:51121 を通じてアクセスできるように設定されます。実際にアクセスしてみると TODO アプリケーションが表示されます(今回はスタイリングに失敗しているようですが...)。

作業内容を確認する

Claude Code は作業内容を確認するために container-use log <env_id> コマンドを実行します。これにより、サンドボックス環境内で実行されたコマンドのログを確認できます。<env_id>container-use list コマンドで確認できるサンドボックス環境の ID です。

container-use log pleased-buzzard
 
35da9bd  Starting Vite development server with host binding for container access (12 hours ago) 
$ npm run dev -- --host 0.0.0.0 &
57bb8fd  Building the application with fixed PostCSS configuration (12 hours ago) 
$ npm run build
 
> [email protected] build
> tsc -b && vite build

Claude Code が生成したコードを確認するためには container-use checkout <env_id> コマンドを実行します。Container Use が作業している git ブランチに切り替わり、作業内容を確認できます。

container-use checkout pleased-buzzard
Switched to branch 'cu-pleased-buzzard'
 
ls
eslint.config.js	postcss.config.js	tsconfig.app.json
index.html		README.md		tsconfig.json
package-lock.json	src			tsconfig.node.json
package.json		tailwind.config.js	vite.config.ts

container-use terminal <env_id> コマンドを実行すると、サンドボックス環境内のシェルに接続できます。これにより、サンドボックス環境内で直接コマンドを実行したり、ファイルを操作したりできます。このコマンドを実行するためには Dagger のインストールが必要です。

container-use terminal pleased-buzzard
 
 Attaching terminal

作成されたファイルの差分を確認するためには container-use diff <env_id> コマンドを実行します。

container-use diff pleased-buzzard
 
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e4b78ea
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Vite + React + TS</title>
+  </head>
+  <body>
+    <div id="root"></div>
+    <script type="module" src="/src/main.tsx"></script>
+  </body>
+</html>

変更を適用する

Claude Code の作業が納得できるものであれば、main ブランチに変更を適用します。変更を適用するためには以下の 2 つのオプションがあります。

  • container-use merge <env_id>: AI コーディングエージェントのコミット履歴を保持して変更を適用する
  • container-use apply <env_id>: 元のコミット履歴を破棄して、手動でコミットする

container-use merge <env_id> コマンドを実行して変更を適用しましょう。

container-use merge pleased-buzzard
 
Updating 835a7f9..35da9bd
Fast-forward (no commit created; -m option ignored)
 .container-use/AGENT.md         |    1 +
 .container-use/environment.json |    8 +
 .gitignore                      |   24 +
 CLAUDE.md                       |    5 -
 README.md                       |   69 +
 eslint.config.js                |   23 +
 index.html                      |   13 +

最後に不要になったサンドボックス環境を削除しておきましょう。

container-use delete pleased-buzzard
 
Deleting worktree at /Users/.config/container-use/worktrees/pleased-buzzard
Environment 'pleased-buzzard' deleted successfully.

もし既存のサンドボックス環境を再利用したい場合には、AI コーディングエージェントに指示を出す際にプロンプトで環境 ID を指定できます。例えば以下のようにプロンプトを入力します。

claude "pleased-buzzard 環境を使用して、TODO アプリケーションにタスクの優先度を追加してください。優先度は高、中、低の 3 つのレベルで管理します。"

まとめ

  • Container Use は Dagger が開発した MCP サーバーで、AI コーディングエージェントにサンドボックス環境を提供する
  • Container Use を使用することで、AI コーディングエージェントが実行するコマンドをユーザーのシステムに影響を与えずに実行できる
  • AI コーディングエージェントは始めに environment_create ツールを使用して新しいサンドボックス環境を作成する
  • サンドボックス環境内で実行されるコマンドは environment_run_cmd ツールを通じて実行される
  • ファイルの読み書きは environment_file_readenvironment_file_write ツールを使用して行われる
  • サンドボックス環境の一覧は container-use list コマンドで確認できる
  • 作業ログは container-use log <env_id> コマンドで確認できる
  • container-use checkout <env_id> コマンドで作業中の git ブランチに切り替え、作業内容を確認できる
  • container-use diff <env_id> コマンドで作業内容の差分を確認できる
  • container-use terminal <env_id> コマンドでサンドボックス環境内のシェルに接続できる
  • 変更を適用するためには container-use merge <env_id> もしくは container-use apply <env_id> コマンドを使用する

参考

記事の理解度チェック

以下の問題に答えて、記事の理解を深めましょう。

サンドボックス環境内でコマンドを実行する MCP ツールはどれですか?

  • environment_run_cmd

    正解!

    environment_run_cmd はサンドボックス環境内でコマンドを実行するための MCP ツールです。

  • env_run_cmd

    もう一度考えてみましょう

  • environment_exec_cmd

    もう一度考えてみましょう

  • run_cmd

    もう一度考えてみましょう

AI コーディングエージェントの実行ログを確認するコマンドはどれですか?

  • container-use log <env_id>

    正解!

    container-use log <env_id> コマンドで、サンドボックス環境内で実行されたコマンドのログを確認できます。

  • container-use checkout <env_id>

    もう一度考えてみましょう

    container-use checkout <env_id> は git ブランチに切り替えて作業内容を確認するためのコマンドです。

  • container-use diff <env_id>

    もう一度考えてみましょう

    container-use diff <env_id> はファイルの差分を確認するためのコマンドです。

  • container-use terminal <env_id>

    もう一度考えてみましょう

    container-use terminal <env_id> はサンドボックス環境内のシェルに接続するためのコマンドです。