環境
- MacBook Pro
- Vagrant 2.2.9
- Laravel Homestead 9.5.1
- PHP 7.4.5
- Xdebug 2.9.3
- PhpStorm 2020.1.2 Preview
事前確認
Homestead環境なら入っている筈だが、一応確認する。
phpinfoを見て、Xdebug拡張が含まれているかを見る。
ホスト設定
Vagrant上で実行します。
# Xdebugの設定ファイルを確認
vagrant@homestead:~$ php --ini | grep xdebug
# デフォルトでモジュールが無効のため、何も表示されない
# モジュールを有効化
vagrant@homestead:~$ sudo phpenmod xdebug
# もう一度確認
vagrant@homestead:~$ php --ini | grep xdebug
/etc/php/7.4/cli/conf.d/20-xdebug.ini, # ← 設定ファイルが追加された
# 設定ファイルを編集
vagrant@homestead:~$ sudo vim /etc/php/7.4/cli/conf.d/20-xdebug.ini
以下の内容に書き換える。
xdebug.remote_portが9000だと動かなかったので、9001にする。
php-fpmのデフォルトポートが9000なので、それと競合するっぽい。
/etc/php/7.4/cli/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable = 1
xdebug.remote_host = 10.0.2.2
xdebug.remote_port = 9001
xdebug.remote_autostart = 1
xdebug.idekey = PHPSTORM
xdebug.remote_log = /tmp/xdebug.log
xdebug.show_error_trace = 1
xdebug.max_nesting_level = 512
再起動して設定を反映します。
vagrant@homestead:~$ sudo service php7.4-fpm restart
IDE設定
- 設定を開く
- 「言語&フレームワーク > PHP > デバッグ」でXdebugのデバッグ・ポートを9001に設定
- OKボタンを押して設定を閉じる
- 右上にあるPHPデバッグ接続のリッスンボタンを押す
- Vagrant上のサイトにアクセスする(例: http://homestead.test/ )
- PhpStormで「Incoming Connection From Xdebug」というダイアログが現れるので、public/index.phpを選択し、受諾ボタンを押す
- 「言語&フレームワーク > PHP > サーバー」を見ると設定が追加されている。しかし間違った設定がなされているため修正する。(/publicの絶対パスを削除してルートディレクトリの絶対パスを設定する)
↓修正
これで設定は完了です。
好きなところにブレークポイントを貼って、サイトにアクセスしてみましょう。
処理が停止して変数の一覧が見れるようになりました。
F9キーを押すと次のブレークポイントまで処理をすすめることができます。便利ですね。
補足
xdebug.remote_autostart = 0
に設定すれば、デバッグの自動実行を止めることができます。
その場合、サイトにアクセスする際にXDEBUG_SESSION_START=PHPSTORM
のパラメータを明示的に付与する必要があります。
Xdebug helperというChrome拡張を使うと、URLに勝手にパラメータを付けてくれるのでオススメです。
参考リンク
- https://laracasts.com/discuss/channels/laravel/how-to-setup-xdebug-for-homestead-in-phpstrom?page=1
- https://www.erickpatrick.net/blog/xdebug-with-homestead-and-phpstorm
- https://medium.com/@mohsinyounas05/how-to-enable-xdebug-for-laravel-with-vagrant-and-phpstorm-df5403c9e793
- https://qiita.com/haruna-nagayoshi/items/99fa041e884c2c3975d2
- https://qiita.com/castaneai/items/d5fdf577a348012ed8af