PhpStorm & Vagrantでデバッグ
ついにe2infoも傑作IDEと名高いPhpStormを導入してみようということになりました。
どうせなんでVagrantの開発環境上でXdebugによるデバッグを試してみようと思います。
ちなみに環境はMac+PhpStormなので、Windowsでは設定画面の呼び出し方などが変わるかもしれません。
さらに自分は生粋の日本人のためメニュー等を日本語化しています。
プロジェクトの前設定として、Vagrantでフォルダ共有を使用しているので
「preference」 > 「ビルド、実行、デプロイ」>「デプロイ」
の接続で赤枠のように「ローカルまたはマウントされたフォルダー」を指定します。
次にPHPの設定をします。
「preference」 > 「言語&フレームワーク」>「PHP」で対象プロジェクトの言語レベルを選択したのち、「CLIインタープリター」の「…」ボタンを押下すると設定ダイアログが出るので、「リモート」からVagrantのラジオボタンにチェックします。そうするとPhpStormがよしなにやってくれているのか、ゲストOS(CentOS6)上のPHP&Xdebugを認識してくれました。すげぇ。
次はサーバの設定です。
「preference」 > 「言語&フレームワーク」>「PHP」> 「サーバ」設定を開きます。
「名前」欄に任意入力ののち、ホストにゲストOSのIPアドレス、ポート(:80)を指定したのち、デバッガーとしてXdebugを選択します。
「パスマッピングを使用する」チェックボックスにチェックしたのち、ローカルOS上のプロジェクトのパスに対応する、フォルダ共有機能で同期しているゲストOS上のパスを設定していきます。
今回はフォルダ共有で同期させているローカルOS側”src”フォルダとゲスト側”/var/www/project”ディレクトリをマッピングさせると共に、ゲストOS側ドキュメントルートとなる”webroot”ディレクトリもマッピングさせてみました。
ここを正しく設定しないとブレークポイントでうまく停止できないそうで、仮想マシン&フロントコントローラー方式のプロジェクト(試したのはCakePHP2のプロジェクト)でいきなり試すにはハードル高いと思いましたがなんとか動作できました。ここら辺まだ把握仕切れていません。
次にデバッグの設定です。
今回ゲストOS側のphp.iniで以下のようにXdebugの設定を行いました。
[xdebug] zend_extension=/usr/lib64/php/modules/xdebug.so xdebug.remote_enable=on xdebug.remote_autostart=on xdebug.remote_connect_back=on xdebug.remote_handler=dbgp xdebug.remote_host=192.168.33.1 xdebug.remote_port=9001 xdebug.idekey="phpstorm"
Vagrantの場合xdebug.remote_hostに192.168.33.1を設定します。
「preference」 > 「言語&フレームワーク」>「PHP」> 「デバッグ」設定からXdebugのデバッグポートにxdebug.remote_portで指定した9001番を登録します。
さらに「preference」 > 「言語&フレームワーク」>「PHP」> 「デバッグ」> 「DBGp」設定で、IDEキーにxdebug.idekeyで指定した値、ホストにゲストOSのIPアドレス、ポートにxdebug.remote_portの値9001番を指定します。
最後にデバッグ構成の編集を行います。
トップメニューの「実行」>「構成の編集」から「実行/デバッグ構成」設定画面を開き、左上の「+」ボタンから「PHPリモートデバッグ」を追加します。
任意の名前を入力したら、構成欄でサーバに前工程で設定ずみのサーバを選択し、ideキーにxdebug.idekeyで指定した値(ここではphpstorm)を入力します。
やっと実行準備が整いました。
エディタでデバッグしたい箇所の左側をクリックしてブレークポイントを設定します。
「実行」>「PHPデバッグ接続のリッスンを開始」でデバッグ開始。
そうすると設定したブレークポイントで停止します。
あと、自分の環境だけの問題かもしれませんが、ホストOSで使用しているセキュリティソフトのESETのファイアーウォールのせいでうまく動きませんでした。ESETの設定を変えたところ動きましたが、動作しない時はファイアーウォールを疑ってみるのも必要かもしれません。
かなり苦労したのですが、結局うまく動かなかったのはESETのせいだったので、上記設定の全てが必要なのかどうかはさらなる調査が必要そうです。