概要
PHP + MySQL の環境を docker-compose で構築し、IntelliJ上でdockerに接続してPHPUnitをする手順を記載してます。
Docker上に構築した実行環境を使うようにすることで、いちいちローカルにPHPやMySQLをインストールしなくてもよくなるようになり、ローカル環境の汚染を防ぐことができ、「案件によって使うMySQLのバージョンが異なるせいで毎回再インストールしないといけないんだよぉ」みたいな煩わしさから解放されます。
かつ、ローカルに環境を構築していた時と同様にIDEからサクっとテストを走らせることができるため、なんかハッピーなアレになれます。多分。
実行環境
- Windows 10 64bit
- IntelliJ Ultimate Edition 2021.1
- Docker Desktop v20.10.5
今回はWindowsで構築したけど、Macでも普通にできるはず。
前提
- DockerやIntelliJ はインストール済
IntelliJ のプラグインのインストール
以下をインストールしておきます。
- PHP
- PHP Docker
- PHP Remote Interpreter
- PHPUnit Enhancement
- Docker
とりあえずトライ&エラーで入れたプラグインなんで、いくつか不要なものもあるのかも。
Dockerfileなどの作成
以下のフォルダ構成にします。
<Root>
・ local // Docker環境用
├ php
│ ├ php.ini
│ └ Dockerfile
└ mysql // 最終的にデータファイルが入る
・ src // ソースファイル
・ docker-compose.yml
FROM php:7.2-fpm
RUN apt-get update
RUN apt-get install -y vim git zip unzip
RUN docker-php-ext-install pdo_mysql
COPY --from=composer /usr/bin/composer /usr/bin/composer
COPY php.ini /usr/local/etc/php/
date.timezone = "Asia/Tokyo"
version: '3'
services:
# Webサーバーとして動かす場合(今回はユニットテスト書くのが目的なのでこの部分は割愛)
# nginx:
# image: nginx:latest
# ports:
# - 8080:80
# volumes:
# - ./local/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
# - ./src:/var/www/html
# depends_on:
# - php
php:
build: ./local/php
volumes:
- ./src:/var/www/html
depends_on:
- db
db:
image: mysql:5.7
ports:
- 13306:3306
volumes:
- ./local/mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
container_name: mysqldb
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- 8888:80
depends_on:
- db
これらのイメージ&コンテナを作成しておき、 phpにCLIで入って、 composer install
をやっておきます。
IntelliJの設定
Dockerの設定
File -> Settings にてSettingsダイアログを出し、 Build, Execution, Deployment -> Dockerを選択します。
ひとつDockerのサービスを作成しておけばOKです。
PHPの設定
Languages & Frameworks -> PHP を選択し、CLI Interpreter の「...」ボタンを押下
CLI Interpreters から設定を作成し、「From Docker, Vagrant, VM, WSL, Remote...」を選択
Docker Composeを選択し、実行サービス(今回の例だとphp)を選択します。
最初の設定のは不要な場合は削除しちゃいます。
PHPUnitの設定
Languages & Frameworks -> PHP -> Test Frameworks を選択し、CLI Interpreter に、上記で作成したインタプリタを選択します。
テストの設定
最後に、 実行の設定を行います。
Run / Debug Configurationsから、PHPUnitのを作成
あとはいつも通りの感じでテストを起動すると、IntelliJ は自動的にDocker上の実行環境を使ってテストを行い、MySQLにも接続するテストが実行できます。
まとめ
いい時代になりましたねぇ。Docker便利。
そのうちGoやJavaやFlutterとかも同様のやり方でできないか調べたい