VS Codeで開発コンテナを作る(Create Dev Container)|手順・devcontainer.json設定・複数コンテナ・言語別テンプレート
VS Codeの開発コンテナ(Dev Container)は、プロジェクトごとに揃った開発環境をコンテナの中に用意し、その中でコードを書く仕組みです。この記事は「Create Dev Container=VS Codeで実際に開発コンテナを作って使う」実践に絞って、作成手順・devcontainer.jsonの設定(rootでの実行を含む)・複数コンテナ・言語別テンプレート・終了と再ビルドまでをコード付きで解説します。開発コンテナの概念やDockerとの違い、導入メリットはDev Container(devcontainer)のメリットとは|仕組みと設定にまとめているので、基礎から知りたい場合はそちらを先にご覧ください。
まとめ:Create Dev Containerの要点
- 作成はVS Codeのコマンドパレットで「Dev Containers: Add Dev Container Configuration Files」を実行し、テンプレートを選ぶだけ。あとは「Reopen in Container」でコンテナ内に入る。
- 拡張機能はDev Containers(
ms-vscode-remote.remote-containers)。旧称はRemote – Containers。 - 設定は
.devcontainer/devcontainer.jsonに書く。imageまたはDockerfileで土台を決め、remoteUserで実行ユーザーを指定する(rootで動かすなら"remoteUser": "root")。 - 複数サービスは
dockerComposeFileでdocker-composeと連携。言語別はmcr.microsoft.com/devcontainers/*の公式イメージが使える。 - ウィンドウを閉じてもコンテナは破棄されず、次回すぐ再利用できる。定義を変えたら「Rebuild Container」で作り直す。
Create Dev Container:VS Codeで開発コンテナを作る手順
前提として、Docker(Docker DesktopやOrbStackなど)とVS Codeの拡張機能「Dev Containers」を入れておきます。手順はコマンドパレット中心で、ターミナル操作はほとんど要りません。
- プロジェクトのフォルダをVS Codeで開く。
- コマンドパレット(
F1)で「Dev Containers: Add Dev Container Configuration Files」を実行し、言語やツールのテンプレートを選ぶ。.devcontainer/devcontainer.jsonが生成される。 - 右下の通知、またはコマンドパレットの「Dev Containers: Reopen in Container」でコンテナ内にVS Codeを開き直す。初回はイメージ取得とビルドが走る。
コンテナ内に入ると、ターミナルもデバッガも拡張機能もコンテナの中で動きます。ホスト側のツールバージョンに左右されず、チームで同じ環境を共有できるのが実践上の利点です。作成後によく足す設定が、コンテナ生成時にコマンドを走らせるpostCreateCommand(例:"postCreateCommand": "npm install")と、コンテナ内のポートをホストへ通すforwardPorts(例:"forwardPorts": [3000])です。なお、VS Codeにはコンテナ全般を操作する別拡張「Container Tools」もありますが、開発環境として入って使うのはこの「Dev Containers」です。
devcontainer.jsonの実践設定:imageとremoteUser(root)
生成されたdevcontainer.jsonが設定の中心です。最小構成は、土台イメージと実行ユーザーを指定するだけです。
{
"name": "my-project",
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"remoteUser": "vscode"
}
公式イメージの多くはvscodeという非rootユーザーが既定で、安全側に倒されています。しかし、パッケージのグローバルインストールや権限が必要な操作で詰まることがあり、「rootで動かしたい」という要望はよく出ます。その場合はremoteUserをrootにします。
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"remoteUser": "root"
}
remoteUserはVS Codeがコンテナ内で使うユーザー、containerUserはコンテナのプロセスを動かすユーザーです。単に作業をrootで行いたいだけならremoteUserの変更で足ります。独自のDockerfileから作る場合はimageの代わりに"build": { "dockerfile": "Dockerfile" }を指定します。
複数コンテナ構成:docker-composeで作る
アプリとデータベースのように複数サービスをまとめて立ち上げたいときは、docker-composeと連携します。dockerComposeFileに既存のcompose定義を渡し、VS Codeが入るserviceを指定します。
{
"name": "web-and-db",
"dockerComposeFile": "../docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace"
}
これでappコンテナにVS Codeが入り、同じcompose内のdbなどのサービスへはサービス名で接続できます。単一のimage指定とdocker-compose連携は排他で、複数サービスが要るならcompose、単体でよければimage/Dockerfileを選びます。
言語別テンプレート:公式イメージの選び方
土台イメージは、Microsoftが配布する言語別の公式イメージmcr.microsoft.com/devcontainers/*を使うのが手軽です。代表的なものは次のとおりです。
| 用途 | イメージ |
|---|---|
| Python | mcr.microsoft.com/devcontainers/python |
| Node.js | mcr.microsoft.com/devcontainers/javascript-node |
| Java | mcr.microsoft.com/devcontainers/java |
| 汎用ベース | mcr.microsoft.com/devcontainers/base:ubuntu |
FlutterやGodotなど公式イメージがない環境は、汎用ベースにFeaturesやDockerfileでツールを足して作ります。追加ツールはfeatures(例:ghcr.io/devcontainers/features/node:1)で宣言的に載せられ、Dockerfileを書かずに済むことも多いです。
コンテナの終了・再利用・再ビルド
「コンテナを閉じたら消えるのか」「終了できない・消えていない」という疑問は多いですが、挙動はシンプルです。VS Codeのウィンドウを閉じるとコンテナは停止しますが破棄されません。次にプロジェクトを開いて「Reopen in Container」すれば、同じコンテナがすぐ再利用されます。ローカルのフォルダ表示に戻すには「Reopen Folder Locally」を使います。
devcontainer.jsonやDockerfileを変更したときは、コマンドパレットの「Dev Containers: Rebuild Container」でコンテナを作り直します。イメージやキャッシュを完全に作り直したいときは「Rebuild Without Cache and Reopen in Container」を選びます。不要になったコンテナやイメージはDocker側から削除できますが、設定ファイルが残っていればいつでも同じ環境を再作成できるのが開発コンテナの強みです。
AIエージェントの隔離実行:devcontainerで動かす
Claude CodeやCodex、GitHub Copilot CLIといったAIコーディングエージェントを開発コンテナの中で動かす使い方が、実務で定着しつつあります。エージェントにファイル編集やコマンド実行を任せる際、コンテナ内に閉じ込めておけば、ホスト環境を汚さず、権限の及ぶ範囲もコンテナ内に限定できます。devcontainer.jsonのfeaturesやpostCreateCommandでエージェントのCLIを導入しておけば、コンテナを開くたびに同じ状態で使えます。GitHub Copilot CLIの動作モードとインストールもあわせて参考にしてください。Docker Desktopを使わない選択肢としては、Apple containerのような軽量ランタイムも登場しています。
基礎・Dockerとの違いはハブ記事へ委譲
この記事は「作って使う」実践に絞りました。開発コンテナがそもそも何か、素のDockerコンテナと何が違うのか、導入のメリットや向かない場面といった基礎は、Dev Container(devcontainer)のメリットとは|仕組みと設定で体系的に解説しています。「devcontainerとは」「devcontainer Docker 違い」を調べている場合は、そちらが入口として適しています。
よくある質問
Create Dev Containerはどこから実行しますか?
VS Codeのコマンドパレット(F1)で「Dev Containers: Add Dev Container Configuration Files」を実行してテンプレートを選び、「Reopen in Container」でコンテナに入ります。拡張機能「Dev Containers」が必要です。
開発コンテナをrootで動かすには?
devcontainer.jsonに"remoteUser": "root"を指定します。remoteUserがVS Codeの操作ユーザー、containerUserがプロセスのユーザーです。公式イメージの既定は非rootのvscodeです。
VS Codeを閉じるとコンテナは消えますか?
消えません。ウィンドウを閉じるとコンテナは停止しますが破棄されず、次に開くと再利用されます。定義を変えたときは「Rebuild Container」で作り直します。
複数のコンテナ(アプリとDB)を使うには?
dockerComposeFileでdocker-composeを指定し、VS Codeが入るserviceを選びます。ほかのサービスへはサービス名で接続できます。
FlutterやJavaの開発コンテナは作れますか?
Javaは公式イメージmcr.microsoft.com/devcontainers/javaが使えます。公式イメージがないFlutterなどは、汎用ベースにFeaturesやDockerfileでツールを追加して作ります。