KimuraTweetこんにちは。ライトな記事を担当しているリスペクトの木村です。PHPの開発時に大変お世話になるデバッグやプロファイリングの手段ですが、探してみると種類が沢山あって、どれを使えばいいのか迷ってしまいます。そこで、その中から普段使用しているツールや手段をいくつかご紹介したいと思います。ちなみに、私はCakePHPがメインなので、「CakePHPでの開発時によく利用しているもの」に絞ったものになります。2.6.1今回の手段やツール主に、次の5つを用途や場面に合わせて使い分けています。基本的にはフレームワークを問わず使えるものが多いのですが、debug()やDebugKitはCakePHP固有のものになっています。デバッグとプロファイリングの違いご存じの方も多いとは思いますが、デバッグとプロファイリングでは役割が異なります。デバッグは、広義ではバグやエラーの原因を突き止めて修正する手段の事を指します。デバッグの手法や流れは利用するツールや環境によって大きく異なりますが、今回は「変数の中身や関数の返値を画面上やログへ出力するデバッグ」という部分に主眼を置いて説明したいと思います。Xdebug+IDEを利用してブレークポイント/ステップ実行をするデバッグや、gdbやphpdbgを利用した深いところまで追跡するデバッグについては今回は扱いません。対してプロファイリングは、プログラム実行時における様々な情報を収集して確認する手段を指します。関数の呼び出し頻度や実行時間の収集によって、全体的なパフォーマンスの確認やアプリケーション内に存在するボトルネックを確認するために使われます。デバッガーやプロファイラーは後ほど紹介するCakePHPのDebugKitのように、フレームワークであれば標準機能やオプションとして用意されている場合が多いですし、XdebugのようにPHPのエクステンションとして用意されている場合もあります。本格的に追おうとするとエクステンション系のプロファイラーになるので導入障壁が高いのですが・・・その分の価値はあります。個人的には、利用頻度としてはデバッグ系が一番多いです。プロファイリング系は開発の後半になると使い始めたり、開発中にパフォーマンスが気になるようであればそのタイミングでちょっと見てみたりしています。いう訳で、一つ一つ見てみたいと思います。var_dump()知らない人はいないはず、ほぼ説明不要のvar_dump()関数です。var_dump()は引数に変数や関数を渡すと、その中身や返り値を画面上に表示してくれます。"d"}bool(false)こんな感じで出力されます。引数は複数渡す事もできます。"d"}bool(false)3つ続けて実行した時と同じ出力になりました。ブラウザ上で確認する場合は、var_dump()の前後を<pre>タグで囲うと若干見やすくなります。この表示が・・・こうなります。var_dump()はちょっとしたデータを確認したりするのには楽です。「とりあえずどんな値が入っているか確認したい」という時はよくあるので、頻繁に使っています。配列やオブジェクトを表示しようとすると整形されずに表示されてしまいます。上記のように前後に<pre>を挟めば何とか表示できますが・・・それでも毎度挟むのは少し手間です。いった場合は、次に紹介するXdebugやCakePHPで利用可能なdebug()関数を利用する事で整形して表示してくれます。XdebugXdebugも、定番のデバッガーです。(今回は2.3.2を使用しています)PHPには標準で入っていないため、別途導入する必要があります。xdebugで導入する事ができます。PHPUnitでコードカバレッジを確認するのにも必要なので、入っている開発環境は意外と多いかもしれません。Xdebugを入れるとすぐに受けられる恩恵が、「var_dump()の機能拡張」です。先ほど試したvar_dump()のデモで比較すると、出力が全然異なります。この表示が・・・こうなります。<pre>タグでの囲みは不要です。整形してくれて便利なのですが、その一方、表示したいものの要素が多かったり階層が深かったりすると省略されてしまいます。制限を緩和したかったり全て表示したい場合は、下記の設定を変更する必要があります。