Laravel

【Laravel×Docker】XdebugでLaravelコンテナをデバッグ実行する方法

環境

  • Docker 20.10.5
  • Laravel 8.42.1
  • PHP 8.0.6
  • Xdebug 3.0.4

前提

  • vscode使用
  • 拡張機能「PHP Debug」導入済み
  • Xdebug以外の環境は構築済み

手順

  1. Xdebugの導入
  2. php.iniの編集
  3. launch.jsonの編集
  4. 動作確認

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"
    }
  },
]

portphp.inixdebug.client_portに合わせる。

pathMappingsはそれぞれの環境に合わせて書き換えてください。

"pathMappings": {
    "{{ 先程のDokcerfileのWORKDIR }}": "{{ laravelプロジェクトのルートパス }}"
}

動作確認

先程追記したconfigurationのnameに対応する構成を選択して実行。
今回でいうと「Listen for Xdebug」
※新しく構成を追加した場合は注意!

あとはブラウザの方で何かしらの操作をして、ブレークポイントで止まることを確認できたら完了です。

補足

launch.jsonを編集したときはXdebugの再起動、
Dockerfileを編集したときはdocker compose up -d --buildを忘れずに。

-Laravel