XOOPS Cubeの開発者なら必ず入れておきたいデバッグツール AdelieDebug について紹介します。
AdelieDebugって何?
AdelieDebug(アデリーデバッグ)は、XOOPS Cube Legacy や TOKYOPen でモジュール・プリロードなどを開発するデベロッパー向けのパワフルな開発支援ツールです。どのあたりが、パワフルかいくつか特徴を紹介しましょう。
特徴1: 見やすいデバッグ画面
XOOPS Cube標準のデバッグモードでは、PHP・MySQL・Smartyなど各モードを切り替えなければなりません。一方、AdelieDebugではPHP・MySQLをひとつの画面に出すことができます。PHPについては、エラーがあれば赤でハイライトされて表示されるので、標準のものと違い見落とす危険性が少ないです。MySQLについては、クエリーログを表示します。もちろんエラーが起こっているクエリーはハイライト表示がされます。加えて、var_dump()で確認することが多い、$_GET, $_POST, $COOKIE, $_FILES, $_SESSION, $_SERVER, 送信されたHTTPヘッダなどの環境変数も自動で表示してくれます。
PHPやSQLのログはひとつのタイムラインにまとめて表示してくれます。これにより、処理の時系列や前後関係が把握しやすくなっています。例えば、あるクエリーがどこで発行されているか知りたい場合があります。従来であれば、var_dump(__FILE__, __LINE__); を随所に仕込んだうえで、出力されたファイル名と行数をなんとなく頭の中にいれて判断するといった具合でした。AdelieDebugでは、adump() を任意の箇所に仕込めば、タイムライン上でadump()とクエリーの関係を一目で知ることが可能です。
特徴2: 便利なデバッグ関数
AdelieDebugは便利なデバッグ関数を提供します。それはvar_dump()よりも強力で、var_dump()+Xdebugよりも導入が簡単です。
adump(): var_dump()関数と同じ働きをしますが、出力内容を<pre>タグで囲むので見やすくなっています。var_dump()は、あちこちに仕込むとどこに仕込んだた分からなくなることがありました。adump()は仕込んだファイル名と行数を表示するので、見失う心配がありません。
adump($uid);
atrace(): その行がどの関数で呼ばれているかを表示します。PHPビルトイン関数のdebug_print_backtrace()と同等の働きをしますが、debug_print_backtrace()のようにメモリオーバーになる心配はありません。
atrace();
awhich(): オブジェクトやクラス、関数がどのファイルの何行目で定義されているかを表示します。awhich()を使えば、わざわざファイル全体をgrep検索する必要はありません。
awhich('Legacy_Controller'); awhich($mRoot);
asynop(): クラスやインターフェイスの概要(synopsys)を表示します。継承した親クラス、実装したインターフェイス、クラスが持っている定数・プロパティ・メソッドが一目でわかるようになります。
asynop('Legacy_Controller'); asynop($this);
特徴3: XOOPS Cube Legacyのためのツールであること
XOOPS Cube Legacy は標準出力をバッファでのみこんでしまいます。なので var_dump() しても何も表示されず、すぐあとに exit() をつけないといけませんでした。さもなければ、<{stdout}>をテーマに書く必要がありました。AdelieDebugは、そのような手間は不要です。XOOPSのob_bufferを自動的に回避するからです。
var_dump() は問答無用で文字列を出力します。なので、XML出力画面にダンプしてしまって、Ajaxのテストがうまくできない、なんてことがありました。AdelieDebugでは、AJAXリクエストのときやHTML出力以外のコンテクストではデバッグ出力を自動でオフにすることで、そういったストレスを軽減します。
特徴4: 実践で使われているツールであること
AdelieDebug は開発現場から生まれた実践的ツールです。XOOPSを用いたシステム開発を数多く手がける株式会社RYUSでは(地道な布教活動により 笑)プログラマに広く活用されています。
導入・使い方
AdelieDebug はプリロードといわれるワンファイルのXOOPS Cube用のプラグインです。ですので、導入は至って簡単。こちらのAdelieDebug.class.phpをダウンロードして、 preload フォルダに放り込むだけです。
不要になった場合は、このプリロードを削除します。
AdelieDebug
- github: https://github.com/suin/xoops-adelie-debug
- ライセンス: たぶんGPL
- 動く環境: PHP 5.2 ~
- 動くプラットフォーム: XOOPS Cube Legacy 2.1 ~, TOKYOPen 1.0 ~