#xdebug
#tips
#phpstorm

PhpStormでXdebugを使えるようにしよう!

この記事でできること

PhpStormを使ってXdebugを使うことができる。
ところまで設定ができる。

所要時間はだいたい半日かければうまく設定できるはずと言われ、僕は1日かかりました…
なので、環境を整えるために時間に余裕がある時にやってみてください。

※この記事では使い方までは詳しく説明しません。

Xdebugとは?

Xdebugとは高機能なPHPのデバッグツールです。 PHPのデバッグでおなじみの「var_dump」を見やすくしてくれたり、ボトムネックになっている処理を見つけたり、ステップ実行できたりします。 その他のデバッグツールとしてはZendDebuggerがあります。
Xdebugを使い倒す5つのTIPS | スマホサイト・アプリをつくろう。
より。

想定環境

vagrant -v
> Vagrant 1.8.6
php -v
> PHP 7.1.5 (cli) (built: May  9 2017 18:30:17) ( NTS )
nginx -V
> nginx version: nginx/1.10.2

PhpStorm 
D807DD9F-BFE6-4C8F-85E6-E6F2A57ECF7C.png.png

やること

  • vagrant側での設定
  • 設定の確認
  • PhpStormの設定

ではここから、設定を行っていきます。

vagrant環境内の設定

  • vagrantにアクセス
$ vagrant up
$ vagrant ssh
  • Xdebugのインストール 自分のvagrantにインストールされているPHPのバージョンと、インストール先のリポジトリに合わせるために、yumのパッケージを確認します。 17ABDFF7-3388-49A8-ADB8-858C76BB0C8F.png.png

自分の場合は、PHPのバージョン7.1で@remiからなので、--enablerepoオプションをつけて実行しました。

yum list installed #yumのインストールパッケージを確認できる
yum install --enablerepo=remi-php71 php-xdebug
  • Xdebugの設定ファイルを変更する Xdebugの設定ファイルは、/etc/php.d のディレクトリ直下にあるので、ここを編集します。 (もしここにファイルが無ければ、yum install がコケているか、うまく行ってない可能性があるので再インストールをするか、/etc/php.iniファイルを編集しましょう。)
sudo vim /etc/php.d/15-xdebug.ini

設定項目は以下の通りです。ファイルが結構膨大なので、vim内で検索を上手に使ってください。

※vimは、/{word}でファイル内検索ができ、キーボードのNを押すと次の検索結果に遷移できます。

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=10.0.2.2 
xdebug.remote_port=9001 # 9000だとたまにエラーが出るようなので、9000番以外の設定がおすすめ
xdebug.remote_log=/tmp/xdebug.log

こんな感じで、必要最低限

  • zend_extension
    Xdebugの拡張モジュールファイルです。これを指定してあげないと行けないので、もし動かなければこのファイルの存在確認を行いましょう。

  • xdebug.remote~
    リモート実行用の設定。「xdebug.remote_host」で接続するホストを設定。今回はlocalhostなので127.0.0.1。
    remote_hostとは、VBから見たmacのIPアドレスのことです。ここの設定が結構迷うところなんですが、上記のような設定で試してみてください。もし駄目ならip a ip rとかで調べてみてください。

以上設定が終わったら、php-fpmのリスタートをしましょう。念のため、nginxもリスタートさせると良いかもしれないです。

sudo systemctl restart php-fpm
sudo systemctl restart nginx #もし、読み込まれない場合

設定の確認

  • phpinfo();で確認

そもそも先程作成したiniファイルがちゃんと読み込まれいてるか確認しましょう。phpinfoとかを使ってうまく出力してください。
もし、ここにファイルが無ければ、php-fpmでリスタートさせましょう。
98BFD83B-25C9-4EF3-8D85-8264FFD65976.png.png

うまく読み込まれていると下の方にXdebugの設定内容が確認できます。
もし、うまくいかないときは、ここを確認してきちんと設定した項目が適応されているか、見ましょう。
D7FC94E0-3964-4142-98E9-5F5F192972FC.png.png

PhpStormの設定

ここから、PhpStormの設定を行っていきます。まずは、PhpStorm側で実行するserverの環境を登録します。

Preferences > Servers >
8298F148-333A-433A-A1BB-D00752F26E45.png.png

FDA76EB9-750B-485D-9FF8-F1BA0151E4B3.png.png

serversのところを選択すると、下のような設定画面が表示されるはずです。
設定項目は以下のように設定してください。

2D067882-80E9-466F-9A72-F453D871ACA4のコピー.png

  • name : 特になければHost名と一緒で大丈夫です。
  • Host : アクセスするホスト名が入ります。 { localhost }のように文字で設定しても、IPアドレスで指定しても大丈夫です。macでホスト名を変更していなければ、192.168.33.~になっているはずです。 もしわからなければ、vagrantfileの設定を確認してください。
  • パスマッピング
    もし、vagrant上とローカル環境でフォルダをシンクさせている場合は、Use path ~ にチェックを入れて、パスマッピングをします。

  • debugの設定
    CA6B410E-67E7-47BE-9A81-5E12FB648BD9.png.png
    0B861C85-BAD6-4FE1-BF65-9FFC022D81E2のコピー.png

+マークから、PHP Remote Debugを選択して、作成します。
nameは自分の好きな名前で、serverは先程追加した項目が選択できるようになっているはずなので、選択。
Ide key はなくてもいいのですが、空ではエラーが出てしまうので、今回はPhpStormと入力しましょう。

ここまでで設定は終了です。お疲れ様でした。
しかし、これで動くかは別の問題なので、最後気合を入れましょう。

タブから、
Run > Break at ~
60CA9F60-0F54-42E3-AEB9-53BB2E1B29DF.png.png

にチェックを入れます。
これは、ページが読み込まれたタイミングでデバッグが実行されるというようなものです。とりあえず、これを押して動作確認をしましょう。

いかにもな虫のボタンを押すと下に、Debuggerが開きます。
そして、右の電話マークをクリックしてアクティブにしましょう。

25B30795-0A5E-4B35-B88F-23C5489FE264.png.png

押すとこんな感じに
C5906BB2-A779-4C93-94D0-7F16C948457E.png.png

そして、実行環境のリロードを行って、デバッガーに表示されれば成功です。
動作確認ができたら、先程のBreak at first ~をチェックを外して、
ソースコードの隣の列にチェックを付けます。
36994DAE-2057-4E93-ACC8-B747C342EAA1.png.png

これでこの処理がなされるページをリロードすると、
ここまですべてうまく成功していれば、こんな感じでデバッグができると思います。
09768855-1BBF-4497-8C14-06B198AE7C0D.png.png

お疲れ様でした。以上が設定になります。
おそらく個人の実行環境や、設定ファイルによってうまくいかないこともあるかもしれないですが、トラブルシューティングの項目を見てうまく対処してみてください。(後日充実させていきます。)

詳しい使い方に関しては、ここの記事を参考にすると良いかもです。
PhpStormのデバッグを使いこなす - Qiita

トラブルシューティング

PHP - phpstormとmampの環境でphpのデバッグができない(45756)|teratail

https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html

このあたりの記事を参考にしました。

参考資料

PhpStormを使う。XAMPPのPHPでXdebug設定 | TECH Projin
PhpStormでデバッグしてみる - yk5656 diary