Webアプリケーションを開発する場合、データベースクエリとパフォーマンス監視は非常に重要です。 Laravelは、開発者がリクエストと応答の間でこれらの要件を処理するのに役立つ強力なミドルウェアメカニズムを提供します。ミドルウェアは、リクエストがコントローラーに到達する前、または応答がユーザーに戻る前にロジックを実行できます。この記事では、Laravelミドルウェアを介してデータベースクエリのロギングとパフォーマンス監視機能を実装する方法を紹介します。
まず、ミドルウェアを作成する必要があります。次のコマンドを実行することにより、QueryLogMiddlewareというミドルウェアを作成できます。
php artisan make:middleware QueryLogMiddleware
このコマンドは、 `app/http/middleware`ディレクトリに` querylogmiddleware.php`ファイルを生成します。これで、そのファイルにミドルウェアロジックを記述できます。
データベースクエリログを記録するために、Middlewareの「ハンドル」メソッドでLaravelのDBファサードを使用して、すべてのSQLクエリを取得してログファイルにログに記録できます。これがサンプルコードです:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\DB;
class QueryLogMiddleware
{
public function handle($request, Closure $next)
{
// クエリログを有効にします
DB::connection()->enableQueryLog();
$response = $next($request);
// クエリログを取得します
$queries = DB::getQueryLog();
foreach ($queries as $query) {
// 意思$queryログファイルに書き込みます
}
return $response;
}
}
上記のコードでは、 `db :: connection() - > enableQueryLog()`クエリログを有効にします。 db :: getQueryLog()メソッドを呼び出すことにより、すべてのクエリログを取得し、その中の各クエリを通過して記録できます。
データベースクエリログの記録に加えて、ミドルウェアを使用してパフォーマンス監視機能を実装することもできます。たとえば、LaravelのDebugbar拡張機能を使用して、アプリケーションの応答時間を監視できます。これがサンプルコードです:
<?php
namespace App\Http\Middleware;
use Closure;
use Barryvdh\Debugbar\Facade as Debugbar;
class PerformanceMiddleware
{
public function handle($request, Closure $next)
{
$start = microtime(true);
$response = $next($request);
$end = microtime(true);
$executionTime = $end - $start;
// パフォーマンス監視データを追加します
Debugbar::addMeasure('Execution Time', $start, $end);
return $response;
}
}
上記のコードでは、Debugbarのファサードを使用して「実行時間」と呼ばれるパフォーマンスメトリックを追加し、リクエストの実行時間を計算します。また、データベースクエリの数、メモリ使用量など、他のパフォーマンス監視メトリックを追加することもできます。
次に、これらのミドルウェアをアプリケーションに登録する必要があります。 `app/http/kernel.php`ファイルを開き、次のコードを「$ middlewaregroups」プロパティに追加します。
protected $middlewareGroups = [
'web' => [
// 他のミドルウェア...
\App\Http\Middleware\QueryLogMiddleware::class,
\App\Http\Middleware\PerformanceMiddleware::class,
],
];
これにより、QueryLogMiddlewareとPerformanceMiddlewareがWeb Middlewareグループに追加されます。つまり、各Webリクエスト中に実行されることを意味します。
これで、これらのミドルウェアをアプリケーションのルーティングまたはコントローラーメソッドで使用できます。たとえば、 `routes/web.php`ファイルでは、これを使用できます。
Route::middleware(['query.log', 'performance'])->group(function () {
// ルーティング定義...
});
この例は、ミドルウェアをルーティンググループに適用する方法を示しています。また、単一のルートまたはコントローラーメソッドに適用することもできます。
Laravelのミドルウェアを使用することにより、アプリケーションにデータベースクエリとパフォーマンス監視機能を簡単に追加できます。 「querylogmiddleware」を作成して、データベースクエリログを記録し、「performancemiddleware」を介してアプリケーションのパフォーマンスを監視しました。これらのミドルウェアは登録と使用が非常に簡単ですが、アプリケーションの監視と保守性を大幅に向上させます。