第50回: Dockerでのローカル環境構築 — 「自分の環境でだけ動く」問題を根絶する

章: 第6章: パフォーマンスとインフラ

「自分のMacでは動くのに、別のメンバーの環境では動かない」で時間を消耗していませんか?

PHPのバージョン違い・MySQLの設定差・拡張モジュールの有無——こうした環境差異がバグの温床になります。Dockerを使えば、コンテナで環境を定義することで、チームや本番との差異をなくせます。

Dockerなしで開発環境を共有すると何が起きるか

「自分の環境では再現しない」バグに時間を使い、新メンバーの環境構築に何時間もかかります。docker compose up -d 1コマンドで全員が同じ環境を起動できるようになれば、この問題は根本解決できます。

環境構築方法の比較

方法 環境の一致 構築時間 柔軟性 推奨場面
各自の手動インストール バラつきあり 長い 高い 個人開発・小規模
Vagrant ほぼ一致 長い 中程度 VMで分離したい場合
Docker Compose 完全一致 短い 高い チーム開発・本番との一致
Laravel Sail 完全一致(Laravel専用) 短い 中程度 Laravelプロジェクト

チェックポイント: docker-compose.yml をバージョン管理に含め、チームで共有しましょう。.env ファイルとのセットで管理することで、環境変数の差異もなくせます。また volumes でソースコードをマウントすれば、コンテナ再起動なしにコード変更が反映されます。

コードサンプル


# docker-compose.yml(Laravelの基本構成)
services:
  app:
    build: .
    ports: ["8080:80"]
    volumes: [".:/var/www/html"]
    depends_on: [db]
  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: app
      MYSQL_ROOT_PASSWORD: secret
    volumes: ["db_data:/var/lib/mysql"]
  redis:
    image: redis:7-alpine
volumes:
  db_data:
# 起動: docker compose up -d

まとめ & 次のステップ

  • Dockerで環境を定義することで、チーム全員が同じ環境で開発できます
  • docker-compose.yml はバージョン管理に含め、README に起動手順を記載しましょう
  • volumes でソースコードをマウントし、ホットリロードを実現しましょう
  • 本番環境のDockerfileと開発用を分けてセキュリティと利便性を両立させましょう
  • depends_on でサービス起動順を制御し、DB準備前のアプリ起動を防ぎましょう

次回は .envによる環境変数管理 を学びます。設定値をコードから切り離して安全に管理する方法を整理しましょう。

Related Articles