DockerとDev Containerで始める!誰でも再現可能な開発環境構築
新しいプロジェクトを始めるたびに必要なツールのインストールやバージョン管理で時間を溶かしていませんか?「自分のPCでは動いたのに、チームメンバーの環境ではエラーが出る…」といった経験に頭を抱えている方も多いかもしれません。プログラミング学習の初期段階で、複雑な環境構築につまずいてしまい、モチベーションが下がってしまうのは本当にもったいないことです。この記事では、そんな開発環境にまつわる悩みを一掃する Docker と Dev Container という技術を、実践的な手順と共に紹介します。誰でも、どんなPCでも、数分で同じ開発環境を再現できる魔法のような方法を、今日からあなたの武器にしましょう!
開発環境の悩みを解決!DockerとDevContainerがなぜ必要なのか?
プログラミングを行うためには、プログラミング言語の実行環境やデータベース、各種ライブラリなど、様々なソフトウェアを自分のPCにインストールする必要があります。これを「開発環境の構築」と呼びますが、ここには多くの落とし穴が潜んでいます。
例えば、プロジェクトAではPython 3.12を、プロジェクトBではPython 3.10を使いたい場合、バージョンを切り替える仕組みが必要になります。また、macOSとWindowsではインストール手順が微妙に異なり、それが原因でエラーが発生することも少なくありません。「私のPCでは動くのに…」というフレーズは、開発現場で頻繁に聞かれる悲しい合言葉です。これらの問題は、開発者のPC(ローカル環境)がそれぞれ微妙に異なる「属人化」した状態になっていることが根本的な原因です。
この問題を解決するのが、Docker と Dev Container です。Dockerは、アプリケーションの実行に必要な環境を「コンテナ」という独立した空間にまるごとパッケージ化する技術です。そしてVS CodeのDev Container機能は、このDockerコンテナを開発環境として直接利用できるようにします。これにより、OSや個人の設定に依存しない、誰でも同じように再現できるクリーンな開発環境をコードで管理できるようになるのです。
Dockerの基本を理解しよう:コンテナ技術の「なぜ?」と「何?」
Dev Containerを理解する上で、その基盤技術であるDockerの基本を知っておくことは非常に重要です。しかし、すべてを完璧に理解する必要はありません。まずは「なぜ便利なのか」というコンセプトを掴みましょう。
Dockerは、「コンテナ型仮想化」と呼ばれる技術を用いて、アプリケーションの実行環境を構築します。よく比較されるのが、OS全体をまるごと仮想化するVMwareやVirtualBoxのような「仮想マシン」です。仮想マシンは起動が遅く、多くのメモリやディスク容量を消費しますが、DockerコンテナはホストOSのカーネルを共有するため、非常に軽量で高速に動作するのが特徴です。
Dockerの世界には、3つの重要なキーワードがあります。
- Dockerfile: コンテナの設計図です。「どのOSをベースにするか」「どのソフトウェアをインストールするか」「どのコマンドを実行するか」といった、環境構築の手順が書かれたテキストファイルです。
- Docker Image:
Dockerfileを元に作成される、コンテナのテンプレートです。このイメージさえあれば、誰でも同じ環境を再現できます。一度作れば変更されない、読み取り専用のパッケージと考えると分かりやすいでしょう。 - Docker Container: Dockerイメージを実行した状態のものです。イメージから生成された、実際にアプリケーションが動作する独立した空間です。一つのイメージから、複数のコンテナを起動することもできます。
この仕組みによって、「Dockerfileという設計図さえ共有すれば、誰でも同じコンテナ(実行環境)を起動できる」 というのがDockerの強力な点です。
VS Code Dev Containersで開発環境をコード化するメリット
Dockerだけでも開発環境の再現性は高まりますが、日々の開発で使うには少し手間がかかります。そこで登場するのが、Microsoftが提供するVisual Studio Code(VS Code)の拡張機能 「Dev Containers」 です。これは、DockerのパワーをVS Codeに統合し、開発体験を劇的に向上させてくれるツールです。
Dev Containersを使う最大のメリットは、開発環境を完全にコードとして管理できる 点にあります。プロジェクトのルートに .devcontainer というフォルダを作成し、その中に設定ファイル (devcontainer.json) を置くだけ。これだけで、以下のようなメリットが得られます。
- ワンクリックで環境構築:
git cloneでプロジェクトをコピーし、VS Codeで開くと「コンテナで再度開きますか?」と尋ねられます。「はい」と答えるだけで、Dockerイメージのビルドからコンテナの起動、VS Codeとの接続までが自動的に行われます。 - VS Codeの設定も共有:
devcontainer.jsonファイルには、そのプロジェクトで推奨されるVS Codeの拡張機能や設定(インデントのスタイル、フォーマッターなど)を記述できます。これにより、チームメンバー全員が同じ開発ツールと設定でコーディングできるようになり、コードスタイルも統一しやすくなります。 - ローカル環境を汚さない: すべてのツールはコンテナ内にインストールされるため、自分のPCに直接PythonやNode.jsなどをインストールする必要がありません。プロジェクトが終わればコンテナを削除するだけで、PCはクリーンな状態を保てます。
もう「環境構築手順書.md」を延々とメンテナンスする必要はありません。開発環境そのものが、Gitでバージョン管理される「コード」になるのです。
【実践】簡単3ステップ!Dev ContainerでPython開発環境を構築しよう
それでは、実際にDev Containerを使ってPythonのWebフレームワークであるFastAPIを使った開発環境を構築してみましょう。驚くほど簡単なので、ぜひ一緒に手を動かしてみてください。
前提条件
- Docker Desktop がインストールされていること
- Visual Studio Code がインストールされていること
- VS Codeの拡張機能「Dev Containers」(
ms-vscode-remote.remote-containers)がインストールされていること
1. プロジェクトフォルダの準備
まず、プロジェクト用の空のフォルダを作成し、VS Codeで開きます。ターミナルで以下のコマンドを実行してください。
mkdir fastapi-dev-template
cd fastapi-dev-template
code .
2. Dev Container構成ファイルの追加
次に、Dev Containerの心臓部である構成ファイルを追加します。
- VS Codeでコマンドパレットを開きます (
Cmd+Shift+PもしくはCtrl+Shift+P)。 Dev Containers: Add Dev Container Configuration Files...と入力し、表示されたコマンドを選択します。- テンプレートの一覧が表示されるので、「Python 3 & FastAPI」を検索して選択します。
- ベースにするPythonのバージョンを選択します(ここでは最新の安定版でOKです)。
- 追加する機能 (Features) を聞かれますが、今回は何も選択せず「OK」をクリックします。
すると、プロジェクト内に .devcontainer フォルダが作成され、その中に devcontainer.json と Dockerfile が自動で生成されます。これで設計図は完成です!
3. コンテナでフォルダーを再度開く
ファイルが生成されると、VS Codeの右下に「Folder contains a Dev Container configuration file. Reopen to develop in a container.」という通知が表示されます。この通知の 「Reopen in Container」 ボタンをクリックしてください。
クリックすると、VS Codeが自動的にDockerイメージのビルドを開始します(初回は少し時間がかかります)。ビルドが完了すると、VS Codeウィンドウがリロードされ、左下の緑色の部分に「Dev Container: Python 3 & FastAPI」のように表示が変わります。これで、あなたはもうコンテナの中で作業している状態です!
VS Code内で新しいターミナルを開き、以下のコマンドを打ってみましょう。
python --version
# => Python 3.12.3 のように、設定したバージョンが表示される
# FastAPIのサンプルアプリを起動
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
コンテナ内でWebサーバーが起動すると、VS Codeが自動でポートフォワーディング(PCからコンテナへの通信を中継)してくれます。ブラウザで http://localhost:8000 にアクセスしてみてください。FastAPIのサンプルページが表示されれば、環境構築は成功です!
チーム開発で役立つ!Dev Containerの活用とカスタマイズ術
基本的な環境ができたところで、チーム開発でさらに便利になるカスタマイズ方法をいくつか紹介します。これらの設定はすべて devcontainer.json ファイルに記述します。
VS Code拡張機能の自動インストール
チームで使うべき拡張機能を定義しておけば、メンバー全員のVS Codeに自動でインストールされます。customizations.vscode.extensions に拡張機能のIDを追加しましょう。
// .devcontainer/devcontainer.json
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.black-formatter",
"charliermarsh.ruff"
]
}
}
postCreateCommand でセットアップを自動化
コンテナが初めて作成された後に、依存パッケージのインストールなどの初期設定コマンドを自動で実行させることができます。これにより、git clone してコンテナを開くだけで、すぐにコーディングを開始できる状態になります。
// .devcontainer/devcontainer.json
"postCreateCommand": "pip install -r requirements.txt"
この設定を追加する前に、requirements.txt ファイルを作成しておくのを忘れないでください。
環境変数の設定
開発中にのみ使用するAPIキーやデータベースの接続情報などは、containerEnv を使って環境変数としてコンテナに渡すのが安全です。
// .devcontainer/devcontainer.json
"containerEnv": {
"DATABASE_URL": "postgresql://user:password@db:5432/mydatabase"
}
これらのカスタマイズを組み合わせることで、新メンバーがチームに参加した際のオンボーディングコストを劇的に削減できます。もう「まずこれをインストールして、次にこの設定をして…」という口頭での説明は必要ありません。
DockerとDev Containerでもっと快適なプログラミングライフを!
今回は、DockerとDev Containerを使って、誰でも再現可能な開発環境を構築する方法を紹介しました。環境構築はプログラミングの本質ではありませんが、避けては通れない作業です。この作業を可能な限り自動化し、コードで管理することで、私たちはより創造的で重要なタスクに集中できるようになります。
「自分のPCでは動く」という悩みから解放され、チーム全員が同じ土台で開発を進められる快適さは、一度味わうと元には戻れません。プログラミング学習の初心者から、チーム開発に携わる中級者まで、Dev Containerはすべての開発者にとって強力な味方です。まずは今日紹介した簡単な手順で、あなたの次のプロジェクトにDev Containerを導入してみてはいかがでしょうか。きっと、あなたのプログラミングライフがもっと快適になるはずです。


