こんにちは。株式会社リンクネット ソリューション事業部の吉川です。
弊社のWeb開発で使用頻度が高いのがLaravelです。
最近のLaravel Sailでは最初からXdebugが入っており、簡単に使えるようになっています。
すごく便利で、ぜひお薦めしたいので、Xdebugでステップ実行するための設定をまとめようと思います。
OS: windows11
エディタ: Visual Studio Code(以下vscode)
ブラウザ: GoogleChrome
$ sail artisan -V
Laravel Framework 9.52.0
$ sail php -v
PHP 8.2.3 (cli) (built: Feb 14 2023 16:58:12) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.3, Copyright (c) Zend Technologies
with Zend OPcache v8.2.3, Copyright (c), by Zend Technologies
with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
ブラウザとvscodeに拡張機能をインストールします。
docker-compose.ymlと.envに追記します。
PHP_IDE_CONFIG
はコマンドラインから実行するプログラムのデバッグに使用します。
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
+ PHP_IDE_CONFIG: serverName=0.0.0.0
volumes:
- '.:/var/www/html'
APP_DEBUG=true
APP_URL=http://localhost
+SAIL_XDEBUG_MODE=debug,develop
環境変数を読み直すためdocker環境を再起動します。
$ sail down
$ sail up -d
次に、vscodeのデバッグ構成を作成します。
サイドメニューの「実行とデバッグ」を開き、「launch.json ファイルを作成します」をクリックします。
拡張機能のPHP Debugが正しくインストールされていれば、デバッガーの選択リストにPHPがあるので選択します。
生成されたlaunch.jsonのうち、Xdebugからリッスンする設定の部分を編集します。
ここで、hostname
の値はdocker-compose.ymlに記載したPHP_IDE_CONFIG
の値と同じにする必要があります。
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
- "port": 9003
+ "port": 9003,
+ "hostname": "0.0.0.0",
+ "pathMappings": {
+ "/var/www/html": "${workspaceFolder}"
+ }
},
以上で一通りの設定は完了です。
Web画面のステップ実行とコマンドラインプログラムのステップ実行で操作が異なります。
いずれにしても、まずはデバッグを開始します。
デバッグ構成があると「実行とデバッグ」サイドパネルの内容が変わっています。
今回はリストから「Listen for Xdebug」を選択し、左にある三角形のボタンをクリックします。
まずは開発環境のURLにアクセスし、Xdebug Helper拡張機能でデバッグを有効にします。
後はブレークポイントを設定して画面をリロードします。
Web画面の時と同じようにブレークポイントを設定します。
普段は
$ sail artisan migrate
のように実行しているところを、
$ sail debug migrate
として実行するとブレークポイントで止まるようになります。
もろもろの設定をしてもブレークポイントで止まってくれないことが多々あります(個人的感想)。
これまでに出会った止まらない原因を挙げておきます。
hostname
とdocker-compose.ymlのPHP_IDE_CONFIG
のserverName
が合っていない可能性があります。Xdebugのステップ実行はとても便利ですが、いざ使おうとするとハマることが多い気がします。
それでもdd()
などで都度確認するのは大変なので、少し時間がかかっても快適に開発できる環境を整えられたらいいなと思います。