Claude Code で container-use を使ってみる

最近 Pro プランでも Claude Code が使えるようになったのでプライベートで使って遊んでみている。
プライベートではそんなに大量にコードを書くこともないので Pro プランの制限の中でも割と遊べている。

そんな中、すべてのコーディングエージェントに独立した開発用コンテナ環境を与えられる「Container Use」、Docker創業者がオープンソースで公開 dagger/container-use の存在を知った。

これまででいうと、公式には Run parallel Claude Code sessions with Git worktrees の中でも git worktree で作業を並行化することを推奨していたが個人的には設定が面倒で重い腰を上げれずにいた。

dagger/container-use は、作業ごとに独立した環境を提供してくれるので、これまでの git worktree のような使い方よりも簡単に使えそうで、これはと思って試してみた。

実際めちゃくちゃ簡単に使うことができたのでしばらく使ってみようと思う。

container-use とは

冒頭でも触れた通り、dagger/container-use は、docker を使って独立した開発用コンテナ環境を提供するもの。
MCPサーバーとして起動して、 Claude Code などから利用することができる。

詳細な仕組みは /environment/README.md にも書いてあるがまだ深くは読み込めていない。
要するに branch ごとに独立した環境で作業をすることができるということかと理解している。

使ってみる

インストール

基本は README.md に書いている通りに進めれば良い。
また記載の通り、 docker (MacOS の場合には基本は Docker Desktop) と git が必要になる。

1点だけ注意が必要で container-use はバイナリの名前が cu でこれは MacOS の場合は通常 cu コマンドと被ってしまう。
(名前についての議論は dagger/container-use/issues/18 でもされてたようだけれど、 cu のままとすることに決まった模様)

cu コマンドと被ってしまっている場合には、インストールした際に以下のようなメッセージが出てくる。
書いてある通り、PATH の優先度を変えても良いが、 MCP として設定する時にフルパス ( /Users/xxx/.local/bin/cu ) を指定すればいいだけではある。

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

...

✅ Installation complete!
❌ Detected Taylor UUCP 'cu' command instead of container-use
ℹ️  The system 'cu' command at /usr/bin/cu is taking precedence
ℹ️  Try running: /Users/xxx/.local/bin/cu --help
ℹ️  Or run 'hash -r' and try again
ℹ️  Or add /Users/xxx/.local/bin to the beginning of your PATH

...

MCP の設定 (Claude Code の場合)

README.md には以下のように書いてある

cd /path/to/repository
npx @anthropic-ai/claude-code mcp add container-use -- <full path to cu command> stdio

が project scope として追加したいとかもあり、また claude mcp add で追加する方が自然なので以下で実行した

claude mcp add container-use -s project /Users/xxx/.local/bin/cu stdio

すると以下のような .mcp.json が作成される

{
  "mcpServers": {
    "container-use": {
      "type": "stdio",
      "command": "/Users/xxx/.local/bin/cu",
      "args": [
        "stdio"
      ],
      "env": {}
    }
  }
}

また、ここ にある指示を CLAUDE.md に追記しておく必要がある。

設定が正常にできているならば Claude Code を起動して /mcp を実行すると以下のように container-use が接続されていることを確認できる

Manage MCP Servers
1 server found
                                                                                                                              
❯ 1. container-use  connected

実行してみる

例えば以下のようなプロンプトを実行すると、3環境起動していることが確認できる

 > 以下3つのタスクを並行して container-use を利用して独立した環境で実施してください

    * タスク A
    * タスク B
    * タスク C

するとすぐに以下のようなログが流れて3つの環境を起動しようとしていることがわかる

⏺ container-use:environment_open (MCP)(source: "/path/to/repo", name: "task-A", explanation: "タスク A")
⏺ container-use:environment_open (MCP)(source: "/path/to/repo", name: "task-B", explanation: "タスク B")
⏺ container-use:environment_open (MCP)(source: "/path/to/repo", name: "task-C", explanation: "タスク C")

実際以下のように branch が作られていることがわかる

$ git branch
* main
repo-task-a/prime-hound
repo-task-b/central-grubworm
repo-task-c/accurate-chow

今回はやっていないが、 GitHub MCP などを使って Pull Request を作ってもらうことも可能なので実質ローカルで Claude Code Actions みたいなことができる。

多少、各環境で環境設定からになったりすることもあり、時間やトークンを消費しているような気もするが今回はそこまで気にならない程度の差だった

まとめ