🧰

AIコーディングエージェントを導入した開発環境をコンテナで構築する

に公開

AIコーディングエージェント使っていますか?
私は2024年末頃からClineを皮切りに、Claude Code、Codexなどを試しながら使ってきました。
今までは「AIに質問 → AIが回答 → 人間が実装」という流れでしたが、AIエージェントが自動で実装してくれるようになりました。
ただ、AIエージェントをローカルで動作させるとツールごとの設定ファイルやパッケージが混在したり、PC内のシステムファイルやプロジェクト外のファイルを誤って変更してしまうリスクがあります。
そうしたリスクを避けつつAIエージェントを気軽に試せるよう、Dev Containerを使って開発環境を構築したいと思います。

AIコーディングエージェントとは

AIコーディングエージェントは、開発者の指示に基づいて自律的にコーディング作業を実行するAIツールです。
従来のコード補完ツールは、コードを提案するだけで実装は開発者が行う必要がありました。
一方、AIコーディングエージェントは以下のようなタスクを自律的にこなします。

  • ファイル作成と編集 — プロジェクト全体を横断して関連ファイルをまとめて作成・編集する
  • コマンド実行と検証 — テストや npm run buildgit commit などのコマンドを実行し、結果を解析したうえで次のアクションを判断する
  • エラー復旧と改善提案 — 失敗ログを読み取り、修正案を作成して再実行するなど、フィードバックループを自律的に回す

そのため「バグを修正して」「新機能を追加して」といった指示だけで、AIが実装から検証まで行うことが可能になりました。

AIコーディングエージェントの提供形態

AIコーディングエージェントのツールは、大きく分けて CLI型IDE型 の2つの提供形態があります。

CLI型

ターミナルから直接エージェントに指示を出す形態です。

  • ターミナル上で対話形式で指示を出して実行
  • SSH先やCIなど、GUIのない環境での利用
  • シェルスクリプトに組み込んでの自動化

IDE型

VS CodeなどのIDEに拡張機能として組み込む形態です。

  • パネルやサイドバーを通じてGUIで操作
  • 差分表示、lint、構文チェックなどエディタ機能との連携
  • 開いているファイルや選択範囲を自動で読み取って提案

使い分けの目安

CLI型が向いている場合:

  • Vim/Emacsなど特定のエディタを使い続けたい
  • CIやスクリプトから自動実行したい
  • リモートサーバーで作業することが多い

IDE型が向いている場合:

  • エディタ内で完結させたい
  • GUIで差分を確認しながら作業したい
  • エディタの補完機能と併用したい

多くのサービスがCLI・IDE両方を提供しており、用途に応じて使い分けることができます。

AIコーディングエージェントの代表的なサービス

主要なAIコーディングエージェントサービスは以下の通りです。

サービス CLI IDE 拡張機能 備考
Claude Code Anthropic製
Codex OpenAI製
Gemini Code Assist Google製
GitHub Copilot GitHub製

主要なサービスはすべてCLI・IDE両方に対応しています。

料金プランと無料枠(2025年10月時点)

ツール 最小コスト 無料枠
Claude Code Claude Pro $20/月 もしくはAPI従量課金 -
Codex ChatGPT Plus $20/月 もしくはAPI従量課金 -
Gemini Code Assist Gemini Code Assist Standard $22.80/月 [1]
GitHub Copilot GitHub Copilot Pro $10/月 [2]

Dev Container とは

Dev Containerは、Dockerコンテナ内で開発を行うための仕組みです。
プロジェクトごとに必要なツールやライブラリをコンテナイメージとして定義し、.devcontainerディレクトリに設定を記述することで、誰でも同じ開発環境を再現できます。

AIコーディングエージェントをDev Container内で動かすことで、以下のメリットがあります。

  • 環境の分離 — ホストOSの環境を汚さずに試せる
  • 安全性 — エージェントの誤操作によるシステムファイルの変更を防ぐ
  • 柔軟性 — 複数のエージェントを独立した環境で試せる
  • 再現性 — チームで同じ開発環境を共有できる

前提条件

Dev Containerを使用するには Docker が必要です。

対応環境

Dev Containerは以下の環境で利用できます。

  • Visual Studio Code — Dev Containers拡張機能をインストール
  • Dev Container CLI — ターミナルから操作(IDE不要)
  • その他 — JetBrains IDEやGitHub Codespacesにも対応

この記事ではVS CodeとDev Container CLIを使った方法を説明します。

Dev Container開発環境構築

まずはベースの開発環境をDev Containerで構築します。

ディレクトリ構成

ai-coding-agent-devcontainer/
└── .devcontainer/
    ├── devcontainer.json      # Dev Container設定
    └── Dockerfile             # コンテナイメージ定義

プロジェクト作成

プロジェクト用のディレクトリを作成します。

mkdir ai-coding-agent-devcontainer
cd ai-coding-agent-devcontainer

VS Codeで開く場合:

code .

Dev Container設定

.devcontainer/devcontainer.json ファイルを作成し、以下のように記述します。

.devcontainer/devcontainer.json
{
  "name": "AI Coding Agent Development Container",
  "build": {
    "dockerfile": "Dockerfile",
    "args": {
      "USERNAME": "devuser",
      "NODE_VERSION": "24"
    }
  },
  "remoteUser": "devuser"
}

.devcontainer/Dockerfile ファイルを作成し、以下のように記述します。

.devcontainer/Dockerfile
FROM mcr.microsoft.com/devcontainers/base:trixie

ARG LOCALE=ja_JP.UTF-8
ARG TIME_ZONE=Asia/Tokyo
ARG USERNAME=devuser
ARG NODE_VERSION=24

ENV LANGUAGE=${LOCALE}
ENV LC_ALL=${LOCALE}
ENV TZ=${TIME_ZONE}

# 開発ツールのインストール
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
    fd-find \
    locales \
    sqlite3 \
    tmux \
    ripgrep

# ロケール設定
RUN sed -i -E "s/# (${LOCALE})/\1/" /etc/locale.gen \
    && locale-gen ${LOCALE}

# 既存のvscodeユーザーの名前を変更
RUN if [ "${USERNAME}" != "vscode" ]; then \
        groupmod -n ${USERNAME} vscode && \
        usermod -l ${USERNAME} -d /home/${USERNAME} -m vscode && \
        sed -i "s/vscode/${USERNAME}/g" /etc/sudoers.d/vscode && \
        mv /etc/sudoers.d/vscode /etc/sudoers.d/${USERNAME}; \
    fi

# Node.jsのインストール
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \
    && apt-get install -y nodejs

# Node.jsの設定
ENV NPM_CONFIG_PREFIX=/home/${USERNAME}/.npm-global
ENV PATH=/home/${USERNAME}/.npm-global/bin:$PATH
RUN mkdir -p /home/${USERNAME}/.npm-global \
    && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.npm-global

Dev Container起動

VS Codeの場合

  1. 拡張機能「Dev Containers」をインストール
  2. コマンドパレット(Ctrl+Shift+P / Cmd+Shift+P)を開く
  3. 「Dev Containers: Reopen in Container」を選択
  4. コンテナのビルドと起動が完了すると、VS Code内のターミナルがコンテナ内で動作します
確認方法:
whoami           # devuser と表示される
node --version   # v24.x.x と表示される

Dev Container CLIの場合

ホストOS上でDev Container CLIをインストールします(Node.js が必要)。

npm install -g @devcontainers/cli

コンテナをバックグラウンドで起動します。

devcontainer up --workspace-folder .

コンテナ内でシェルを起動します。

devcontainer exec --workspace-folder . zsh
確認方法:
whoami           # devuser と表示される
node --version   # v24.x.x と表示される

終了する場合は exit を実行します。


これでDev Container環境が構築できました。 次のセクションでは、この環境内にAIコーディングエージェントをインストールします。

AIコーディングエージェントのインストール

Dev Containerで起動したコンテナ内にAIコーディングエージェントをインストールします。
主要なAIコーディングエージェントのインストール方法は基本的に同じ流れです。
ここでは無料枠があり試しやすいGemini Code Assistを例に、コンテナ内でのインストール手順を説明します。

Gemini Code Assist

Gemini Code AssistはGoogle製のAIコーディングエージェントです。
個人のGoogleアカウントで無料で試すことができます。

Gemini CLI

インストール:

npm install -g @google/gemini-cli

確認:

gemini --version

初回起動と認証: Gemini CLIを起動します。

gemini

初回実行時に認証方法を選択します。

How would you like to authenticate for this project?

● 1. Login with Google
  2. Use Gemini API Key
  3. Vertex AI

Login with Google はブラウザを使用した認証になります。
動作確認で利用する場合はこちらが手軽です。

Use Gemini API KeyGoogle AI Studio で発行したキーを使用します。
API Keyを使う場合は、あらかじめ Google AI Studio でAPIキーを発行し環境変数に設定しておきます。

Google AI Studio
https://aistudio.google.com/api-keys

export GEMINI_API_KEY="YOUR_API_KEY"

使い方: 認証が完了すると、プロンプトが表示されます。

>   Type your message or @path/to/file

たとえば、以下のように指示を入力します。

> package.jsonを作成して、Node.jsプロジェクトの初期設定をしてください

AIが自動でファイルを作成・編集します。ファイルを指定する場合は @ を使います。

> @README.md このファイルにプロジェクトの説明を追加してください

Gemini Code Assist IDE 拡張機能

VS Codeで使う場合は、拡張機能「Gemini Code Assist」をインストールします。

インストール方法(どちらでも可):

VS Code拡張機能パネルから「Gemini Code Assist」を検索してインストール、またはターミナルからインストールします。

code --install-extension google.geminicodeassist

拡張機能初回起動時に認証が必要です。
認証はブラウザ認証になります。

初回はエージェント機能が有効にできない場合があるので、その際はウィンドウ再読み込みを行います。
コマンドパレットを開いて「Developer: Reload Window」を選択すると、ウィンドウ再読み込みが行われます。

あとは自由に指示をメッセージで入力してAIに作業をしてもらえます。

その他のAIコーディングエージェント

他の主要なAIコーディングエージェントも同様の流れでインストールできます。

Claude Code

CLI:

npm install -g @anthropic-ai/claude-code

VS Code拡張機能:

code --install-extension Anthropic.claude-code

実行:

claude

Codex

CLI:

npm install -g @openai/codex

VS Code拡張機能:

code --install-extension openai.chatgpt

実行:

codex

GitHub Copilot

CLI:

npm install -g @github/copilot

VS Code拡張機能:

code --install-extension GitHub.copilot-chat

実行:

copilot

Dev ContainerでAIエージェントの設定を永続化する

Dev Containerの環境では、コンテナを再ビルド再作成すると、コンテナ内のファイルシステムがリセットされ、設定ファイルや認証情報が失われます。
これはコンテナの特性であり、イメージから起動するたびにクリーンな状態に戻るためです。

設定や認証情報を永続化することで、以下のメリットがあります。

  • 再ビルド後も設定を保持できる
  • 認証手続きを毎回行わなくて済む
  • 複数のプロジェクトで同じ設定を共有できる

Gemini Code Assistの例

Gemini Code Assistを使う場合、認証情報や設定は ~/.gemini ディレクトリに保存されます。

永続化の方法:

このディレクトリをDocker Volumeとしてマウントすることで、コンテナの再ビルド後も設定を保持できます。
Docker Volumeは、コンテナとは独立して存在するストレージで、コンテナが削除されてもデータが残ります。

設定方法

.devcontainer/devcontainer.json に以下を追加します。

.devcontainer/devcontainer.json
{
  "name": "AI Coding Agent Development Container",
  "build": {
    "dockerfile": "Dockerfile",
    "args": {
      "USERNAME": "devuser",
      "NODE_VERSION": "24"
    }
  },
  "remoteUser": "devuser",

  // 追加: Docker Volumeをマウント
  "mounts": [
    "source=ai-coding-agent-devcontainer-gemini,target=/home/devuser/.gemini,type=volume"
  ],

  // 追加: コンテナ作成後に権限を修正
  "postCreateCommand": "sudo chown -R devuser:devuser /home/devuser/.gemini"
}

他のAIエージェントでも応用可能

この方法は他のAIエージェントでも同様に適用できます。
それぞれの設定を保存するディレクトリを確認し同様にDocker Volumeで永続化します。

  • Claude Code~/.claude をマウント
  • Codex~/.codex をマウント

Dev Container環境でのMCPサーバ設定

Dev Container環境でMCPサーバを利用する場合、MCPサーバが必要とする依存関係をコンテナイメージに含める必要があります。
ここでは、ブラウザ操作を行うMCPサーバの例として、Playwrightを使った設定方法を説明します。

MCPサーバとは

MCP(Model Context Protocol)は、Anthropic社が提唱する、AIエージェントが外部ツールやデータソースと連携するための標準プロトコルです。
MCPサーバを導入することで、AIエージェントの能力を拡張できます。

主な機能例:

  • ブラウザ操作 — Webページの閲覧、スクリーンショット取得、フォーム入力
  • データベース接続 — SQLクエリの実行、データの取得
  • 外部API連携 — 天気情報、株価情報などの取得
  • ファイルシステム操作 — 特定のディレクトリへの読み書き

Dev Container環境での注意点:

MCPサーバは外部プロセスとして動作するため、必要な依存関係をコンテナイメージに含める必要があります。
とくにブラウザ操作系のMCPサーバでは、ブラウザ本体とシステムライブラリのインストールが必要です。

Playwright MCPサーバのセットアップ

パッケージインストール

ブラウザ実行に必要なパッケージを追加します。

sudo apt-get install -y --no-install-recommends chromium fonts-noto-cjk

Playwright設定ファイルの作成

プロジェクトルートに playwright-config.json を作成します。

vi playwright-config.json
playwright-config.json
{
  "browser": {
    "isolated": true,
    "launchOptions": {
      "executablePath": "/usr/bin/chromium",
      "headless": true,
      "args": [
        "--no-sandbox",
        "--disable-setuid-sandbox",
        "--disable-dev-shm-usage"
      ]
    },
    "contextOptions": {
      "viewport": {
        "width": 1280,
        "height": 1024
      }
    }
  }
}

AIエージェントでの設定

Gemini CLI の場合

Gemini CLIでMCPサーバを使う場合、~/.gemini/settings.json に設定を記述します。

vi ~/.gemini/settings.json

mcpServers セクションに以下を追加します。
すでにファイルが存在する場合は、既存の設定に追加してください。

~/.gemini/settings.json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--config",
        "playwright-config.json"
      ]
    }
  }
}

動作確認

以下のような指示を入力して、MCPサーバが動作するか確認します。

> https://yahoo.co.jp/ にアクセスしてスクリーンショットを取得してください

AIエージェントがPlaywright MCPサーバを使ってブラウザを起動してスクリーンショットを取得できれば、MCPサーバが正しく動作しています。

まとめ

この記事では、AIコーディングエージェントをDev Container環境で安全に動作させる方法を説明しました。
コンテナを使うことで、ローカル環境を汚さずにAIエージェントを試すことができます。
さらにMCPサーバを組み合わせることで、ブラウザ操作やデータベース接続などの高度な機能をAIエージェントに追加できます。

この構成により、以下のメリットが得られます。

  • 安全性 — AIエージェントの誤操作によるシステムファイルの変更を防ぐ
  • 環境の分離 — ローカル環境を汚さず、複数のエージェントを独立して試せる
  • 永続性 — 設定や認証情報をコンテナ再ビルド後も保持できる
  • 再現性 — チーム全体で同じ開発環境を共有できる
  • 拡張性 — MCPサーバで機能を自由に追加できる

ぜひこの環境を構築して、AIコーディングエージェントを安全に試してみてください。

リポジトリ

https://github.com/horatjp/example-ai-coding-agent-devcontainer

参考

Dev Containers
https://containers.dev

MCP
https://modelcontextprotocol.io/

Gemini Code Assist
https://cloud.google.com/gemini/docs/code-assist

脚注
  1. 個人のGoogleアカウントで月間一定回数まで無料で利用可能(制限は変更される可能性があります) ↩︎

  2. 無料はIDEのみ ↩︎

GitHubで編集を提案

Discussion