PhpStormネタをまとめるときに、Docker環境の設定の話は分離しておきたいと思ったので独立した記事にする。
はじめに
Docker を利用すると、Dockerfileやdocker-compose.ymlを使って、PHPアプリ開発環境の設定を手軽にチームで共有できるため、プロジェクトのコードをgit cloneしたあとにすぐ起動できる環境を用意するのに適している。
またPhpStormは、Dockerを使って用意したPHPアプリ開発環境と連携できる機能がある。
そこで、PhpStormの連携機能や、PHPコード自体を手軽に試せるよう、シンプルなPHP CLI環境とXdebugデバッグできるWebサーバ環境について説明する。
目次
PhpStormと連携するCLI環境を用意する
標準で組み込まれていない拡張が不要であれば、Dockerfile や docker-compose.yml をつくる必要はない。
設定方法
- Preferences を開く
- 左メニューでPHPを選ぶ
- CLI Interpreter 右側の 「...」 を選ぶ
- CLI Interpreterダイアログで 「+」 を選び、「From Docker, Vagrant, VM, Remote... 」を選ぶ
- Configure Remote PHP Interpreterダイアログで、「Docker」を選び、Image name に
php:7.3-alpine
と入力
- OK を3回選びPreferencesを閉じる(Dockerイメージのダウンロードとコンテナ起動が行われる)
設定後、最初の画像のように実行するのは Docker のコマンドで言えば
docker run -it -v `pwd`:/opt/project php:7.3-alpine php /opt/project/phpinfo.php
が近そう。
Xdebugでデバッグできる最低限のWebサーバを用意する
PHP (Docker Official Images) にはXdebugがインストールされていないので、 Dockerfile で、カスタマイズしたコンテナをつくる。(なるべく Unofficial なイメージは避けたい)
また、ホストディレクトリをコンテナにマウントする設定を docker-compose.yml
に書く。(必須ではないが、PhpStormの設定をするときにPath Mappingを自動的に読み込んでくれるので)
設定方法
まずプロジェクトフォルダに以下の Dockerfile
, docker-compose.yml
, php.ini
を保存する
Dockerfile
FROM php:7.3-apache
RUN apt-get update \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
docker-compose.yml
version: "3.7"
services:
web:
build: ./
volumes:
- ./:/var/www/html:cached
- ./php.ini:/usr/local/etc/php/php.ini:cached
working_dir: /var/www/html
ports:
- "8000:80"
php.ini
[xdebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.remote_host = host.docker.internal
設定確認用に phpinfo.php
をつくっておく。
phpinfo.php
<?php
phpinfo();
2行目の行番号右をクリックしてブレークポイントを追加しておく。(赤い丸🔴が表示される)
Terminal を開いて、プロジェクトフォルダに移動し、 docker-compose up -d
と実行すると、Webサーバのコンテナが起動する。
次にPhpStorm右上の「Start Listening for PHP Debug Connections」をクリックする。
🚫のようなアイコンが無くなった状態で http://localhost:8000/phpinfo.php
にアクセスすると以下のようなウインドウが開くので、「Accept」を選ぶ。
先ほど作ったブレークポイントの行背景が青くなったら設定成功。以下のように実行中のグローバル変数が見られるようになっているはず。
Webアプリケーションだし、DBサーバも欲しいとき
Laradock を使ってみるのがよさそう。
環境構築の理解を深めるためにtenkoma/cakephp3-app-skeletonをつくってみた。説明は省略。
目次