Laravel8 + SailでのXdebugが止まらなくなった件 (悲しみ)

この記事でまとめたXdebugですが、Laravelのバージョン8.6を使ってみたところ止まらなくなっている。。

調べてみたら、あれ?デフォルトのDockerfile内にこれまではなかった、xdebugのモジュールが標準で、php8.0-xdebug、php7.4-xdebugなどが組み込まれている?

なにやら、php.iniをいじらなくても、

PHP 8.0.11 (cli) (built: Sep 23 2021 21:26:42) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.11, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.11, Copyright (c), by Zend Technologies
    with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans

xdebug3が動いている?(笑)しかも、php.iniを編集しても上手く反映されない模様。

docker-compose.yml を見てみると、怪しい設定を発見。

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
        build:
            context: ./docker/7.4
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html'

なにかしら、XDEBUG_MODE関連の情報をenvから読み込んできてる。

            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'

ドキュメント内にも項目を見つけました。

LaravelSailのDockerの設定には、PHP用の人気で強力なデバッガであるXdebugをサポートしています。XDebugを有効にするには、Xdebugを設定するために、アプリケーションの.envファイルに変数を追加する必要があります。XDebugを有効にするには、Sailを開始する前に適切なモードを設定する必要があります。

https://readouble.com/laravel/8.x/ja/sail.html

どのマイナーバージョンで追加されたんだろ。。

で、.envファイルに、

SAIL_XDEBUG_MODE=develop,debug

追記しましょう。

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

これでコンテナを再構築し、

./vendor/bin/sail up -d

などで起動すると、ドキュメント上では、ブレークポイントで止まるようになるとのことですが……ブラウザ経由のデバッグだとこれだけでは駄目。プラグインなどを入れるか。オプションを追加してアクセスするか。php debugでcliを起動するか。

結局面倒なので、

[xdebug]
xdebug.start_with_request=yes

いつもどおりphp.iniに追記し常時デバッガーが起動するようにしておきました。うーん。

過去記事も修正しておかねば……