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 の背景や設計思想は関連書籍に詳しい。

関連用語