Dev Container

Docker コンテナ内に開発環境を定義し、チーム全員が同一の環境で開発できる仕組み

開発環境Docker

Dev Container とは

Dev Container (Development Container) は、Docker コンテナ内に開発環境を定義し、.devcontainer/devcontainer.json でツール、拡張機能、設定を宣言的に管理する仕組みである。「自分の環境では動く」問題を解消し、チーム全員が同一の環境で開発できる。

なぜ必要か

開発チームでは、メンバーごとに Node.js のバージョンや OS が異なり、「自分の環境では動く」問題が頻発する。Dev Container を使えば、Docker コンテナ内に統一された開発環境を定義でき、新メンバーも設定ファイル 1 つで即座に開発を開始できる。

問題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 との統合

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-cliAWS CLI
docker-in-dockerコンテナ内で Docker を使用
nodeNode.js
pythonPython
terraformTerraform

GitHub Codespaces

GitHub Codespaces は Dev Container をクラウドで実行する。ブラウザから VS Code を開き、ローカルに何もインストールせずに開発を開始できる。

ローカル開発との比較

ローカル開発との主な違いを以下に比較する。

観点ローカル開発Dev Container
環境構築手動 (README に従う)自動 (devcontainer.json)
再現性低い (環境差異)高い (コンテナで統一)
パフォーマンス高い (ネイティブ)やや低い (コンテナオーバーヘッド)
ファイル I/O高速macOS では遅い場合がある

Dev Container の背景や設計思想は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事