導入の背景と必要性
ソフトウェア開発プロジェクトでチーム開発を経験したことがある方なら、エンジニアAのPCでは問題なく動くのに、エンジニアBやテスターの環境に移した途端にエラーで真っ赤になるという光景に見覚えがあるはずです。そして決まって返ってくる言葉は、「あれ、私の環境では正常に動くんですけど……」です。
個人のPC環境をそれぞれ別の「キッチン」に例えてみましょう。ある人はガスコンロを使い、ある人はIHクッキングヒーターを使い、ドイツ製の包丁を使う人もいれば鉄フライパンを使う人もいます。同じレシピで作ったとしても、調理器具が異なれば料理が焦げ付いたり味がブレたりすることがあります。プログラミングもまったく同じです。macOS、Windows、LinuxといったOSの違いはもちろん、Pythonのマイナーパッチバージョンのわずかな差異(3.11.2と3.11.6など)やCバインディングライブラリの違いだけでも、アプリケーションは簡単に動作しなくなります。
規模の大きい複雑なプロジェクトでは、新メンバーの環境構築サポートに丸1〜2営業日を費やしてしまうことも珍しくありません。さらに厄介なのは、Node 14やPython 3.8を使用している過去の古いリポジトリで緊急のバグ修正が発生した場合です。ホストマシン上で既存のバージョンをアンインストールしてダウングレードする手間が発生し、ローカル環境での依存関係の競合リスクも極めて高くなります。
Dev Containers(Development Containers)は、この課題を根本から解決します。ランタイム、パッケージ管理ツール、CLIツールなどの開発環境全体が、独立したDockerコンテナ内にすっきりとパッケージングされます。ホストマシン上のVS Codeは、そのコンテナ内部へ直接接続して動作します。その結果はどうでしょうか。チームへの新メンバーのオンボーディング期間は2日からわずか10分へと劇的に短縮されます。新メンバーはソースコードをクローンして開くだけで、すぐにコーディングを開始できるのです。
必要なツールのインストール
設定を始める前に、お使いのPCに以下の2つの基本ツールを準備しておく必要があります。
- Docker Desktop(Windows / macOS)または Docker Engine(Linux)。Dockerデーモンが正常に起動していることを確認してください。
- 最新バージョンの Visual Studio Code。
次にVS Codeを開き、Extensionsタブ(Windows/LinuxではCtrl + Shift + X、macOSではCmd + Shift + X)に移動します。Microsoft公式の拡張機能 Dev Containers(ID: ms-vscode-remote.remote-containers)を検索し、Install をクリックします。
PCのターミナルを開き、以下のコマンドを実行してDockerが正常に応答することを確認します。
docker --version
docker ps
権限エラーなどが表示されず、バージョン情報と空のコンテナ一覧が出力されれば、次のステップに進む準備は完了です。
詳細な設定手順
Dev Containersのすべての設定は、プロジェクトルートにある .devcontainer/ ディレクトリ配下に配置され、その中に devcontainer.json ファイルを作成します。
my-project/
├── .devcontainer/
│ └── devcontainer.json
├── src/
│ └── app.py
└── README.md
devcontainer.json ファイルは仕様書の役割を果たします。コンテナが使用するベースイメージ、VS Codeに事前インストールする拡張機能、ポートフォワーディングの設定、環境構築時に実行する初期化スクリプトなどを定義します。
Pythonプロジェクト向けの設定例
{
"name": "Python 3.11 Workspace",
"image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye",
"customizations": {
"vscode": {
"settings": {
"python.defaultInterpreterPath": "/usr/local/bin/python"
},
"extensions": [
"ms-python.python",
"ms-python.black-formatter",
"njpwerner.autodocstring"
]
}
},
"forwardPorts": [8000],
"postCreateCommand": "pip install --upgrade pip && if [ -f requirements.txt ]; then pip install -r requirements.txt; fi",
"remoteUser": "vscode"
}
主要パラメータの詳細解説
image: コンテナのベースイメージです。ここではチームメンバー全員が、Python 3.11が事前導入された同一のDebian Linux環境上で開発を行うことになります。customizations.vscode.extensions: コンテナ内に自動インストールされるVS Code拡張機能の一覧です。チーム全員が手動インストール不要で同一のコードフォーマッタ(Blackなど)を共有できます。forwardPorts: ホストマシンにフォワードするネットワークポートです。例えばFastAPIなどのバックエンドがポート8000で動作している場合、ホスト側のブラウザからhttp://localhost:8000にアクセスして動作を確認できます。postCreateCommand: コンテナの初回作成完了直後に一度だけ実行されるコマンド列です。ここではrequirements.txtに記載された依存ライブラリの一括インストールを行っています。
Dev Container環境の起動
設定ファイルを保存したら、F1 キー(または Ctrl + Shift + P / Cmd + Shift + P)を押し、以下のコマンドを検索して実行します。
Dev Containers: Reopen in Container
VS Codeがイメージをプルし、コンテナをビルドした上で、プロジェクトのソースコードディレクトリ全体をコンテナ内にマウントします。ウィンドウ左下のステータスバーを確認すると、接続アイコンが緑色に変わり、Dev Container: Python 3.11 Workspace と表示されます。これ以降、VS Code内のターミナル操作はすべてLinuxコンテナ内部で直接実行されます。
動作確認とリソース監視
コンテナの構築が完了したら、環境を検証してみましょう。VS Codeの統合ターミナル(Ctrl + `)を開き、以下のコマンドを実行します。
# OSカーネル情報の確認
uname -a
# Pythonのバージョン確認
python --version
# 実行バイナリのパス確認
which python
出力結果にLinuxおよびPython 3.11の情報が正確に表示されます。ホストマシンがApple Silicon(Mシリーズ)のmacOSであっても、x86_64のWindows 11であっても、コードはまったく同一のランタイム上で動作します。
リソースの監視とクリーンアップ
コンテナを実行すると、ホストマシンのRAMとCPUリソースを消費します。複数のプロジェクトを同時に開く場合は、ハードウェアリソースの使用状況を把握しておくと安心です。
ホストマシンのターミナルを開き、次のコマンドを実行します。
docker stats
CPU使用率とRAM消費量がリアルタイムで表示されます(基本的なPythonワークスペースの場合、通常消費されるRAMは300MB〜800MB程度です)。
devcontainer.json を編集した場合(ポートの追加や拡張機能の追加など)、手動で一から再構築する必要はありません。F1 キーを押して Dev Containers: Rebuild Container を選択するだけで反映されます。ホストマシン上のソースコードには一切影響を与えません。
一日の作業が終わり、PCのリソースを解放するためにコンテナを停止したい場合は、F1 キーを押して Dev Containers: Reopen Folder Locally を選択します。コンテナは自動的に停止し、ホストOSにメモリが正常に返還されます。

