コンテナ分離環境でのAIコーディングエージェント並列実行
Claude CodeとGit Worktreeによる並列開発では、Git Worktreeを使ってAIエージェントごとにファイルシステムを分離する手法を紹介した。本記事ではその発展形として、各worktreeをコンテナ化された分離環境で動かすアプローチを探る。
なぜコンテナ分離が必要なのか
Git Worktreeだけでも並列開発は可能だが、いくつかの課題が残る。
ホストマシンへのリスク
AIコーディングエージェントはデフォルトでホストマシンへのフルアクセス権を持つ。Claude Codeの--dangerously-skip-permissionsフラグを使えば高速に作業できるが、その名の通り危険も伴う。
- ファイルシステム: プロジェクト外のファイルを誤って変更・削除
- 認証情報:
~/.sshや~/.awsへのアクセス - システムコマンド: 意図しないパッケージインストールや設定変更
特にプロンプトインジェクションのリスクがある。悪意あるWebページやドキュメントを読み込んだ際、エージェントが予期しない動作をする可能性がある。
依存関係の衝突
複数のworktreeで異なるバージョンの依存関係が必要な場合、ホストマシン上では衝突が起きる。
worktree-a: Node.js 18 + PostgreSQL 14
worktree-b: Node.js 20 + PostgreSQL 16
worktree-c: Python 3.11 + Redis
スケーラビリティの限界
ローカルマシンのリソースには限界がある。クラウド上のコンテナインスタンスを使えば、より多くのエージェントを並列実行できる。
分離のレベル
分離環境にはいくつかのレベルがある。
| レベル | 方式 | 分離度 | オーバーヘッド |
|---|---|---|---|
| 1 | Git Worktree のみ | 低 | 最小 |
| 2 | Dev Container | 中 | 低〜中 |
| 3 | Docker Sandbox | 中〜高 | 中 |
| 4 | microVM | 高 | 高 |
重要な点として、コンテナはセキュリティサンドボックスではない。コンテナはプロセス分離であり、カーネルは共有されている。完全な分離が必要ならmicroVM(Firecracker等)を検討すべきだが、ほとんどのユースケースではDev Containerで十分である。
主要なツールとアプローチ
1. Dev Containers(VS Code / Cursor)
最もアクセスしやすいアプローチ。VS CodeやCursorの拡張機能として提供されている。
メリット:
- 既存のエディタワークフローに統合
.devcontainer/devcontainer.jsonで宣言的に設定- 豊富なベースイメージとfeatures
基本構成:
project/
├── .devcontainer/
│ ├── devcontainer.json
│ └── Dockerfile (オプション)
├── .git/
└── src/
2. Container Use(Dagger)
2025年にDaggerチームがリリースしたMCPサーバー。各エージェントに独自のコンテナ化サンドボックスとGit worktreeを自動で提供する。
特徴:
- Claude CodeやCursorとMCP経由で連携
- エージェントごとに独立したコンテナ + worktree
- コマンド履歴の可視化、直接介入が可能
- 失敗時は即座に破棄できる
# インストール
brew install dagger/tap/container-use
# Claude Codeで使用
claude --mcp container-use
3. Agentree
AIコーディングエージェント専用のworktree管理CLIツール。
特徴:
- 環境ファイル(
.env等)の自動コピー - 依存関係の自動インストール(pnpm/npm/cargo/pip/go対応)
- AIツール設定ファイルの複製
# インストール
brew install AryaLabsHQ/tap/agentree
# worktree作成(自動セットアップ付き)
agentree -b feature-auth
# カスタム設定(.agentreerc)
POST_CREATE_SCRIPTS=("pnpm install" "pnpm build")
4. DevTree
Git worktreeとDev Containerを統合したツール。各ブランチに専用のコンテナ環境を提供する。
特徴:
- ブランチごとに独立したDev Container
- 自動ポート割り当て
- 単一コマンドでのコンテキスト切り替え
devtree init
devtree create --branch feature-auth
devtree start
devtree switch feature-payment
5. Docker Sandboxes
Docker Desktop 4.50+で提供される実験的機能。AIコーディングエージェント向けに設計されたサンドボックス環境。
特徴:
- 自動化されたサンドボックス管理
- エージェントライフサイクルの制御
- 将来的にmicroVMサポート予定
6. Worktrunk
2026年1月にリリースされた新しいCLI。5〜10以上のエージェントを並列管理することを想定している。
# 複数のworktreeを管理
worktrunk new feature-a
worktrunk new feature-b
worktrunk status
実践的なアーキテクチャ
パターン1: 基本構成(Dev Container + Worktree)
project-main/ # メインのworktree
├── .devcontainer/
│ └── devcontainer.json
└── src/
project-feature-a/ # worktree A
├── .devcontainer/ # コピーまたはシンボリックリンク
└── src/
project-feature-b/ # worktree B
├── .devcontainer/
└── src/
各worktreeをDev Containerで開くと、それぞれ独立したコンテナが起動する。
パターン2: Container Use統合
Host Machine
├── MCP Server (container-use)
│ ├── Agent A Container
│ │ ├── Git Worktree (feature-a)
│ │ └── Claude Code Session
│ ├── Agent B Container
│ │ ├── Git Worktree (feature-b)
│ │ └── Claude Code Session
│ └── Agent C Container
│ ├── Git Worktree (feature-c)
│ └── Claude Code Session
└── Main Development Environment
パターン3: クラウドスケール構成
Local Machine
└── Orchestrator (CLI/Script)
│
├── Cloud Instance A (e.g., EC2, GCE)
│ ├── Dev Container
│ ├── Git Worktree
│ └── Claude Code (API経由)
│
├── Cloud Instance B
│ └── ...
│
└── Cloud Instance C
└── ...
devcontainer.jsonの設定例
最小構成
{
"name": "AI Agent Environment",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/git:1": {}
},
"postCreateCommand": "npm install"
}
セキュリティ強化版
{
"name": "Secure AI Agent Environment",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"remoteUser": "vscode",
"runArgs": [
"--cap-drop=ALL",
"--security-opt=no-new-privileges"
],
"mounts": [
"source=project-data,target=/workspace,type=volume"
],
"features": {
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/git:1": {}
},
"postCreateCommand": "npm install",
"customizations": {
"vscode": {
"extensions": [
"anthropic.claude-code"
]
}
}
}
セキュリティのポイント:
--cap-drop=ALL: すべてのLinux capabilitiesを削除--security-opt=no-new-privileges: 権限昇格を防止type=volume: ホストのbind-mountではなくDockerボリュームを使用remoteUser: root以外のユーザーで実行
プロジェクト固有の認証情報
{
"name": "Isolated Dev Environment",
"build": {
"dockerfile": "Dockerfile"
},
"mounts": [
"source=${localWorkspaceFolder}/.env.dev,target=/workspace/.env,type=bind,readonly"
],
"containerEnv": {
"AWS_PROFILE": "dev-sandbox",
"NODE_ENV": "development"
}
}
本番環境の認証情報はコンテナに渡さない。開発用の制限されたIAMロールを使用する。
ワークフロー例
1. 並列機能開発
# 1. worktreeを作成
git worktree add ../project-auth -b feature/auth
git worktree add ../project-dashboard -b feature/dashboard
# 2. 各worktreeでDev Containerを開く
# VS Code: "Dev Containers: Open Folder in Container..."
# 3. コンテナ内でClaude Codeを起動
claude --dangerously-skip-permissions
# コンテナ内なのでリスクは限定的
# 4. 各エージェントにタスクを割り当て
# Agent A: 「認証システムをJWTベースに移行して」
# Agent B: 「ダッシュボードにリアルタイム更新機能を追加して」
2. Container Useを使った並列開発
# Claude CodeにContainer Use MCPを接続
claude --mcp container-use
# Claude Codeに指示
> 3つの機能を並列で開発したい。
> 1. 認証システムのリファクタリング
> 2. ダッシュボードの新機能
> 3. API v2の実装
> それぞれ独立したコンテナで作業を進めて。
# Container Useが自動で3つのコンテナ + worktreeを作成
# 各エージェントの状態を確認
container-use list
container-use watch
container-use log feature-auth
3. テスト駆動の並列開発
# Agent A: テスト作成担当
# worktree-tests/に配置、実装コードは見えない
# Agent B: 実装担当
# worktree-impl/に配置、テストだけが見える
# 両者を並列実行し、テストがパスするまで反復
セキュリティベストプラクティス
1. マウントを最小限に
// BAD: ホームディレクトリ全体をマウント
"mounts": ["source=${localEnv:HOME},target=/home/user,type=bind"]
// GOOD: プロジェクトディレクトリのみ
"mounts": ["source=${localWorkspaceFolder},target=/workspace,type=bind"]
// BETTER: Dockerボリュームを使用
"mounts": ["source=project-data,target=/workspace,type=volume"]
2. 認証情報の分離
# プロジェクト専用のSSHキー(deploy key)を使用
# ~/.ssh をマウントしない
# プロジェクト専用のAWS認証情報
# 最小権限のIAMロール
# 本番環境へのアクセス権限なし
3. ネットワーク制限
{
"runArgs": [
"--network=bridge",
"--dns=8.8.8.8"
]
}
必要に応じて特定のネットワークアクセスのみ許可する。
4. 読み取り専用マウント
設定ファイルなど変更不要なものは読み取り専用でマウント:
"mounts": [
"source=${localWorkspaceFolder}/.env,target=/workspace/.env,type=bind,readonly"
]
リモート実行環境
ローカルのコンテナ分離だけでなく、クラウド上のリモート環境でエージェントを実行するアプローチも有力である。完全な分離、スケーラビリティ、ローカルリソースの解放といったメリットがある。
Claude Code on the Web
Anthropicが提供する公式のリモート実行機能。Claude.aiから直接コーディングタスクを実行できる。
特徴:
- 各セッションが独立したVMで実行される
- GitHubリポジトリと連携
- ローカルCLIとの双方向移行(teleport)
並列実行の方法:
# ターミナルからリモートタスクを送信(&プレフィックス)
& Fix the authentication bug in src/auth/login.ts
& Update the API documentation
& Refactor the logger to use structured output
# または--remoteフラグで直接実行
claude --remote "Fix the flaky test in auth.spec.ts"
# 進捗確認
/tasks
各&コマンドは独立したWebセッションを作成し、同時に実行される。
ローカルとの連携:
# プランモードで計画を立てる
claude --permission-mode plan
# 計画に満足したらリモートで実行
& Execute the migration plan we discussed
# リモートセッションをローカルに引き継ぐ
/teleport
# または
claude --teleport <session-id>
プリインストール環境:
- Python, Node.js, Ruby, PHP, Java, Go, Rust, C++
- PostgreSQL 16, Redis 7.0
- npm, yarn, pnpm, bun, pip, cargo等
GitHub Codespaces
GitHubが提供するクラウド開発環境。リポジトリをそのままクラウドのコンテナで開ける。
メリット:
- 完全なファイルシステム分離(リポジトリ内のファイルのみアクセス可能)
- ローカルマシンへのリスクがゼロ
- VS Code(ブラウザ/デスクトップ)またはSSHでアクセス
セットアップ:
# ブラウザで開く
# github.com/<repo> → Code → Codespaces → New codespace
# SSHで接続
gh cs ssh
# ローカルVS Codeから接続
# VS Code → Remote Explorer → Codespaces
制限事項:
- ネットワークアクセスは制限されない(データ送受信が可能)
- 多層防御の1つとして位置づけるべき
クラウドVM(EC2, GCE, DigitalOcean等)
より柔軟な構成が必要な場合は、クラウドVMを直接使用する。
アーキテクチャ例:
Local Machine
├── tmux/screen session (optional)
└── SSH connections
│
├── VM-1 (feature-auth)
│ ├── Git Worktree
│ ├── Claude Code session
│ └── Independent dependencies
│
├── VM-2 (feature-dashboard)
│ └── ...
│
└── VM-3 (feature-api)
└── ...
接続方法:
# 直接SSH
ssh user@vm-1.example.com
cd /workspace/project && claude
# VS Code Remote SSH
# .ssh/config に設定を追加後、Remote Explorerから接続
# Tailscale経由(NAT越え)
tailscale ssh vm-1
使い捨てインスタンスのパターン:
# Terraform/Pulumiでインスタンスを作成
terraform apply -var="branch=feature-auth"
# タスク完了後に破棄
terraform destroy
タスクごとにインスタンスを作成・破棄することで、完全なクリーン環境を保証できる。
リモートSSHトンネル
ローカルマシンで実行しているClaude Codeにリモートからアクセスする逆パターンもある。
ShellHub + Docker:
# ローカルでClaude Codeをコンテナ化して実行
docker run -d --name claude-agent \
-e SHELLHUB_TENANT_ID=xxx \
claude-code-image
# どこからでもSSH接続可能(NAT越え)
ssh user@device.namespace.shellhub.io
Tailscale SSH:
# Tailscaleネットワークに参加
tailscale up
# 別デバイスから接続
tailscale ssh my-dev-machine
cd ~/project && claude
流動状態(フロー)を維持したまま、デバイス間でシームレスに作業を継続できる。
リモート環境の比較
| 方式 | 分離度 | セットアップ | コスト | ユースケース |
|---|---|---|---|---|
| Claude Code on the Web | 高(VM) | 最小 | サブスク込み | 並列タスク、軽量作業 |
| GitHub Codespaces | 高 | 低 | 従量制 | チーム開発、PR作業 |
| クラウドVM | 最高 | 中〜高 | 従量制 | 大規模並列、カスタム環境 |
| リモートSSH(Tailscale等) | ローカル依存 | 低 | 無料〜低 | デバイス間移動 |
リモート実行のベストプラクティス
1. 環境の自動セットアップ
CLAUDE.mdや.claude/settings.jsonのSessionStartフックで依存関係を自動インストール:
{
"hooks": {
"SessionStart": [{
"matcher": "startup",
"hooks": [{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/scripts/setup.sh"
}]
}]
}
}
2. 認証情報の安全な受け渡し
環境変数として設定し、リポジトリにはコミットしない:
# Codespacesの場合
# Settings → Codespaces → Secrets に設定
# クラウドVMの場合
# IAMロールを使用(認証情報のハードコードを避ける)
3. ネットワークアクセスの制限
Claude Code on the Webのデフォルトでは、パッケージマネージャとクラウドプラットフォームへのアクセスのみ許可される。追加のドメインは明示的に許可する。
4. テレポートの活用
リモートで作業を進め、インタラクティブな作業が必要になったらローカルに引き継ぐ:
# リモートで基本実装
& Implement the new API endpoint based on the spec
# 複雑なデバッグが必要になったらローカルへ
/teleport
トレードオフと注意点
オーバーヘッド
コンテナ化には以下のオーバーヘッドがある:
- 起動時間: Dev Containerの初回起動は数十秒〜数分
- ディスク: 各コンテナイメージのレイヤー
- メモリ: コンテナごとのメモリ割り当て
キャッシュを活用し、ベースイメージを共有することでオーバーヘッドを軽減できる。
デバッグの複雑さ
コンテナ内での問題切り分けは難しくなることがある:
- ネットワークの問題はコンテナなのかホストなのか
- ファイルパーミッションの問題
- ボリュームのマウント状態
完全な分離ではない
繰り返しになるが、Dockerコンテナはカーネルを共有している。悪意あるコードがカーネルの脆弱性を突けば、ホストに影響を与える可能性はゼロではない。
完全な分離が必要なら:
- microVM(Firecracker、gVisor)
- リモートの使い捨てインスタンス
いつコンテナ分離を使うべきか
コンテナ分離が有効な場面:
- 信頼できないソースからの情報を処理
- 長時間の自動実行タスク
- 複数の依存関係バージョンが必要
- チームで環境を共有
ホストで直接実行してよい場面:
- 信頼できるコードベースでの作業
- 短時間のインタラクティブな作業
- シミュレータやデバッガが必要
- 迅速なフィードバックループが重要
まとめ
Git Worktreeによるファイルシステム分離と、Dev Containerによる実行環境分離を組み合わせることで、AIコーディングエージェントの並列実行をより安全かつスケーラブルに行える。
基本原則:
- 分離によって自律性が高まる:
--dangerously-skip-permissionsを安全に使える - マウントを最小限に: 必要なディレクトリだけをコンテナに渡す
- 認証情報を分離: プロジェクト専用の制限された認証情報を使用
- コンテナは万能ではない: 完全な分離が必要ならmicroVMを検討
ツールの選択:
- 手軽に始めるなら: Dev Containers
- 自動化したいなら: Container Use, Agentree, DevTree
- 大規模並列なら: クラウドインスタンス + Container Use
この分野はまだ発展途上であり、2025〜2026年にかけて多くのツールが登場している。自分のワークフローに合ったものを試してみてほしい。
参考
ローカルコンテナ分離
- Container Use: a New Tool for Isolated, Parallel Coding Agents | InfoQ
- Containing Agent Chaos: Run Coding Agents in Parallel | Dagger
- container-use | GitHub
- Agentree | GitHub
- DevTree | GitHub
- How to Safely Run AI Agents Inside a DevContainer | Code With Andrea
- How Dev Containers Protect Your Machine from AI Coding Agents
- Docker Sandboxes: A New Approach for Coding Agent Safety | Docker
リモート実行環境
- Claude Code on the Web | Claude Code Docs
- Sandboxing for AI Coding with GitHub Codespaces
- AI and Remote Development in VS Code | VS Code Blog
- Remote AI Coding with Claude Code and ShellHub | DEV
- Remote AI Development with Tailscale SSH | Titus Soporan
- VS Code + Claude Code on DigitalOcean Droplets | DigitalOcean
並列エージェント管理
- Git Worktrees: The Secret Weapon for Running Multiple AI Coding Agents | Medium
- How Git Worktrees Changed My AI Agent Workflow | Nx Blog
- How To Use Claude Code To Wield Coding Agent Clusters | PulseMCP
- Worktrunk | GitHub
関連ノート
AIエージェント・並列開発
環境分離・セキュリティ
開発環境
インフラ・設計原則
抽出された概念
この記事の内容は既存のノートによってカバーされている。主要な関連ノートは上記を参照。