こもろぐ @tenkoma

What We Find Changes Who We Become -- Peter Morville著『アンビエント・ファインダビリティ 』

PhpStormと連携する必要最小限のDocker環境を作る

PhpStormネタをまとめるときに、Docker環境の設定の話は分離しておきたいと思ったので独立した記事にする。

はじめに

Docker を利用すると、Dockerfileやdocker-compose.ymlを使って、PHPアプリ開発環境の設定を手軽にチームで共有できるため、プロジェクトのコードをgit cloneしたあとにすぐ起動できる環境を用意するのに適している。 またPhpStormは、Dockerを使って用意したPHPアプリ開発環境と連携できる機能がある。 そこで、PhpStormの連携機能や、PHPコード自体を手軽に試せるよう、シンプルなPHP CLI環境とXdebugデバッグできるWebサーバ環境について説明する。

目次

PhpStormと連携するCLI環境を用意する

f:id:tenkoma:20190324015022p:plain
php:7.3-alpine でPHPスクリプトを実行する

標準で組み込まれていない拡張が不要であれば、Dockerfile や docker-compose.yml をつくる必要はない。

設定方法

f:id:tenkoma:20190323180544p:plain
DockerでPHP実行環境を用意する

  1. Preferences を開く
  2. 左メニューでPHPを選ぶ
  3. CLI Interpreter 右側の 「...」 を選ぶ
  4. CLI Interpreterダイアログで 「+」 を選び、「From Docker, Vagrant, VM, Remote... 」を選ぶ
  5. Configure Remote PHP Interpreterダイアログで、「Docker」を選び、Image name に php:7.3-alpine と入力
  6. OK を3回選びPreferencesを閉じる(Dockerイメージのダウンロードとコンテナ起動が行われる)

設定後、最初の画像のように実行するのは Docker のコマンドで言えば

docker run -it -v `pwd`:/opt/project php:7.3-alpine php /opt/project/phpinfo.php

が近そう。

Xdebugでデバッグできる最低限のWebサーバを用意する

f:id:tenkoma:20190324021419p:plain
XdebugデバッグできるWebサーバを含むDocker環境

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」をクリックする。

f:id:tenkoma:20190323194352p:plain
Start Listening for PHP Debug Connectionsというボタン

🚫のようなアイコンが無くなった状態で http://localhost:8000/phpinfo.php にアクセスすると以下のようなウインドウが開くので、「Accept」を選ぶ。

f:id:tenkoma:20190324022237p:plain
Incoming Connection From Xdebugウインドウ

先ほど作ったブレークポイントの行背景が青くなったら設定成功。以下のように実行中のグローバル変数が見られるようになっているはず。

f:id:tenkoma:20190324021419p:plain
XdebugデバッグできるWebサーバを含むDocker環境

Webアプリケーションだし、DBサーバも欲しいとき

Laradock を使ってみるのがよさそう。

環境構築の理解を深めるためにtenkoma/cakephp3-app-skeletonをつくってみた。説明は省略。

目次