この記事でまとめた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を設定するために、アプリケーションの
https://readouble.com/laravel/8.x/ja/sail.html.env
ファイルに変数を追加する必要があります。XDebugを有効にするには、Sailを開始する前に適切なモードを設定する必要があります。
どのマイナーバージョンで追加されたんだろ。。
で、.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に追記し常時デバッガーが起動するようにしておきました。うーん。
過去記事も修正しておかねば……