Laravel8 + Sail に標準搭載の php v8.0 で Xdebug を有効にする方法

php開発の味方、XdebugがLravel8 Sailでは標準だと使えないので設定します。
コンテナをリビルドするので、時間があるときに行うのが良いかも。

ではでは、行っていきます。

Sailの設定ファイルを書き出し

./vendor/bin/sail artisan sail:publish

[ docker ]ディレクトリがプロジェクト内に作成し、vendorディレクトリ内のSailの設定ファイルがコピーされます。

php.iniを編集

vi ./docker/8.0/php.ini

で、php.iniを開いて、

[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS

# Extensions...
extension=swoole.so

に、以下のように、XDebugの設定を追加します。

[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS

# Extensions...
extension=swoole.so

[XDebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal

次はDockerfileを変更

vi ./docker/8.0/Dockerfile

で開いて、

    && apt-get install -y php8.0-cli php8.0-dev \
       php8.0-pgsql php8.0-sqlite3 php8.0-gd \
       php8.0-curl php8.0-memcached \
       php8.0-imap php8.0-mysql php8.0-mbstring \
       php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
       php8.0-intl php8.0-readline \
       php8.0-msgpack php8.0-igbinary php8.0-ldap \
       php8.0-redis \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \

ここの php8.0-redis の下などに、

    && apt-get install -y php8.0-cli php8.0-dev \
       php8.0-pgsql php8.0-sqlite3 php8.0-gd \
       php8.0-curl php8.0-memcached \
       php8.0-imap php8.0-mysql php8.0-mbstring \
       php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
       php8.0-intl php8.0-readline \
       php8.0-msgpack php8.0-igbinary php8.0-ldap \
       php8.0-redis \
       php-xdebug \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \

php-xdebugを追加します。

docker-compose.ymlも変更

vi ./docker-compose.yml

で、

laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'

この、[ context ]で指定されたフォルダを今回編集したdockerのディレクトリに変更します。

laravel.test:
        build:
            context: ./docker/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'

こんな感じです。

最後にコンテナを再構築

./vendor/bin/sail build --no-cache

ここに少し時間かかりますが、これが終われば。

./vendor/bin/sail shell
sail@b9edddaccbf0:/var/www/html$ php -m | grep xdebug
xdebug

などでモジュールが追加されているのを確認できます。

おまけ

お気づきの方も多いかと思いますが、今回、指定している [ 8.0 ] のディレクトリや記述を [ 7.4 ] に変更してあげれば、すべてが、php v7.4 になります。

Dockerfile 内のタイムゾーンを、

# ENV TZ=UTC
ENV TZ='Asia/Tokyo'

[ Asia/Tokyo ]に変更してコンテナをビルドすることもできますよ。