連載
» 2011年03月31日 00時00分 公開

ステップアップ! PHP(2):PECLのXDebugでデバッグを簡単に(前編) (3/4)

[田中正裕,アシアル株式会社]

PHPの設定ファイルを編集

 ビルドしたPHPエクステンションを使うには、設定ファイルphp.iniを編集する必要があります。php.iniを開き、下記の行を追記してください。ファイル内のどの位置に追記しても問題ありません。

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"

 設定ファイルを編集して保存したら、Webサーバを再起動してください。そして、先ほど説明したインストール済みエクステンションを確認する方法で、XDebugが入っていることを確認してください。「xdebug」の項目が見つかれば成功です。

初歩からのXDebug

 PHPは、ブレークポイントの設定やステップ実行といったデバッグ機能を備えていません。また、エラー発生時に画面に現れる情報も最低限のものだけです。この状態でデバッグをしようとするとかなり困難なものになります。XDebugはPHPプログラムのデバッグをより効率よく進めることを可能にします。

 XDebugはかなり多くの機能を搭載しているので、今回と次回の2回に分けて主要な機能を紹介していきます。今回は比較的簡単に使える機能を解説し、次回は統合開発環境(IDE)を利用したデバッグで役に立つ機能を紹介します。

 PHPは変数の宣言が不要で、データ型を指定する必要もありません。手軽にコードを書ける反面、変数名のつづりの間違えたり、関数を呼び出すときに渡す引数の順序を間違えたとしてもエラーが発生しないので、バグの発見が困難になることがあります。

 一般にPHPプログラムのデバッグを始めるときは、最初にvar_dump()関数を使うのが定石です。この関数は、変数の内容をダンプします。プログラムの挙動が怪しい部分にvar_dump()関数を記述し、変数の中身を確認しながら、デバッグを進めていきます。例えば、XDebugをインストールせずに以下のコードを実行すると図5のようになります。

"abcde",
"b" => array(
"1",
"2",
"3"
)
);
var_dump($test, "abc", new DateTime());
図5 XDebugをインストールせずにvar_dump()関数を使ってみた結果 図5 XDebugをインストールせずにvar_dump()関数を使ってみた結果

 XDebugをインストールすると、var_dump()関数をオーバーロードします。オーバーロードとは、関数を上書きして同じ名前の関数に違う働きをさせるようにすることです。PHP言語では、PHPエクステンションだけが使える機能の1つです。

 XDebugをインストールしたサーバでvar_dump()関数を呼び出すと、変数の詳細をより見やすく表示してくれます(図6)。

図6 XDebugをインストールした後でvar_dump()関数を実行したところ 図6 XDebugをインストールした後でvar_dump()関数を実行したところ

 var_dump関数は、プログラムコードを書き直しながら必要に応じて実行していくのが一般的な使い方と言えます。アプリケーション開発時にサクッと変数などの内容を確認したいときに使うとよいでしょう。

ログを利用してデバッグ

 ご覧の通り、var_dump()関数は、Webブラウザにデバッグメッセージを表示します。しかし、Webブラウザにデバッグ結果を表示したくない場面もあります。このようなときは、画面以外の場所にデバッグメッセージを書き出します。フレームワークを使用すると、専用のログ機能を使える場合もありますが、XDebugが提供するerror_log()関数を使っても同様の結果を得られます。

 error_log()関数は、Webサーバのエラーログ、もしくは指定したファイルに追記するログメッセージを用意する関数です。print_r()関数を使ってファイルに書き込みます。以下にそのサンプルを掲載します。

 "abcde",
"b" => array(
"1",
"2",
"3"
)
);
error_log(print_r($test, true), 3, "/tmp/php.log");  // /tmp/php.logに記述する
error_log(print_r($test, true)); // Webサーバのエラーログに記述する

 この場合、Webブラウザの画面には変数の内容は表示されませんが、ログファイルにはしっかりと記録が残ります。ログの閲覧にはtailコマンドが便利です。tailコマンドに、-fオプションを付けて実行すると、ログに追記があるたびに、追記内容を画面に表示します(図7)。

図7 tailコマンドでログを表示しているところ 図7 tailコマンドでログを表示しているところ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。