MAMP&DockerでXdebugを使えるまで。

#動いた環境

2021年10月28日時点
OS:MacOSX BigSur
CPU:M1チップ
エディタ：vscode
MAMP: Version 6.4(1182)

初めに以下の記事の通りに設定しました。

https://dezanari.com/mamp-xdebug/

vscodeのデバッグ再生ボタンを押すとステータスバーはオレンジになりますが、
ブレークポイントを貼ってブラウザでアクセスしても止まりませんでした。

それでググると以下の質問を見つけました。

https://teratail.com/questions/348559

この回答の通り、ポート番号を合わせると無事に止まりました。

MAMPのwebstartからphpinfoを開いて、

xdebug.remote_port とページ内検索するとポート番号が判明します。
![スクリーンショット 2021-10-28 15.39.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201982/fed870d0-ee1d-77f1-d3e9-61a9016bb18a.png)

このポート番号をvscodeのlaunch.jsonに書けば動きました。

```launch.json
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9000 // ここがもともと9003だったので上のポート番号に変更した。
        },
```

#Xdebugのバージョンによる記述の違い
php.ini　に書く

xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=1

はXdebugのバージョンによって
remoteのところがclient になったりするそうですが、今回は上の記事のコピペのままで動きました。

https://www.zu-min.com/archives/1213


# Dockerの場合

MAMPの場合は初めからXdebug本体がインストールされていますが、
Dockerの場合、Xdebugがイメージに入っていないのが普通のため、自分で追記する必要があります。
下の例の #追記　と書いてある２行を apt-get のブロックに書き足します。

その後、自分でphpinfo();の記述があるテストファイルを作ってxdebugの設定が入っているか確認。
あとはMAMPの時と同様、Xdebugのポートをlaunch.jsonに合わせる。

```
FROM php:8.0.11-fpm-buster
LABEL maintainer="ucan-lab <yes@u-can.pro>"
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]

# timezone environment
ENV TZ=UTC \
  # locale
  LANG=en_US.UTF-8 \
  LANGUAGE=en_US:en \
  LC_ALL=en_US.UTF-8 \
  # composer environment
  COMPOSER_ALLOW_SUPERUSER=1 \
  COMPOSER_HOME=/composer

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer

RUN apt-get update && \
  apt-get -y install git libicu-dev libonig-dev libzip-dev unzip locales && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/* && \
  locale-gen en_US.UTF-8 && \
  localedef -f UTF-8 -i en_US en_US.UTF-8 && \
  mkdir /var/run/php-fpm && \
  docker-php-ext-install intl pdo_mysql zip bcmath && \
  pecl install xdebug && \  #追加
  docker-php-ext-enable xdebug && \ #追加
  composer config -g process-timeout 3600 && \
  composer config -g repos.packagist composer https://packagist.org

COPY ./infra/docker/php/php-fpm.d/zzz-www.conf /usr/local/etc/php-fpm.d/zzz-www.conf
COPY ./infra/docker/php/php.ini /usr/local/etc/php/php.ini

WORKDIR /work/backend

# add ll command
RUN echo -e "\n\
alias ll='ls -la --color'\n\
" >> /root/.bashrc


```

php.iniの追記も必要。

```
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8

[Date]
date.timezone = ${TZ}

[mysqlnd]
mysqlnd.collect_memory_statistics = on

[Assertion]
zend.assertions = 1

[mbstring]
mbstring.language = Neutral

[xdebug] #追記
xdebug.mode=debug　#追記
xdebug.client_host=host.docker.internal　#追記
xdebug.client_port=9003　#追記　これがlaunch.jsonに書く xdebugポートになる
xdebug.start_with_request=yes　#追記
```

xdebug.client_host=host.docker.internal　 という記述は例ではなく、この通り丸ごとコピーする。
ポート番号は任意。9003番が使用中の人は書き換える。