0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初学者のLaravel Telescope学習

0
Posted at

はじめに

この記事はlaravelエンジニアが初めてLaravel Telescopeに触れて学習したものをまとめたものです
一部間違いがある可能性もありますがご了承ください

Laravel Telescope とは?

Laravel Telescopeとはリクエスト、SQLクエリ、ログ、例外、メール、ジョブなどを確認できるデバッグ支援ツールです
リクエスト詳細からメール内容、SQLの内容まで確認することができます
普段見えない領域を可視化することができるため作成したものが正しいかの確認がこれ一つですべて済むようになります

導入方法

下記コマンドをLaravelプロジェクトがある箇所でターミナル実行します

composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate

なおmigrateが含まれている理由はTelescopeで使用するDB内容はmigrateによって起こされるためです

確認方法

下記URLから確認することができます

laravel起動場所/telescope

localhostで起動しているのなら

localhost/telescope

ですね

今回の目標

n+1の内容の確認と修正です

N+1問題とは、最初に一覧取得のクエリを1回実行したあと、関連データを取得するためのクエリがデータ件数分だけ追加で発行されてしまう問題です
これが発生するものを放置していると将来データが増えたときに処理量が増えてしまいます
今回はこのn+1問題を修正する過程をなぞっていきます

ちなみにこれの確認をするために実行クエリを確認する必要があります
image.png
今回確認するAPIが赤枠の個所なのでここをクリックし
image.png
このようにQueriesとなっている箇所がeloquentで実際にクエリとして実行されている内容です

対応の内容

今回は下記のようなコードを用意しました

        $monthTransactions = $this->transaction
        ->whereBetween('occurred_on', [
            $startOfMonth->toDateString(),
            $endOfMonth->toDateString(),
        ])->get();

        foreach ($monthTransactions as $monthTransaction)
        {
            $category = $monthTransaction->category;
            ...

このクエリのQueriesの内容は
image.png
このようになっています
これはModelに紐づいているcategoryの内容を見ています
foreach一周につき検索を行うためクエリの数が多くなっています
これがn+1問題です
これを見ればこの個所が悪いのは明らかなのでここを修正すべきということがわかります

そこで修正箇所を

        $monthTransactions = $this->transaction::with('category')
        ->whereBetween('occurred_on', [
            $startOfMonth->toDateString(),
            $endOfMonth->toDateString(),
        ])->get();

        foreach ($monthTransactions as $monthTransaction)
        {
            $category = $monthTransaction->category;
            ...

というようにwithを使って事前にtransactionとcategoryを紐づけましょう
そうすると実行されたクエリ内容が
image.png
このようにクエリ数を圧倒的に下げることができます
こうしてeloquentではみえないクエリパフォーマンスを上げることができます

今回はN+1の改善に絞りましたが他にもTelescopeにできることはたくさんあります
自分も必要に応じて少しずつTelescopeの学習を進めていこうと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?