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-stability
をdev
に変更して下さい。(追記:修正されたので、必要なくなりました。)
さて、このプロファイラー、最初はさほど性能がなかったのですが、継続して機能追加されており、今では一番強力なプロファイラーに仕上がっています。
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のルー・ティングまわりについて 」です。カレーでぼけたら、ルーで返すとは。さすがです。侮れません。