Laravel4、最強のデバッグツールlaravel-debugger

タグ: Laravel4  

これは、Laravel アドベントカレンダー 2013、16日目の投稿です。

昨日はatijustさんの、robclancy/presenterの紹介でした。

いつもなら、おちゃらけるのですが、猫に毎朝起こされ、寝不足なので静かに初めます。(2年ほど前に、近所でミャーミャーうるさい、猫を弟が飼い始めました。性格なのかとにかくよく鳴きます。半分しか白くありませんが、名前は「シロ」です。近所の野良猫の中では一番白い面積が大きかったため、通称がシロだったのです。)

以前に紹介した、juy/profileよりも強力なプロファイラーが登場しています。juyくんはアップデートしないようです。しかも、これから紹介しているlaravel-debuggerに乗り換えたようです。

ピン〜ポン〜パン〜ポン〜♫

悲しいお知らせです。これから紹介するプロファイラー(デバッグツール)は、Laravel4.1ではそのまま動きません。:D(追記、結局動くように修正されました。デフォルトで動かないなんて使いづらいから、当然です。)

Laravel4.1がリリース後、composer.jsonのminimum-stabilityがdevからstableに変更されました。Laravel3の時、ずっとdevだったのですが、ちょっと違和感がありました。正式版なのに、最低限度の依存するパッケージが開発版というのは、いただけません。

ですから、基本的に今回の変更は歓迎です。ほとんど、影響はありません。

しかし、このパッケージに関して、作者が依存パッケージの「最新版」にこだわっているため、minimum-stabilityがstableだと動作しません。作者にもGitHubでissue投げましたが、即効でクローズされました。まあ、オープンソースですから、作者の意向が反映されても良いのですが、くだらないことにこだわって、ユーザーの利便性を考えてくれないのは困ったものです。

ですから、使用するにはインストールしたトップのcomposer.jsonファイルを開き、一番最後のminimum-stabilitydevに変更して下さい。(追記:修正されたので、必要なくなりました。)

さて、このプロファイラー、最初はさほど性能がなかったのですが、継続して機能追加されており、今では一番強力なプロファイラーに仕上がっています。

barryvdh/laravel-debugbarです。元々は、PHP Debug barというツールですが、barryvdhさんが、Laravel向けにセットアップして提供しています。作者はIDEヘルパーを作成した人です。性格的には目立ちたがり屋ですね。裏でテストが必要な、地味なことには手を出さず、基本的にフォーラムで賞賛を受けるタイプの仕事ばかり行います。

作者がどんな人間にせよ、私達はありがたく使わせてもらいましょう。;)

インストール

当然、Composerでインストールします。

composer.jsonのrequireセクションに、以下の行を追加し、updateするか、composer requireでセットアップしてください。

"barryvdh/laravel-debugbar": "dev-master"

続いて、app/config/app.phpで、サービスプロバイダーを追加します。これで、パッケージが動作するようになります。

'Barryvdh\Debugbar\ServiceProvider',

標準でも十分な情報が表示されますが、自分でもデバッグ情報などを表示したい方は、エイリアスも追加しておきましょう。

'Debugbar' => 'Barryvdh\Debugbar\Facade',

最後に、必要なjsやcssをpublic環境下へコピーする、Artisanコマンドを実行します。

php artisan debugbar:publish

これで使用できるようになります。アップデートされるたびに、このコマンドを実行する必要があります。面倒な方は、多少時間が取られますが、以下をスクリプトの指定に追加しておくことが勧められています。

"post-update-cmd": [
    "php artisan debugbar:publish"
],

使用法

app/config/app.phpでデバッグ(debug)がtrueになっていれば、自動的に表示されます。

表示内容は:

  • Messages : 以降で説明する、追加情報が表示されます。
  • Timeline : Laravelの起動時間(booting)とコードの実行時間(Application)に分かれて表示されます。
  • Exceptions : 例外です。たぶん、以下のコードで記録したものが表示されるのでしょう。
  • Views : ビューのプロパティーが表示されます。構造を持っているものや表示が長いものは、折りたたまれていますので、クリックで広げて確認します。
  • Route : ルートの情報です。before、afterフィルターなども表示されます。
  • Database : 実行されたSQLが表示されます。実行時間とピークメモリも表示されます。
  • Mails : たぶんメールのpretendの情報だと思います。
  • Request : リクエストの内容です。
  • ルート、メモリ使用量、全体の実行時間 : バーの右側にまとめて表示されます。

特筆すべきは、リダイレクトされる場合でも、そのリダイレクト元の情報も見ることができます。フォーラムでのやり取りの結果、追加された機能です。

追加情報の表示

Debugbar::info($object);
Debugbar::error("Error!");
Debugbar::warning('Watch out..');
Debugbar::addMessage('Another message', 'mylabel');

上記のログ情報が、Messagesとして表示されます。

実行時間の測定

Debugbar::startMeasure('render','Time for rendering');
Debugbar::stopMeasure('render');
Debugbar::addMeasure('now', LARAVEL_START, microtime(true));
Debugbar::measure('My long operation', function() {
    // 何かやる
});

説明はないですが、たぶんstartMeasureとstopMeasureで、同じキー項目に対する時間が表示されるのでしょう。addMeasureは、例のように記述することで、その時点の経過時間が表示されるものと思われます。measureはクロージャー内で実行されるコードを測定するものでしょう。

例外のログ

try {
    throw new Exception('foobar');
} catch (Exception $e) {
    Debugbar::addException($e);
}

addExceptionで記録した情報が、バーに表示されるのでしょう。

実行時にオン/オフを切り換える

\Debugbar::enable();
\Debugbar::disable();

これはそのままですね。enableで有効、disableで無効です。

Readmeには、他にも多少の情報があります。しかし、実際、ここに書かれたものを利用するより、デフォルトのまま、お気軽に利用することのほうが多いかと思います。デフォルトで、多分十分です。

さて、明日のアド弁カレーだは、michiomochiさんの「Laravelのルー・ティングまわりについて 」です。カレーでぼけたら、ルーで返すとは。さすがです。侮れません。