まだWAMP? Dockerはもうカウンターで待ってるぞ
まさか今でもWAMPを起動してるの?
WAMP、XAMPP、MAMPは2010年にPHPをいじっていた頃は役立ったけど、今や炭酸の抜けたドリンクしか出ないダイナー同然。ローカルで本番そっくりのスタックを再現したい?設定をバージョン管理したい?3つの案件を抱えながらポートのイス取りゲームをやめたい?Dockerは全部解決済み、その間もApacheインストーラーは真っ赤に点滅してたけどね。
WAMP/XAMPP/MAMPの地獄ポイント
- 環境が凍結: 各バンドルがPHP・MySQL・Apacheのバージョンを強制。PHP 8.3を試したい?他の案件が爆発する準備をどうぞ。
- 共有不能な設定:
.iniをSlackで配る?かわいい発想だけど、チームにもCIにも役立たない。 - 隔離ゼロ: Apacheモジュールを1つ有効化しただけで全部のプロジェクトに漏れ出す。ゴーストバグいらっしゃい。
Dockerが全部ひっくり返す
- YAMLで記述するスタック: バージョン管理された
compose.ymlが、どのPCやCIでもワンコマンドで同じ環境を再構築。 - サービス単位で分離: 各コンテナがPHP、Redis、PostgreSQLなどの正確なバージョンを持参。混ぜて良し、捨てて良し。
- 観測可能性が標準装備: ログ、メトリクス、ヘルスチェック…
mysqldが生きてるか勘に頼る時代は終了。 - 可搬性: Linux、macOS、Windows、ARM、x86… コンテナを動かせるカーネルならDockerは文句なし。
古びたdocker-compose.ymlより現代的なCompose
Docker公式は言い切ってる:ファイル名はcompose.yml、versionフィールド不要、変数は.env、サービスは宣言的に。はい、コピペで動くスニペットはこちら。
yaml
覚えておくこと:
nameのおかげでdocker compose lsやログが読みやすくなる。pull_policy: alwaysなら、スタック更新時に化石イメージを掴まずに済む。depends_onとcondition: service_healthyで、FrankenPHPを起動する前にMariaDBの準備完了を待てる。- 一番下で宣言したボリュームが、再デプロイ間もMySQLデータを守る。
FrankenPHPは余裕でApacheを置き換える
FrankenPHPはモダンSAPIとHTTPワーカー、Symfony/Laravelのネイティブ対応をまとめて提供。わざわざコンテナ内にApacheやNginxを抱える理由、ある?
- パフォーマンス: 常駐ワーカーモード、予熱済みOPCache、HTTP/2そしてまもなくHTTP/3。
- シンプルさ:
.confの群れは不要。/appにコードを置いて80番を開けるだけ。 - 開発統合:
symfony serve抜きでもホットリロード。FrankenPHPがループを面倒見てくれる。
「俺のマシンでは動く」を捨てたCI/CD
docker compose run --rm lintでコードを検査し、そのまま同じスタックを本番にデプロイ。環境差異も3306番ポート争奪戦も終了。
シニカルだけど正直な締め
痛みが好きなら、緑のWAMPアイコンを撫で続けてもいい。でもスピード納品、インフラのバージョン管理、そして(Redis + Meilisearch + FrankenPHP + PostgreSQL)の変態セットを3行で立ち上げたいなら、Dockerはもう準備万端。化石インストーラーを捨ててcompose.ymlをコミットし、5分オンボーディングの世界へどうぞ。