#はじめに
Laravel Pulse は、アプリケーションのパフォーマンスと使用状況を一目で把握できるツールです。Pulse を使うと、遅いジョブやエンドポイントなどのボトルネックを特定し、最もアクティブなユーザーを見つけることができます。
個別イベントの詳細なデバッグには、Laravel Telescope をご覧ください。
#インストール
Pulse の公式ストレージ実装は現在 MySQL または PostgreSQL データベースを必要とします。別のデータベースエンジンを使用している場合は、Pulse 用に別途 MySQL または PostgreSQL データベースを用意する必要があります。
Pulse は現在ベータ版のため、ベータパッケージのインストールを許可するようにアプリケーションの composer.json ファイルを調整する必要があるかもしれません。
"minimum-stability": "beta",
"prefer-stable": true
その後、Composer パッケージマネージャーを使って Laravel プロジェクトに Pulse をインストールできます。
composer require laravel/pulse
次に、vendor:publish Artisan コマンドを使って Pulse の設定ファイルとマイグレーションファイルを公開してください。
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
最後に、migrate コマンドを実行して Pulse のデータを保存するためのテーブルを作成します。
php artisan migrate
Pulse のデータベースマイグレーションが完了したら、/pulse ルートから Pulse ダッシュボードにアクセスできます。
Pulse のデータをアプリケーションのメインデータベースに保存したくない場合は、専用のデータベース接続を指定できます。
#設定
Pulse の多くの設定オプションは環境変数で制御できます。利用可能なオプションを確認したり、新しいレコーダーを登録したり、高度な設定を行うには、config/pulse.php 設定ファイルを公開してください。
php artisan vendor:publish --tag=pulse-config
#ダッシュボード
#認可
Pulse ダッシュボードは /pulse ルートからアクセスできます。デフォルトでは local 環境でのみアクセス可能なので、本番環境での認可は 'viewPulse' 認可ゲートをカスタマイズして設定してください。これはアプリケーションの app/Providers/AuthServiceProvider.php ファイル内で行えます。
use App\Models\User;
use Illuminate\Support\Facades\Gate;
/**
* 認証/認可サービスを登録します。
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
// ...
}
#カスタマイズ
Pulse ダッシュボードのカードやレイアウトは、ダッシュボードビューを公開して設定できます。ビューは resources/views/vendor/pulse/dashboard.blade.php に公開されます。
php artisan vendor:publish --tag=pulse-dashboard
ダッシュボードは Livewire で動作しており、JavaScript アセットを再構築せずにカードやレイアウトをカスタマイズできます。
このファイル内の <x-pulse> コンポーネントがダッシュボードのレンダリングを担当し、カードのグリッドレイアウトを提供します。画面幅いっぱいにダッシュボードを表示したい場合は、full-width プロップを渡してください。
<x-pulse full-width>
...
</x-pulse>
デフォルトでは <x-pulse> コンポーネントは12カラムのグリッドを作成しますが、cols プロップでカスタマイズできます。
<x-pulse cols="16">
...
</x-pulse>
各カードは cols と rows プロップを受け取り、スペースと配置を制御します。
<livewire:pulse.usage cols="4" rows="2" />
ほとんどのカードは expand プロップも受け取り、スクロールせずにカード全体を表示できます。
<livewire:pulse.slow-queries expand />
#ユーザーの解決
Application Usage カードのようにユーザー情報を表示するカードでは、Pulse はユーザーの ID のみを記録します。ダッシュボードをレンダリングする際、Pulse はデフォルトの Authenticatable モデルから name と email フィールドを解決し、Gravatar ウェブサービスを使ってアバターを表示します。
Pulse::user メソッドをアプリケーションの App\Providers\AppServiceProvider クラス内で呼び出すことで、フィールドやアバターをカスタマイズできます。
user メソッドはクロージャを受け取り、表示する Authenticatable モデルを受け取って、ユーザーの name、extra、avatar 情報を含む配列を返す必要があります。
use Laravel\Pulse\Facades\Pulse;
/**
* アプリケーションサービスをブートストラップします。
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
// ...
}
認証ユーザーの取得と表示方法を完全にカスタマイズしたい場合は、Laravel\Pulse\Contracts\ResolvesUsers インターフェイスを実装し、Laravel の サービスコンテナ にバインドしてください。
#カード
#サーバー
<livewire:pulse.servers /> カードは、pulse:check コマンドを実行しているすべてのサーバーのシステムリソース使用状況を表示します。システムリソースのレポートについては、servers recorder のドキュメントを参照してください。
#アプリケーション使用状況
<livewire:pulse.usage /> カードは、アプリケーションへのリクエスト、ジョブのディスパッチ、遅いリクエストを行う上位10ユーザーを表示します。
すべての使用状況メトリクスを同時に画面に表示したい場合は、カードを複数回含めて type 属性を指定できます。
<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />
Pulse がユーザー情報を取得・表示する方法をカスタマイズするには、ユーザーの解決 のドキュメントを参照してください。
アプリケーションが大量のリクエストを受けたり多くのジョブをディスパッチする場合は、サンプリング を有効にすることを検討してください。詳細は user requests recorder、user jobs recorder、slow jobs recorder のドキュメントを参照してください。
#例外
<livewire:pulse.exceptions /> カードは、アプリケーションで発生した例外の頻度と最新の発生状況を表示します。デフォルトでは、例外は例外クラスと発生場所でグループ化されます。詳細は exceptions recorder のドキュメントを参照してください。
#キュー
<livewire:pulse.queues /> カードは、キューのスループットを表示します。キューに入ったジョブ数、処理中、処理済み、リリース済み、失敗したジョブ数を含みます。詳細は queues recorder のドキュメントを参照してください。
#遅いリクエスト
<livewire:pulse.slow-requests /> カードは、設定された閾値(デフォルトは1,000ms)を超えたアプリケーションへのリクエストを表示します。詳細は slow requests recorder のドキュメントを参照してください。
#遅いジョブ
<livewire:pulse.slow-jobs /> カードは、設定された閾値(デフォルトは1,000ms)を超えたキュー内のジョブを表示します。詳細は slow jobs recorder のドキュメントを参照してください。
#遅いクエリ
<livewire:pulse.slow-queries /> カードは、設定された閾値(デフォルトは1,000ms)を超えたデータベースクエリを表示します。
デフォルトでは、遅いクエリは SQL クエリ(バインディングなし)と発生場所でグループ化されますが、SQL クエリのみでグループ化したい場合は発生場所の記録を無効にできます。
詳細は slow queries recorder のドキュメントを参照してください。
#遅い外部リクエスト
<livewire:pulse.slow-outgoing-requests /> カードは、Laravel の HTTP クライアント を使って行われた外部リクエストのうち、設定された閾値(デフォルトは1,000ms)を超えたものを表示します。
デフォルトでは、エントリーは完全な URL でグループ化されますが、正規表現を使って類似の外部リクエストを正規化またはグループ化することもできます。詳細は slow outgoing requests recorder のドキュメントを参照してください。
#キャッシュ
<livewire:pulse.cache /> カードは、アプリケーションのキャッシュヒットとミスの統計を、グローバルおよび個別のキーごとに表示します。
デフォルトでは、エントリーはキーでグループ化されますが、正規表現を使って類似のキーを正規化またはグループ化することもできます。詳細は cache interactions recorder のドキュメントを参照してください。
#エントリーの記録
ほとんどの Pulse レコーダーは、Laravel が発行するフレームワークイベントに基づいて自動的にエントリーを記録します。ただし、servers recorder や一部のサードパーティカードは定期的に情報をポーリングする必要があります。これらのカードを使うには、すべてのアプリケーションサーバーで pulse:check デーモンを実行してください。
php artisan pulse:check
pulse:check プロセスを常にバックグラウンドで実行し続けるには、Supervisor のようなプロセスマネージャーを使ってコマンドが停止しないようにしてください。
pulse:check コマンドは長時間実行されるプロセスなので、コードベースの変更を検知するには再起動が必要です。アプリケーションのデプロイ時に pulse:restart コマンドを呼び出して、コマンドを安全に再起動してください。
php artisan pulse:restart
Pulse は再起動シグナルの保存に cache を使うため、この機能を使う前にキャッシュドライバーが正しく設定されていることを確認してください。
#レコーダー
レコーダーは、アプリケーションから Pulse データベースに記録するエントリーをキャプチャする役割を持ちます。レコーダーは Pulse 設定ファイル の recorders セクションで登録・設定します。
#キャッシュ操作
CacheInteractions レコーダーは、アプリケーションで発生する cache のヒットとミスの情報をキャプチャし、Cache カードに表示します。
サンプリング率 や無視するキーのパターンをオプションで調整できます。
類似のキーを単一のエントリーとしてグループ化するキーグループ化も設定可能です。例えば、同じ種類の情報をキャッシュするキーからユニークIDを除去したい場合があります。グループは正規表現で「検索と置換」して設定します。設定ファイルに例が含まれています。
Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],
最初にマッチしたパターンが使われます。パターンにマッチしなければ、キーはそのままキャプチャされます。
#例外
Exceptions レコーダーは、アプリケーションで発生した報告可能な例外の情報をキャプチャし、Exceptions カードに表示します。
サンプリング率 や無視する例外のパターンをオプションで調整できます。また、例外の発生場所を記録するかどうかも設定可能です。記録された発生場所は Pulse ダッシュボードに表示され、例外の発生元の特定に役立ちます。ただし、同じ例外が複数の場所で発生すると、それぞれの場所ごとに複数回表示されます。
#キュー
Queues レコーダーは、アプリケーションのキュー情報をキャプチャし、Queues に表示します。
サンプリング率 や無視するジョブのパターンをオプションで調整できます。
#遅いジョブ
SlowJobs レコーダーは、アプリケーションで発生した遅いジョブの情報をキャプチャし、Slow Jobs カードに表示します。
遅いジョブの閾値、サンプリング率、無視するジョブのパターンをオプションで調整できます。
#遅い外部リクエスト
SlowOutgoingRequests レコーダーは、Laravelの HTTP client を使って行われた送信HTTPリクエストのうち、設定された閾値を超えたものの情報をキャプチャし、Slow Outgoing Requests カードに表示します。
遅い送信リクエストの閾値、サンプルレート、および無視するURLパターンは任意で調整できます。
また、類似したURLを単一のエントリとしてグループ化するURLグルーピングを設定できます。例えば、URLパスから一意のIDを除去したり、ドメイン単位でグループ化したりすることが可能です。グループは正規表現を使ってURLの一部を「検索して置換」する形で設定します。設定ファイルにはいくつかの例が含まれています:
Recorders\OutgoingRequests::class => [
// ...
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*', // URLパスの一部をワイルドカードに置換
// '#^https?://([^/]*).*$#' => '\1', // ドメイン名のみを抽出
// '#/\d+#' => '/*', // 数字部分をワイルドカードに置換
],
],
最初にマッチしたパターンが使用されます。どのパターンにもマッチしない場合は、URLはそのままキャプチャされます。
#遅いクエリ
SlowQueries レコーダーは、アプリケーション内で設定された閾値を超えたデータベースクエリをキャプチャし、Slow Queries カードに表示します。
遅いクエリの閾値、サンプルレート、および無視するクエリパターンは任意で調整できます。また、クエリの発生場所をキャプチャするかどうかも設定可能です。キャプチャされた場所はPulseダッシュボードに表示され、クエリの発生元の特定に役立ちます。ただし、同じクエリが複数の場所で実行された場合、それぞれの場所ごとに複数回表示されます。
#遅いリクエスト
Requests レコーダーは、アプリケーションへのリクエスト情報をキャプチャし、Slow Requests および Application Usage カードに表示します。
遅いルートの閾値、サンプルレート、および無視するパスは任意で調整できます。
#サーバー
Servers レコーダーは、アプリケーションを支えるサーバーのCPU、メモリ、ストレージ使用状況をキャプチャし、Servers カードに表示します。このレコーダーを使うには、監視対象の各サーバーで pulse:check コマンド を実行している必要があります。
各レポートサーバーは一意の名前を持つ必要があります。デフォルトでは、PulseはPHPの gethostname 関数の返す値を使用します。カスタマイズしたい場合は、PULSE_SERVER_NAME 環境変数を設定してください:
PULSE_SERVER_NAME=load-balancer
Pulseの設定ファイルでは、監視対象のディレクトリもカスタマイズできます。
#ユーザージョブ
UserJobs レコーダーは、アプリケーション内でジョブをディスパッチするユーザーの情報をキャプチャし、Application Usage カードに表示します。
サンプルレート および無視するジョブパターンは任意で調整できます。
#ユーザーリクエスト
UserRequests レコーダーは、アプリケーションにリクエストを行うユーザーの情報をキャプチャし、Application Usage カードに表示します。
サンプルレート および無視するジョブパターンは任意で調整できます。
#フィルタリング
多くの レコーダー は設定により、リクエストのURLなど特定の値に基づいてエントリを「無視」する機能を提供しています。しかし、認証済みユーザーなど他の条件に基づいてレコードを除外したい場合もあります。その場合、Pulseの filter メソッドにクロージャを渡してフィルタリングできます。通常、filter メソッドはアプリケーションの AppServiceProvider の boot メソッド内で呼び出します:
use Illuminate\Support\Facades\Auth;
use Laravel\Pulse\Entry;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Value;
/**
* アプリケーションサービスのブートストラップ。
*/
public function boot(): void
{
Pulse::filter(function (Entry|Value $entry) {
return Auth::user()->isNotAdmin(); // 管理者でないユーザーのみ許可
});
// ...
}
#パフォーマンス
Pulseは追加のインフラなしで既存のアプリケーションに組み込めるよう設計されています。しかし、高トラフィックのアプリケーションでは、Pulseがパフォーマンスに与える影響を軽減する方法がいくつかあります。
#別のデータベースを使う
高トラフィックのアプリケーションでは、Pulse専用のデータベース接続を使い、アプリケーションのデータベースへの影響を避けることが推奨されます。
Pulseが使用する データベース接続 は、PULSE_DB_CONNECTION 環境変数でカスタマイズできます。
PULSE_DB_CONNECTION=pulse
#Redis インジェスト
Redisインジェストを使うにはRedis 6.2以上と、アプリケーションのRedisクライアントドライバーとして phpredis または predis が必要です。
デフォルトでは、PulseはHTTPレスポンス送信後やジョブ処理後にエントリを直接 設定されたデータベース接続 に保存しますが、PulseのRedisインジェストドライバーを使ってエントリをRedisストリームに送信することもできます。これは PULSE_INGEST_DRIVER 環境変数で有効化します:
PULSE_INGEST_DRIVER=redis
Pulseはデフォルトであなたの Redis接続 を使用しますが、PULSE_REDIS_CONNECTION 環境変数でカスタマイズ可能です:
PULSE_REDIS_CONNECTION=pulse
Redisインジェストを使う場合、pulse:work コマンドを実行してストリームを監視し、RedisからPulseのデータベーステーブルへエントリを移動する必要があります。
php artisan pulse:work
pulse:work プロセスを常にバックグラウンドで動かすには、Supervisorなどのプロセス監視ツールを使い、Pulseワーカーが停止しないようにしてください。
pulse:work コマンドは長時間実行されるプロセスなので、コードベースの変更を認識するには再起動が必要です。アプリケーションのデプロイ時に pulse:restart コマンドを呼び出して、優雅に再起動してください:
php artisan pulse:restart
Pulseは再起動シグナルを保存するために キャッシュ を使うため、この機能を使う前にキャッシュドライバーが正しく設定されていることを確認してください。
#サンプリング
デフォルトでは、Pulseはアプリケーション内で発生するすべての関連イベントをキャプチャします。高トラフィックのアプリケーションでは、特に長期間の集計で数百万行のデータベース行を扱う必要が出てきます。
代わりに、特定のPulseデータレコーダーで「サンプリング」を有効にできます。例えば、User Requests レコーダーのサンプルレートを 0.1 に設定すると、アプリケーションへのリクエストの約10%のみを記録します。ダッシュボードでは値がスケールアップされ、近似値であることを示すために ~ が付加されます。
一般に、特定のメトリクスのエントリ数が多いほど、精度を大きく損なわずにサンプルレートを低く設定できます。
#トリミング
Pulseはダッシュボードの表示期間外になったエントリを自動的にトリミングします。トリミングはロッタリーシステムを使ってデータ取り込み時に行われ、Pulseの 設定ファイル でカスタマイズ可能です。
#Pulse例外の処理
Pulseデータのキャプチャ中に例外が発生した場合(例えばストレージデータベースに接続できない場合など)、アプリケーションに影響を与えないようにPulseは静かに失敗します。
これらの例外処理をカスタマイズしたい場合は、handleExceptionsUsing メソッドにクロージャを渡せます:
use Laravel\Pulse\Facades\Pulse;
use Illuminate\Support\Facades\Log;
Pulse::handleExceptionsUsing(function ($e) {
Log::debug('An exception happened in Pulse', [
'message' => $e->getMessage(),
'stack' => $e->getTraceAsString(),
]);
});
#カスタムカード
Pulseでは、アプリケーション固有のニーズに合わせたデータを表示するカスタムカードを作成できます。Pulseは Livewire を使っているため、最初のカスタムカードを作る前に Livewireのドキュメント を確認するとよいでしょう。
#カードコンポーネント
Laravel Pulseでカスタムカードを作成するには、基本の Card Livewireコンポーネントを拡張し、対応するビューを定義します:
namespace App\Livewire\Pulse;
use Laravel\Pulse\Livewire\Card;
use Livewire\Attributes\Lazy;
#[Lazy]
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers');
}
}
Livewireの レイジーロード 機能を使う場合、Card コンポーネントは自動的に cols と rows 属性を尊重したプレースホルダーを提供します。
Pulseカードの対応ビューを書く際は、PulseのBladeコンポーネントを活用して一貫した見た目を実現できます:
<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s="">
<x-pulse::card-header name="Top Sellers">
<x-slot:icon>
...
</x-slot:icon>
</x-pulse::card-header>
<x-pulse::scroll :expand="$expand">
...
</x-pulse::scroll>
</x-pulse::card>
$cols、$rows、$class、$expand 変数はそれぞれのBladeコンポーネントに渡し、カードのレイアウトをダッシュボードビューからカスタマイズできるようにします。また、ビューに wire:poll.5s="" 属性を含めるとカードが自動更新されます。
Livewireコンポーネントとテンプレートを定義したら、カードを ダッシュボードビュー に含められます:
<x-pulse>
...
<livewire:pulse.top-sellers cols="4" />
</x-pulse>
カードがパッケージに含まれる場合は、Livewire::component メソッドでコンポーネントをLivewireに登録する必要があります。
#スタイリング
カードにPulse付属のクラスやコンポーネント以上のスタイルが必要な場合、カスタムCSSをカードに含める方法がいくつかあります。
#Laravel Vite統合
カスタムカードがアプリケーションのコードベース内にあり、Laravelの Vite統合 を使っている場合、vite.config.js ファイルを更新してカード専用のCSSエントリポイントを追加できます:
laravel({
input: [
'resources/css/pulse/top-sellers.css',
// ...
],
}),
その後、ダッシュボードビュー で @vite Bladeディレクティブを使い、カードのCSSエントリポイントを指定できます:
<x-pulse>
@vite('resources/css/pulse/top-sellers.css')
...
</x-pulse>
#CSSファイル
パッケージ内のPulseカードなど他のケースでは、Livewireコンポーネントに css メソッドを定義し、CSSファイルのパスを返すことで追加のスタイルシートを読み込ませられます:
class TopSellers extends Card
{
// ...
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css'; // CSSファイルのパスを返す
}
}
このカードがダッシュボードに含まれると、Pulseは自動的にこのファイルの内容を <style> タグ内に挿入するため、public ディレクトリに公開する必要はありません。
#Tailwind CSS
Tailwind CSSを使う場合、不要なCSSの読み込みやPulseのTailwindクラスとの競合を避けるために専用のTailwind設定ファイルを作成してください:
export default {
darkMode: 'class',
important: '#top-sellers',
content: [
'./resources/views/livewire/pulse/top-sellers.blade.php',
],
corePlugins: {
preflight: false,
},
};
その後、CSSエントリポイントで設定ファイルを指定できます:
@config "../../tailwind.top-sellers.config.js";
@tailwind base;
@tailwind components;
@tailwind utilities;
カードのビューには、Tailwindの important セレクタ戦略 に渡すセレクタと一致する id または class 属性を含める必要があります:
<x-pulse::card id="top-sellers" :cols="$cols" :rows="$rows" class="$class">
...
</x-pulse::card>
#データのキャプチャと集計
カスタムカードはどこからでもデータを取得して表示できますが、Pulseの強力で効率的なデータ記録・集計システムを活用することもできます。
#エントリのキャプチャ
Pulseは Pulse::record メソッドを使って「エントリ」を記録できます:
use Laravel\Pulse\Facades\Pulse;
Pulse::record('user_sale', $user->id, $sale->amount)
->sum()
->count();
record メソッドの最初の引数は記録するエントリの type、2番目の引数は集計データのグループ化に使う key です。ほとんどの集計メソッドでは集計対象の value も指定する必要があります。上の例では $sale->amount が集計対象の値です。その後、sum のような集計メソッドを1つ以上呼び出し、Pulseが効率的に取得できるように事前集計した値を「バケット」にキャプチャします。
利用可能な集計メソッドは以下の通りです:
avgcountmaxminsum
現在認証されているユーザーIDをキャプチャするカードパッケージを作る場合は、アプリケーションの ユーザーリゾルバーのカスタマイズ を尊重する Pulse::resolveAuthenticatedUserId() メソッドを使うべきです。
#集計データの取得
Pulseの Card Livewireコンポーネントを拡張する際、aggregate メソッドを使ってダッシュボードで表示中の期間の集計データを取得できます:
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers', [
'topSellers' => $this->aggregate('user_sale', ['sum', 'count']);
]);
}
}
aggregate メソッドはPHPの stdClass オブジェクトのコレクションを返します。各オブジェクトは先にキャプチャした key プロパティと、要求した各集計値のキーを含みます:
@foreach ($topSellers as $seller)
{{ $seller->key }}
{{ $seller->sum }}
{{ $seller->count }}
@endforeach
Pulse は主に事前に集計されたバケットからデータを取得します。そのため、指定された集計は Pulse::record メソッドを使って事前にキャプチャされている必要があります。最も古いバケットは通常、期間の一部外にかかるため、Pulse は最も古いエントリを集計してギャップを埋め、各ポーリングリクエストで期間全体を集計することなく、期間全体の正確な値を提供します。
aggregateTotal メソッドを使うと、指定したタイプの合計値を取得できます。例えば、以下のメソッドはユーザーごとにグループ化する代わりに、すべてのユーザーの売上合計を取得します。
$total = $this->aggregateTotal('user_sale', 'sum');
#ユーザーの表示
ユーザーIDをキーとして記録する集計を扱う場合、Pulse::resolveUsers メソッドでキーをユーザーレコードに解決できます:
$aggregates = $this->aggregate('user_sale', ['sum', 'count']);
$users = Pulse::resolveUsers($aggregates->pluck('key'));
return view('livewire.pulse.top-sellers', [
'sellers' => $aggregates->map(fn ($aggregate) => (object) [
'user' => $users->find($aggregate->key),
'sum' => $aggregate->sum,
'count' => $aggregate->count,
])
]);
find メソッドは name、extra、avatar キーを含むオブジェクトを返します。これらはオプションで直接 <x-pulse::user-card> Blade コンポーネントに渡せます:
<x-pulse::user-card :user="{{ $seller->user }}" :stats="{{ $seller->sum }}" />
#カスタムレコーダー
パッケージの作者は、ユーザーがデータのキャプチャを設定できるようにレコーダークラスを提供したい場合があります。
レコーダーはアプリケーションの config/pulse.php 設定ファイルの recorders セクションで登録します:
[
// ...
'recorders' => [
Acme\Recorders\Deployments::class => [
// ...
],
// ...
],
]
レコーダーは $listen プロパティを指定してイベントをリッスンできます。Pulse はリスナーを自動的に登録し、レコーダーの record メソッドを呼び出します:
<?php
namespace Acme\Recorders;
use Acme\Events\Deployment;
use Illuminate\Support\Facades\Config;
use Laravel\Pulse\Facades\Pulse;
class Deployments
{
/**
* リッスンするイベント。
*
* @var list<class-string>
*/
public array $listen = [
Deployment::class,
];
/**
* デプロイメントを記録する。
*/
public function record(Deployment $event): void
{
$config = Config::get('pulse.recorders.'.static::class);
Pulse::record(
// ...
);
}
}