Laravel DebugBarの紹介

この記事はうるる[Advent Calendar2024](https://qiita.com/advent-calendar/2024/uluru)の記事です。

OurPhotoでサーバーサイドエンジニアをしているkmyです。
Laravelの[DebugBar](https://github.com/barryvdh/laravel-debugbar)導入してから便利だなーと思いつつ、なんとなく日々、利用していましたが入れた当初はなにそれ、使い方わからんとなっていたので簡単にまとめてみます。

# Laravel DebugBarとは？
Laravelのデバッグを支援してくれるツールのことです。
ブラウザ上にデバッグ情報を表示するバーを追加して、アプリケーション上の挙動を追跡しやすくなります。

画面の端っこにいる赤い小さいアイコンのこれがDebugBarになります。
![スクリーンショット 2024-12-06 16.44.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/61e5cd49-d9b5-a6c6-de5f-6a7d3b702b4e.png)

展開するとこんな感じ。
![スクリーンショット 2024-12-06 16.52.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/ca891d70-3243-38b5-1ede-7eb97e051300.png)

# 機能紹介
### Messages
ログが出力される場所です。
試しに下記のようなコードを実行してみます。

```php
User::where('id', 1)->get();
throw new \Exception("エラーだよ");
```

例外含めログが出力されています。
![スクリーンショット 2024-12-06 17.14.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/b5889c2e-10da-0aeb-efd7-c130bd4ced0e.png)

### Timeline
実行時間の計測が出来ます。
下記のように計測したい場所を挟んで実行すると場所ごとに時間を確認できます。
```php
start_measure('query1', 'クエリ1の処理');
// 計測したい処理
stop_measure('query1');
```

試しに下記のコードを流してみます。

```php
start_measure('query1', 'クエリ1の処理');
User::where('id', 1)->get();
stop_measure('query1');

start_measure('query2', 'クエリ2の処理（+ sleep）');
User::where('id', 2)->get();
sleep(2);
stop_measure('query2');
```

下記のように全体の実行時間、場所ごとの実行時間が出力されます。
![スクリーンショット 2024-12-06 17.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/0459ad16-02fd-ba5a-01d3-fb6e564d699d.png)


### Exceptions
例外が出力されます。
さきほどと同じように例外を投げてみます。
```php
throw new \Exception("エラーだよ");
```

どのファイルの何行目で例外が発生しているかを表示してくれています。
![スクリーンショット 2024-12-06 17.24.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/f53c6691-aef8-d159-2a95-9ee5b54c158a.png)

### Views
表示ページで使用しているbladeが表示されます。
![スクリーンショット 2024-12-06 17.30.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/b5cb5c68-0115-7346-42a8-f053a342d192.png)

### Route
ルーティングの情報が表示されます。
HTTPリクエストメソッドや、どのコントローラのメソッドを参照しているかなどの情報を出してくれます。
デバッグ時にどこ参照してたっけ？とかなってもすぐに確認出来るので便利です。
![スクリーンショット 2024-12-09 13.52.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/8b07f059-a199-f297-291d-afb4d9d6e09f.png)

### Queries
発行されているクエリの数や発行クエリが表示されています。
dumpとかddを使用するとクエリが下記のようになって見にくいのもDebugBarなら一回で全量見られるので便利です。
```select * from `users` where `id` = ? and `users`.`deleted_at` is null```

![スクリーンショット 2024-12-09 14.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/fff58bd3-0047-77bb-525e-6f5e4f50efe9.png)

### Models
参照しているモデルとその数が表示されます。
![スクリーンショット 2024-12-09 14.29.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/b03431fa-1f1d-d9aa-b90c-d2481ae82058.png)

### Mails
ここは使用したことも、使用予定もないのでメモです...
調べた限りでは過去に推奨されていた[Swift Mailer](https://swiftmailer.symfony.com/docs/introduction.html)はサポート終了しているため、[Symfony](https://symfony.com/doc/current/mailer.html)を使用してほしいとのことです。

# Optionsで便利そうなものの紹介
DebugBarはdebugbar.phpというファイルで表示するタブの表示、非表示や表示内容を調整することが出来ます。
個人的に使ってみて便利そうなものをいくつか紹介します。
公式の[ドキュメント](http://phpdebugbar.com/docs/)はこれです。

### explain表示の追加
Queriesにexplainを自動で出せるようになります。
下記にdebugbar.phpの一部を抜粋します。

```debugbar.php
'options' => array(
        'auth' => array(
            'show_name' => false,
        ),
        'db' => array(
            'with_params' => true,
            'timeline'    => false,
            'backtrace'   => false,
            'explain' => array(
                'enabled' => true, //ここをtrueにする
                'types' => array('SELECT'),
            ),
            'hints' => true,
        ),
```

toSqlとかexplainいちいちしなくても良いので便利。
![スクリーンショット 2024-12-12 17.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/726bf32e-56ad-e534-6176-6cf4daa5dd6e.png)

### Timelineにクエリの実行時間を出す
Timelineにクエリの実行時間を出力して、どこのタイミングでどれくらい時間がかかったのかを出力してくれます。

```debugbar.php
'options' => array(
        'auth' => array(
            'show_name' => false,
        ),
        'db' => array(
            'with_params' => true,
            'timeline'    => true, //ここをtrueにする
            'backtrace'   => false,
            'explain' => array(
                'enabled' => false,
                'types' => array('SELECT'),
            ),
            'hints' => true,
        ),
```

赤枠内に下記のような形で出力されます。
![スクリーンショット 2024-12-12 18.32.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1204242/198a1991-1cf0-1ec2-2482-56d164b96370.png)

# まとめ
DebugBarを使い始める前はどのblade見てるんだっけ、コントローラーどれだっけなーみたいなことが多かったのですが、入れてからは調査する際に楽に対象のファイル見つけられるようになったのでおすすめです。
興味があったら使ってみてください〜

明日は[k_yamaki](https://qiita.com/k_yamaki)さんの記事です！
お楽しみに〜