Featured image of post Dockerでローカル開発環境を整える方法Featured image of post Dockerでローカル開発環境を整える方法

Dockerでローカル開発環境を整える方法

Dockerでローカル開発環境を整える方法を紹介。環境差分を減らして作業しやすくする考え方をまとめます。

Dockerでローカル開発環境を整える方法

「自分のマシンでは動くのに、他のメンバーの環境だと動かない」という経験は誰にでもあるでしょう。Docker を使えば、OS やミドルウェアのバージョン差異に悩まされない、再現性の高い開発環境を構築できます。本記事では、Docker を使ったローカル開発環境のセットアップ手順を解説します。

最低限の Docker 知識

Docker はアプリケーションとその実行に必要な依存関係を「コンテナ」という単位でパッケージ化します。開発でよく使う概念は以下の3つです。

  • Dockerfile: コンテナの設計図。どのベースイメージを使い、何をインストールするかを記述。
  • docker-compose.yml: 複数のコンテナ(Webサーバー、DB、キャッシュなど)を一括で管理する設定ファイル。
  • ボリュームマウント: コンテナからホストのファイルを参照する仕組み。ホットリロードに必須。

docker-compose でマルチサービス構成

フロントエンド + バックエンド + データベースのような構成は、docker-compose.yml 1つで定義できます。

version: "3.9"
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    command: npm run dev

  backend:
    build: ./backend
    ports:
      - "8000:8000"
    volumes:
      - ./backend:/app
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/app

  db:
    image: postgres:16
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: app
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

各セクションのポイント

  • volumes(ボリュームマウント): ./frontend:/app のようにホストのソースコードをコンテナ内にマウントします。ホストでファイルを変更するとコンテナ内にも即座に反映されるため、ホットリロードが機能します。
  • /app/node_modules の匿名ボリューム: node_modules だけはホストと同期しないようにします。Windows と Linux でネイティブモジュールの互換性問題が起きるのを防ぐための定石です。
  • environment: 環境変数で設定を注入。DB の接続情報などはここで渡します。

Dockerfile の開発向けベストプラクティス

開発用の Dockerfile は、本番用とは別に用意するのが一般的です。

# Dockerfile.dev
FROM node:20-alpine

WORKDIR /app

# 依存関係のインストールは先に行う(レイヤーキャッシュを効かせるため)
COPY package*.json ./
RUN npm install

# ソースコードはボリュームマウントでホットリロードするため COPY 不要
CMD ["npm", "run", "dev"]

ポイントは、COPY でソースコードを入れ込まないことです。代わりに docker-compose.ymlvolumes でホストのディレクトリをマウントします。こうすれば、コンテナを再ビルドしなくてもコードの変更が即座に反映されます。

チームでの一貫性を保つ

Docker を導入する最大のメリットは、「全員が同じ環境で開発できる」ことです。以下のルールをチームで決めておくとトラブルが減ります。

  • docker-compose.ymlDockerfile は Git で管理する
  • .env ファイル(秘密情報)は .gitignore に追加し、サンプルとして .env.example をリポジトリに含める
  • Makefilenpm scriptsdocker compose up のラッパーコマンドを用意しておくと、Docker に不慣れなメンバーも迷わず起動できる
# Makefile
up:
	docker compose up -d

down:
	docker compose down

build:
	docker compose build

logs:
	docker compose logs -f

よくある注意点

  • パフォーマンス: Windows(特に WSL2 非利用時)ではファイルマウントの速度が遅くなりがちです。WSL2 上で Docker Desktop を動かすか、mutagen などの同期ツールを検討しましょう。
  • ポート競合: 複数プロジェクトで同じポート(例:3000)を使う場合は、docker-compose.ymlports でホスト側のポートを変更します(例:"3001:3000")。
  • ボリュームのクリーンアップ: 長期間開発していると不要なボリュームが溜まります。docker compose down -v で削除できます。

まとめ

Docker をローカル開発に導入する最大の価値は、「環境の再現性」と「チーム内の一貫性」です。docker-compose で複数サービスをまとめて管理し、ボリュームマウントでホットリロードを維持すれば、開発体験を損なわずに恩恵を受けられます。まずは小さなプロジェクトで試しながら、チームの開発フローに取り入れてみてください。