VS Code(および互換ツール)が定義する Development Container 仕様。リポジトリ内に .devcontainer/devcontainer.json を置くと、言語ランタイム・VS Code 拡張・ホスト OS の認証情報マウントまでを宣言的にコンテナで再現できる。
概要
開発者ごとにバラつく「ローカル環境」をコンテナに閉じ込め、**「リポジトリを clone して Reopen in Container するだけで、誰のマシンでも同じ開発環境が立ち上がる」**状態を実現する。Microsoft 公式仕様で、VS Code / GitHub Codespaces / JetBrains Gateway 等が対応する。
標準構成
.devcontainer/
├── devcontainer.json # Features・mounts・customizations
├── docker-compose.yml # サービス定義(DB やキャッシュも一緒に立てる)
└── post-create.sh # コンテナ生成後に走る初期化スクリプト
主要な設定項目
| キー | 役割 |
|---|---|
dockerComposeFile / service | docker-compose ベースの起動 |
features | dotnet / node / python / docker-outside-of-docker などを宣言的に追加 |
mounts | ホスト OS から認証情報を bind mount(~/.aws ~/.ssh ~/.gitconfig 等) |
containerEnv | コンテナ環境変数(CLI 起動経路で効く) |
customizations.vscode | VS Code 拡張・settings(VS Code 経由で効く) |
postCreateCommand | コンテナ生成直後に走るコマンド(post-create.sh 呼び出し等) |
認証情報の標準的な持ち込み方
ホスト側に実体を置いたまま、bind mount で readonly 共有するのが標準パターン。
| ホスト側 | mode | 用途 |
|---|---|---|
~/.aws | bind, readonly | AWS CLI |
~/.config/gcloud | bind, readonly | gcloud CLI |
~/.config/glab-cli | bind, readonly | GitLab CLI |
~/.gitconfig | bind, readonly | Git |
~/.ssh | bind, readonly | SSH |
~/.microsoft/usersecrets | bind, readonly | .NET User Secrets |
~/.claude | bind(書き込み可) | Claude Code 設定・OAuth |
bypassPermissions の安全装置として
Claude Code の bypassPermissions(破壊的操作の無確認実行)は、ホスト OS で動かすと事故時の被害が制御不能になる。DevContainer に閉じ込めると、docker compose down -v でコンテナ破棄するだけで復旧でき、安全装置として桁違いに効く。詳細は Ubuntu 開発環境構築 を参照。
ホスト OS との関係
| ホスト OS | DevContainer の Docker | 性能 |
|---|---|---|
| Linux(Ubuntu 等) | ネイティブ Docker Engine | カーネル直結。最速 |
| macOS | Docker Desktop(VM 経由) | 中速 |
| Windows | WSL2 + Docker Desktop | 二重仮想化で遅め |
Linux ホストでは network_mode: host でホスト側 localhost のサービスにそのままアクセスできる利点もある。
関連記事
- Ubuntu 開発環境構築 — Linux ホストで DevContainer を組む実例
- Claude Code 7 層ハーネスエンジニアリング — DevContainer 内で動く Claude Code の設計指針
- Agent Teams 編 — DevContainer 内で並列実行する運用
関連用語
- Docker — DevContainer のランタイム
- Claude Code — bypassPermissions の安全装置として DevContainer を必要とする
- Agent Teams — DevContainer 内で動かす実験的機能