Dev Container
Docker コンテナ内に開発環境を定義し、チーム全員が同一の環境で開発できる仕組み
開発環境Docker
Dev Container とは
Dev Container (Development Container) は、Docker コンテナ内に開発環境を定義し、.devcontainer/devcontainer.json でツール、拡張機能、設定を宣言的に管理する仕組みである。「自分の環境では動く」問題を解消し、チーム全員が同一の環境で開発できる。
なぜ必要か
| 問題 | Dev Container での解決 |
|---|---|
| Node.js のバージョンが人によって違う | コンテナで統一 |
| OS 依存のバグ (macOS vs Linux) | Linux コンテナで統一 |
| 新メンバーの環境構築に半日かかる | devcontainer.json で自動化 |
| ローカル環境を汚したくない | コンテナ内で完結 |
設定ファイル
// .devcontainer/devcontainer.json
{
"name": "My Project",
"image": "mcr.microsoft.com/devcontainers/typescript-node:22",
"features": {
"ghcr.io/devcontainers/features/aws-cli:1": {},
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
},
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
],
"settings": {
"editor.formatOnSave": true
}
}
},
"postCreateCommand": "npm ci",
"forwardPorts": [3000]
}
Docker Compose との統合
{
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace"
}
# docker-compose.yml
services:
app:
build: .
volumes:
- .:/workspace
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: dev
Features
Dev Container Features で追加ツールを宣言的にインストールする。
| Feature | 説明 |
|---|---|
aws-cli |
AWS CLI |
docker-in-docker |
コンテナ内で Docker を使用 |
node |
Node.js |
python |
Python |
terraform |
Terraform |
GitHub Codespaces
GitHub Codespaces は Dev Container をクラウドで実行する。ブラウザから VS Code を開き、ローカルに何もインストールせずに開発を開始できる。
ローカル開発との比較
| 観点 | ローカル開発 | Dev Container |
|---|---|---|
| 環境構築 | 手動 (README に従う) | 自動 (devcontainer.json) |
| 再現性 | 低い (環境差異) | 高い (コンテナで統一) |
| パフォーマンス | 高い (ネイティブ) | やや低い (コンテナオーバーヘッド) |
| ファイル I/O | 高速 | macOS では遅い場合がある |
Dev Container の背景や設計思想は関連書籍に詳しい。