PhpStorm + Xdebug でコードにブレークポイントを張って変数の状態をデバッグする方法を紹介します。デバックによるステップ実行は IDE ではおなじみの機能ですね。PhpStorm を使うなら知っていて損はないと思います。
動作確認環境
- Mac OS X Mountain Lion
- Homebrew
- Apache + mod-php
- PHP 5.4
- PhpStorm 6.0.3
- Google Chrome
目次
- xdebug をインストール
- PHP のバージョンと実行ファイルを設定
- サーバを追加
- Xdebug の待ち受けポート番号を確認
- リモートデバッグ用のブックマークレットを登録
- PhpStorm の Remote Debug 設定
- デバッグ実行
- ブラウザのアドオンでデバッグ状態のオン・オフを切り替える
- コマンドライン用 PHP のデバッグ実行
- デバッガを起動するよりテストを書こう
xdebug をインストール
それぞれの環境に応じて xdebug をインストールします。
この記事では Homebrew から入れた PHP の xdebug を設定しています。
-
MacにHomebrewでPHP5.4をインストールする
2014年2月20日追記PHP 5.5 のインストールも書きました。 この記事は Homebrew で PHP5.4 を ...
続きを見る
インストールしたら xdebug.ini を設定します。以下は Mac の例です。その他の環境は公式のヘルプを確認してください。
[xdebug]
zend_extension="/usr/local/Cellar/php54-xdebug/2.2.3/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp"
xdebug.max_nesting_level=1000
xdebug.idekey = "PHPSTORM"
設定後 Apache を再起動して、phpinfo() で Xdebug が有効になっているか確認します。
PHP のバージョンと実行ファイルを設定
PhpStorm で Xdebug を使用するための設定を行います。
まずは language level をご自身の PHP バージョンに合わせます。
- PhpStorm の 設定ウィンドウを開き、Project Settings > PHP をクリック
- PHP language level を 5.4 に設定
コマンドライン PHP のパスと、デバッガに Xdebug を指定します。
- Interpreter の右側のボタンをクリック
- コマンドライン用 PHP の実行ファイルを設定
- Debugger に Xdebug を選択
サーバを追加
デバッグ用に PhpStorm にサーバを追加します。
- PhpStorm の 設定ウィンドウを開き、Project Settings > PHP > Servers をクリック
- 左側の「+」ボタンをクリック
- Host 名を 「localhost」、Debugger を 「Xdebug」に設定
Xdebug の待ち受けポート番号を確認
PhpStorm から Xdebug を利用する場合のポート番号を確認し xdebug.ini の remote_port と同じ数字にしておきます。ほとんどの場合、デフォルトの 9000 で問題ないと思います。
- PhpStorm の 設定ウィンドウを開き、Project Settings > PHP > Debug をクリック
- Xdebug のポート番号が 9000 になっていることを確認
リモートデバッグ用のブックマークレットを登録
リモートデバッグを実行する方法はいくつかありますが、ブックマークレットを使用する方法がおすすめです。
ブックマークレットは以下のページで登録します。
Zend Debugger & Xdebug bookmarklets generator for PhpStorm
登録手順は次の通り。
- Xdebug の Generate ボタンをクリック
- Ide key は PHPSTORM と入力
- Start debugger の URL をコピーしてブラウザのブックマークに登録
- Stop debugger の URL をコピーしてブラウザのブックマークに登録
ブックマークレットには、デバッグを開始する Start debugger と、デバッグを終了する Stop debugger があります。このブックマークレットは、Cookie にデバッグのトリガとなる文字列を書き込みます。
PhpStorm の Remote Debug 設定
リモートデバッグするサーバを設定します。localhost を指定します。
- PhpStorm の メニューバー > Run > Edit Configurations を選択
- 左上の+ボタンをクリックして PHP Remote Debug を選択
- Servers に localhost を選択
- Ide key が PHPSTORM になっていることを確認
デバッグ実行
これまでの手順でデバッグの準備が整いました。ブレークポイントを張ってデバッグしてみましょう。
まず、PhpStorm をデバッグ待ち受け状態にします。
- 右上のプルダウンメニューから登録した Remote Debug を選択
- 電話機みたいなアイコン(Start Listen PHP Debug Connections)をクリック
次にブラウザを開いて、先ほどブックマークしたブックマークレットを使用して、ブラウザをデバッグ状態にします。
- ブラウザを開き、ブックマークメニューから Start debugger のブックマークレットを選択
最後に、ブレークポイントを張ってデバッグ実行します。ブレークポイントの位置でプログラムの実行が止まるはずです。
- デバッグしたいコードにブレークポイントを張る
- ブラウザからブレークポイントを張った画面にアクセスする
ブラウザのアドオンでデバッグ状態のオン・オフを切り替える
先ほど登録したブックマークレットと同じ機能をもつアドオンがあります。ブラウザのデバッグ状態のオン・オフができます。ブックマークレットが嫌な方はアドオンも検討してみてください。
Browser Debugging Extensions - PhpStorm - Confluence
コマンドライン用 PHP のデバッグ実行
コマンドライン用 PHP は以下のようにデバッグ実行します。
- PhpStorm の メニューバー > Run > Edit Configurations を選択
- 左上の+ボタンをクリックして PHP Script を選択
- デバッグ実行する PHP ファイルを設定
以下は Symfony2 の Console Command の例です。Arguments で引数を渡すこともできます。
- ブレークポイントを貼る
- 右上のプルダウンメニューから登録した PHP Script を選択
- 電話機みたいなアイコン(Start Listen PHP Debug Connections)をクリック
- カブトムシみたいなアイコンをクリックしてデバッグ実行
デバッガを起動するよりテストを書こう
「print デバッグしたくなったら、それはテストの書き時」 これは、2年前に参加した TDD Boot Camp で学んだことです。デバッガを立ち上げて変数の状態を確認したくなるほど複雑なコードを書いているなら、テストを書いたほうがいいと思います。
とはいいつつも、世の中にはテストを書くことが困難なプロジェクトもたくさんありますし、print 文を書いて実行結果を確認せざるを得ない状況もあります。他人の書いたコード解析するためにデバッガを使うことは悪いことではありません。IDE のデバッグは強力な機能なので、使うべきときにはどんどん使って効率のよい開発を目指しましょう。