環境
- Docker 20.10.5
- Laravel 8.42.1
- PHP 8.0.6
- Xdebug 3.0.4
前提
- vscode使用
- 拡張機能「PHP Debug」導入済み
- Xdebug以外の環境は構築済み
手順
- Xdebugの導入
- php.iniの編集
- launch.jsonの編集
- 動作確認
Xdebugの導入
phpのDockerfileに以下のように記述
FROM php:8.0-fpm-buster
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
ENV 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 unzip libzip-dev libicu-dev libonig-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-install intl pdo_mysql zip bcmath
RUN pecl install xdebug \ //↑のRUNとまとめるとエラーが出るので分割
&& docker-php-ext-enable xdebug
COPY php.ini /usr/local/etc/php/php.ini
WORKDIR /work
これをビルドすればXdebugの導入は完了です。
docker comopse up -d --build
php.iniの編集
下記を追記。
[xdebug]
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.start_with_request=yes
xdebug.mode=debug
xdebug.client_port
はphpinfoの内容に合わせたほうが無難だと思います。(近いポート番号で試しましたができたりできなかったりしたので。。。)
launch.jsonの編集
下記を追記。
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003, //php.ini のxdebug.client_portに合わせる
"pathMappings": {
"/work": "${workspaceRoot}/backend"
}
},
]
port
はphp.ini
のxdebug.client_port
に合わせる。
pathMappings
はそれぞれの環境に合わせて書き換えてください。
"pathMappings": {
"{{ 先程のDokcerfileのWORKDIR }}": "{{ laravelプロジェクトのルートパス }}"
}
動作確認
先程追記したconfigurationのname
に対応する構成を選択して実行。
今回でいうと「Listen for Xdebug」
※新しく構成を追加した場合は注意!
あとはブラウザの方で何かしらの操作をして、ブレークポイントで止まることを確認できたら完了です。
補足
launch.jsonを編集したときはXdebugの再起動、
Dockerfileを編集したときはdocker compose up -d --build
を忘れずに。