Edited at

Laravel5.7: Laravel Debugbarを使う

Laravelでの開発にはとても便利なので、追加することをお勧めします。


親記事

Laravel 5.7で基本的なCRUDを作る - Qiita


Debugbarをインストールする

:link: barryvdh/laravel-debugbar: Laravel Debugbar (Integrates PHP Debug Bar)

:link: 開発に欠かせない Laravel Debugbar の導入 - Larapet


PowerShell

# 本来は --dev を付けますが、今回は本番環境でも使いたいので下記のように。

# ただし、パスワードも丸見えになるので注意!
> composer require barryvdh/laravel-debugbar

Laravel5.5からはAuto Discoveryの機能があるので、Composerでrequireするだけで使えるようになります。


(補足) Auto Discoveryとは

本来なら、app.phpでサービスプロバイダとファサードに登録する作業が必要です。


config/app.php

    'providers' => [

+ Barryvdh\Debugbar\ServiceProvider::class,
],

'aliases' => [
+ 'Debugbar' => Barryvdh\Debugbar\Facade::class,
]


しかしLaravel5.5以降は、このデバッグバーのようなパッケージの開発者が、そのパッケージのcomposer.jsonextraセクションで記述しておいてくれれば、我々利用者が上のような作業をする手間が省けます。

:link: readouble.com: パッケージディスカバリー

:link: [Laravel5.5]Package Auto Discoveryを理解する

そして、このデバッグバーの開発者さんは、きちんと対応してくれています。

:link: デバッグバーのcomposer.json(35行目)


Debugbarの設定を変更する

デバッグバーを画面に表示するかどうかは環境変数APP_DEBUGの値(true/false)で決まります。

しかし、下記のようにDebugbarの設定ファイルを生成すればAPP_DEBUGに左右されずに設定できます。


PowerShell

# デバッグバーの設定ファイル(config/debugbar.php)を生成する

> php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

環境設定ファイルにDebugbarの設定を記述します。


.env

DEBUGBAR_ENABLED=null  # デフォルト。APP_DEBUGに応じて決まる

DEBUGBAR_ENABLED=true # 必ず有効
DEBUGBAR_ENABLED=false # 必ず無効

今回のアプリは練習用であり、本番環境でもデバッグバーを表示させます。

本番の環境設定は下記のようになる予定です。


本番の環境設定

APP_ENV=production

APP_DEBUG=false # 一般的な本番環境と同じく、デバッグ表示は無効
DEBUGBAR_ENABLED=true # デバッグバーは有効

なお、ローカル環境でも上のようにするのはやりすぎです。

デバッグバーは万能ではなく、ソースコードにミスがあってアプリ自体が動かない場合はデバッグバーも表示されません。

そんな時はAPP_DEBUG=trueによるデバッグ表示が役に立ちます。

003.png


Debugbarを使う

:link: Usage

たとえばデータベースから取得した記事一覧を確認したい時、Postコントローラで下記のように記述すれば、var_dump()よりは分かりやすく表示できます。


app/Http/Controllers/PostController.php

     public function index()

{
$posts = Post::latest()->get();
+ \Debugbar::info($posts);
return view('posts.index', ['posts' => $posts]);
}

001.png

また、QueriesでSQLを確認できます。

記事一覧を新しい順に取得する時、SELECT * FROM `posts` ORDER BY `created_at` DESCというSQL文が実行されているようです。

002.png