じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

「やっちゃえ、バーサーカー」Container-Useで実現するAIエージェントの開発環境

はじめに

AIコーディングエージェント(Claude Code、Cursor、Cline等)の普及により、開発効率は飛躍的に向上しました。しかし、複数のAIエージェントを同時に使用する際、以下のような課題に直面することがあります:

  • ファイルの競合: 複数のエージェントが同じファイルを同時に編集
  • 環境の汚染: 一つのエージェントの変更が他の作業に影響
  • 作業追跡の困難: どのエージェントが何を変更したか把握しにくい

これらの課題を解決するのが、Daggerが開発したContainer-Useです。

github.com

Daggerとは何か

DaggerはDockerの創設者Solomon Hykes氏が2018年に立ち上げた会社で、「DevOpsオペレーティングシステム」の構築を目指しています 。コンテナで開発者の問題を解決したHykesは、今度は「CI/CDの混乱状態」という開発者とインフラの間の複雑な問題に挑戦しています 。

Container-Useとは

Container-Useは、AIエージェント向けのMCP(Model Context Protocol)サーバーで、各エージェントに独立したコンテナ環境を提供します。

dagger.io

主要な機能

  1. 隔離されたコンテナ環境: 各AIエージェントが独立した環境で動作
  2. Gitブランチによる変更管理: すべての変更が自動的にGitブランチに記録
  3. リアルタイム監視: cu watchコマンドで全環境の動作を一元監視
  4. 複数環境の並列実行: 複数のエージェントが干渉することなく同時作業可能

インストールと初期設定

前提条件

  • Docker(macOSの場合はColima推奨)
  • Git

インストール方法

# Homebrewを使用
brew install dagger/tap/container-use

# または、curlを使用
curl -fsSL https://raw.githubusercontent.com/dagger/container-use/main/install.sh | bash

github.com

Claude Codeとの連携設定

.claude/settings.local.jsonに以下を追加:

{
  "mcpServers": {
    "container-use": {
      "command": "container-use"
    }
  },
  "permissions": {
    "allow": [
      "mcp__container-use__environment_open",
      "mcp__container-use__environment_file_write",
      "mcp__container-use__environment_run_cmd",
      "mcp__container-use__environment_update"
    ]
  }
}

実際の動作例

1. MCP経由でのContainer-Use操作

Claude Code内でContainer-Use MCPサーバーを使用して、実際に環境を作成・操作した例です:

# test-cu-demo環境を作成
environment_id: test-cu-demo/polite-herring

# Pythonスクリプトを作成して実行
#!/usr/bin/env python3
import os
import socket

print("Hello from Container-Use!")
print(f"Hostname: {socket.gethostname()}")
print(f"Working Directory: {os.getcwd()}")

# 実行結果:
# Hello from Container-Use!
# Hostname: dagger
# Working Directory: /workdir

2. リアルタイム監視(cu watch

cu watchコマンドを実行すると、すべての環境の動作をリアルタイムで監視できます。各環境での操作(ファイル作成、コマンド実行等)が時系列で表示されます。

3. Webアプリケーションの実行

Container-Use内でWebアプリケーションを実行し、ポートを公開することも可能です:

# 簡単なHTTPサーバーを作成
from http.server import HTTPServer, BaseHTTPRequestHandler

class SimpleHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(f'''
        <html>
            <body>
                <h1>Hello from Container-Use!</h1>
                <p>Container Hostname: {socket.gethostname()}</p>
            </body>
        </html>
        '''.encode())

# ポート8080で実行 → localhost:61753にマッピング

実際に公開されたサイトのスクリーンショットでは、コンテナ内で動作するアプリケーションがブラウザから正常にアクセスできることが確認できます。

基本的な使い方

Container-Use MCPサーバーの主な機能

Container-UseはMCPサーバーとして動作し、AIエージェントから以下の操作が可能です:

  • environment_open: 新しい環境を作成
  • environment_file_write: ファイルの作成・編集
  • environment_file_read: ファイルの読み取り
  • environment_run_cmd: コマンドの実行
  • environment_update: 環境の更新(パッケージインストール等)
  • environment_file_delete: ファイルの削除

監視コマンド

# リアルタイム監視
cu watch

# 環境一覧
cu list

# ログ確認
cu log <環境名>

まとめ

Container-Useは、AIコーディングエージェントに安全で隔離された実行環境を提供する革新的なツールです。主な利点:

  1. 完全な隔離: 各エージェントが独立した環境で動作
  2. 透明性: すべての操作がGitブランチに記録
  3. 並列性: 複数のエージェントが干渉なく同時作業
  4. 安全性: メイン環境を汚染しない実験が可能

AIエージェントを活用した開発をより安全で効率的にしたい方は、ぜひContainer-Useを試してみてください。

参考リンク