PHPStrom+CakePHP4+Docker+xdebugでステップ実行環境を構築する

# やりたいこと
CakePHP4で開発しているWebアプリケーションをステップ実行したい。

# 環境
* MacBookPro(macOSCatalina10.15.5)
* PHPStorm2020.2
* docker desktop2.2.0.3
* cakephp4.1.2


# 設定
## Docker関連
php:7.4-apacheのイメージにphp.iniが配置されていないのでローカルで作ってdocker-composeでマウントする。

```./Docker/php/php.ini
[xdebug]
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.remote_autostart=1
; host.docker.internalはdockerのhostマシンのIPを解決
xdebug.remote_host=host.docker.internal
; デフォルトは９０００だが参考がどちらも9001だったので。
xdebug.remote_port=9001
```

作ったphp.iniをマウントする。
`./Docker/php/php.ini:/usr/local/etc/php/php.ini`の部分を元々のファイルに追記。

```./docker-compose.yml
version: '3'
services:
  web:
    container_name: xxx
    build:
      context: .
      dockerfile: ./Docker/php/Dockerfile
    volumes:
      - .:/var/www/html:cached
      - ./Docker/php/php.ini:/usr/local/etc/php/php.ini
    environment:
      - APP_DEFAULT_LOCALE=ja_JP
      - APP_DEFAULT_TIMEZONE=Asia/Tokyo
      - DATABASE_HOST=xxx
      - DATABASE_USER=xxx
      - DATABASE_PASS=xxx
      - DATABASE_NAME=xxx
      - DATABASE_TEST_URL=xxx
    command: bash -c "sh docker-init-setup.sh && apache2-foreground"
    ports:
      - '5001:80'
```

Dockerfileにxdebugのインストールを追記。
`RUN pecl install xdebug \
    && docker-php-ext-enable xdebug`の部分。
peclって何？となる方は[こちら](http://dqn.sakusakutto.jp/2015/07/php_extension_pecl_phpize.html)を参考

```
FROM php:7.4-apache

ENV APACHE_DOCUMENT_ROOT /var/www/html/app/webroot
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
&& sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
&& a2enmod rewrite

RUN apt-get update && apt-get install -y \
    libicu-dev \
    zip \ 
    unzip \
&& docker-php-ext-install -j$(nproc) intl \
&& docker-php-ext-install -j$(nproc) pdo_mysql

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

COPY . /var/www/html

ENV COMPOSER_ALLOW_SUPERUSER 1
COPY --from=composer /usr/bin/composer /usr/bin/composer

RUN cd ./app && \
    composer install --no-dev -o
```

上記を設定後に、以下を実行してxdebugを設定したコンテナを起動する。

```
docker-compose down
docker-compose up -d
```

## PHPStrom
`Preferences>Languages&Frameworks>PHP>Debug`のポートを変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/c8554c64-59bb-b287-dd3f-73678c4ee8b9.png)


`Preferences>Languages&Frameworks>PHP>Servers`を以下の設定にする。
Nameとhostは適当に。ローカルのappディレクトリとDocker上のappディレクトリをマッピングしている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/8ab839b0-e327-7f99-ac38-37b7d1e49d0e.png)

`edit configurations`から以下の設定を追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/479398b1-564a-4f15-1dbc-5288b23ac772.png)

虫ボタンを実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/9543f39e-dae7-761c-7482-e15f94c32522.png)

## 動作確認
適当なところにデバッグポインタを設定する。（行番号あたりをクリック）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/c5227096-ae0b-061c-6ad1-18fd9afc44ff.png)

通常通りのURLにブラウザでアクセスするとPHPStormの該当の箇所が選択された最前面に出てくる。（`xdebug.file_link_format = phpstorm://open?%f@%l`が必要かなと思ったけどなくて良さそう。）

http://localhost:5001/xxx



# 参考
以下でxdebugについて学んだ。
https://qiita.com/castaneai/items/d5fdf577a348012ed8af

以下でpeclについて学んだ。
http://dqn.sakusakutto.jp/2015/07/php_extension_pecl_phpize.html

以下で具体的な設定方法を学んだ。
https://qiita.com/gigosa/items/90431be7a6a79db78480
https://qiita.com/haruna-nagayoshi/items/99fa041e884c2c3975d2

大変参考になりました。
ありがとうございます。