Laravel Telescope¶
はじめに¶
Laravel Telescope は、ローカルのLaravel開発環境に最適な相棒です。Telescopeは、アプリケーションに入ってくるリクエスト、例外、ログエントリ、データベースクエリ、キュージョブ、メール、通知、キャッシュ操作、スケジュールされたタスク、変数ダンプなどについての洞察を提供します。
インストール¶
Composerパッケージマネージャを使用して、TelescopeをLaravelプロジェクトにインストールできます:
Telescopeをインストールした後、telescope:install
Artisanコマンドを使用してそのアセットとマイグレーションを公開します。Telescopeをインストールした後、Telescopeのデータを保存するために必要なテーブルを作成するためにmigrate
コマンドも実行する必要があります:
最後に、/telescope
ルートからTelescopeダッシュボードにアクセスできます。
ローカル限定インストール¶
ローカル開発のみでTelescopeを使用する予定の場合は、--dev
フラグを使用してTelescopeをインストールできます:
telescope:install
を実行した後、アプリケーションのbootstrap/providers.php
設定ファイルからTelescopeServiceProvider
サービスプロバイダの登録を削除する必要があります。代わりに、App\Providers\AppServiceProvider
クラスのregister
メソッドでTelescopeのサービスプロバイダを手動で登録します。現在の環境がlocal
であることを確認してからプロバイダを登録します:
/**
* 任意のアプリケーションサービスを登録します。
*/
public function register(): void
{
if ($this->app->environment('local')) {
$this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
$this->app->register(TelescopeServiceProvider::class);
}
}
最後に、Telescopeパッケージが自動検出されないように、composer.json
ファイルに以下を追加する必要があります:
設定¶
Telescopeのアセットを公開した後、その主要な設定ファイルはconfig/telescope.php
に配置されます。この設定ファイルでは、ウォッチャーオプションを設定できます。各設定オプションにはその目的の説明が含まれているため、このファイルを徹底的に確認してください。
必要に応じて、enabled
設定オプションを使用してTelescopeのデータ収集を完全に無効にすることができます:
'enabled' => env('TELESCOPE_ENABLED', true),
データの整理¶
整理を行わない場合、telescope_entries
テーブルはレコードを非常に迅速に蓄積する可能性があります。これを軽減するために、telescope:prune
Artisanコマンドを毎日実行するようにスケジュールする必要があります:
use Illuminate\Support\Facades\Schedule;
Schedule::command('telescope:prune')->daily();
デフォルトでは、24時間以上前のすべてのエントリが整理されます。コマンドを呼び出す際にhours
オプションを使用して、Telescopeデータを保持する期間を決定できます。たとえば、次のコマンドは48時間以上前に作成されたすべてのレコードを削除します:
use Illuminate\Support\Facades\Schedule;
Schedule::command('telescope:prune --hours=48')->daily();
ダッシュボードの認可¶
Telescopeダッシュボードは/telescope
ルートからアクセスできます。デフォルトでは、このダッシュボードにはlocal
環境でのみアクセスできます。app/Providers/TelescopeServiceProvider.php
ファイル内には、認可ゲートの定義があります。この認可ゲートは、非ローカル環境でのTelescopeへのアクセスを制御します。必要に応じて、このゲートを自由に変更してTelescopeのインストールへのアクセスを制限できます:
use App\Models\User;
/**
* Telescopeゲートを登録します。
*
* このゲートは、非ローカル環境で誰がTelescopeにアクセスできるかを決定します。
*/
protected function gate(): void
{
Gate::define('viewTelescope', function (User $user) {
return in_array($user->email, [
'taylor@laravel.com',
]);
});
}
Warning
本番環境では、APP_ENV
環境変数をproduction
に変更するようにしてください。そうしないと、Telescopeのインストールが公開されてしまいます。
Telescopeのアップグレード¶
Telescopeの新しいメジャーバージョンにアップグレードする際には、アップグレードガイドを注意深く確認することが重要です。
さらに、新しいTelescopeバージョンにアップグレードする際には、Telescopeのアセットを再公開する必要があります:
アセットを最新の状態に保ち、将来のアップデートで問題が発生しないようにするために、アプリケーションのcomposer.json
ファイルのpost-update-cmd
スクリプトにvendor:publish --tag=laravel-assets
コマンドを追加することができます:
{
"scripts": {
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
]
}
}
フィルタリング¶
エントリ¶
App\Providers\TelescopeServiceProvider
クラスで定義されたfilter
クロージャを介して、Telescopeによって記録されるデータをフィルタリングできます。デフォルトでは、このクロージャはlocal
環境ですべてのデータを記録し、例外、失敗したジョブ、スケジュールされたタスク、および監視されたタグを持つデータを他のすべての環境で記録します:
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
/**
* 任意のアプリケーションサービスを登録します。
*/
public function register(): void
{
$this->hideSensitiveRequestDetails();
Telescope::filter(function (IncomingEntry $entry) {
if ($this->app->environment('local')) {
return true;
}
return $entry->isReportableException() ||
$entry->isFailedJob() ||
$entry->isScheduledTask() ||
$entry->isSlowQuery() ||
$entry->hasMonitoredTag();
});
}
バッチ¶
filter
クロージャは個々のエントリのデータをフィルタリングしますが、filterBatch
メソッドを使用して、特定のリクエストまたはコンソールコマンドのすべてのデータをフィルタリングするクロージャを登録できます。クロージャがtrue
を返す場合、すべてのエントリがTelescopeによって記録されます:
use Illuminate\Support\Collection;
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
/**
* 任意のアプリケーションサービスを登録します。
*/
public function register(): void
{
$this->hideSensitiveRequestDetails();
Telescope::filterBatch(function (Collection $entries) {
if ($this->app->environment('local')) {
return true;
}
return $entries->contains(function (IncomingEntry $entry) {
return $entry->isReportableException() ||
$entry->isFailedJob() ||
$entry->isScheduledTask() ||
$entry->isSlowQuery() ||
$entry->hasMonitoredTag();
});
});
}
タグ付け¶
Telescopeでは、"タグ"によってエントリを検索できます。多くの場合、タグはEloquentモデルのクラス名や認証されたユーザーのIDであり、Telescopeは自動的にエントリに追加します。ときには、エントリに独自のカスタムタグを添付したい場合があります。これを実現するために、Telescope::tag
メソッドを使用できます。tag
メソッドは、タグの配列を返すべきクロージャを受け取ります。クロージャによって返されたタグは、Telescopeが自動的にエントリに添付するタグとマージされます。通常、App\Providers\TelescopeServiceProvider
クラスのregister
メソッド内でtag
メソッドを呼び出す必要があります:
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
/**
* 任意のアプリケーションサービスを登録します。
*/
public function register(): void
{
$this->hideSensitiveRequestDetails();
Telescope::tag(function (IncomingEntry $entry) {
return $entry->type === 'request'
? ['status:'.$entry->content['response_status']]
: [];
});
}
利用可能なウォッチャー¶
Telescopeの「ウォッチャー」は、リクエストやコンソールコマンドが実行されたときにアプリケーションデータを収集します。config/telescope.php
設定ファイル内で、有効にしたいウォッチャーのリストをカスタマイズできます。
'watchers' => [
Watchers\CacheWatcher::class => true,
Watchers\CommandWatcher::class => true,
...
],
一部のウォッチャーでは、追加のカスタマイズオプションを提供しています。
'watchers' => [
Watchers\QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'slow' => 100,
],
...
],
Batch Watcher¶
Batchウォッチャーは、キューに入れられたバッチに関する情報を記録します。これには、ジョブと接続情報が含まれます。
Cache Watcher¶
Cacheウォッチャーは、キャッシュキーがヒット、ミス、更新、削除されたときにデータを記録します。
Command Watcher¶
Commandウォッチャーは、Artisanコマンドが実行されたときに引数、オプション、終了コード、および出力を記録します。特定のコマンドをウォッチャーによる記録から除外したい場合は、config/telescope.php
ファイル内のignore
オプションで指定できます。
'watchers' => [
Watchers\CommandWatcher::class => [
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
'ignore' => ['key:generate'],
],
...
],
Dump Watcher¶
Dumpウォッチャーは、変数のダンプをTelescopeに記録して表示します。Laravelを使用している場合、グローバルなdump
関数を使用して変数をダンプできます。Dumpウォッチャータブがブラウザで開いている場合にのみ、ダンプが記録されます。それ以外の場合、ダンプはウォッチャーによって無視されます。
Event Watcher¶
Eventウォッチャーは、アプリケーションによってディスパッチされたイベントのペイロード、リスナー、およびブロードキャストデータを記録します。Laravelフレームワークの内部イベントは、Eventウォッチャーによって無視されます。
Exception Watcher¶
Exceptionウォッチャーは、アプリケーションによってスローされた報告可能な例外のデータとスタックトレースを記録します。
Gate Watcher¶
Gateウォッチャーは、アプリケーションによるゲートとポリシーのチェックのデータと結果を記録します。特定の能力をウォッチャーによる記録から除外したい場合は、config/telescope.php
ファイル内のignore_abilities
オプションで指定できます。
'watchers' => [
Watchers\GateWatcher::class => [
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
'ignore_abilities' => ['viewNova'],
],
...
],
HTTP Client Watcher¶
HTTP Clientウォッチャーは、アプリケーションによって行われた送信HTTPクライアントリクエストを記録します。
Job Watcher¶
Jobウォッチャーは、アプリケーションによってディスパッチされたジョブのデータとステータスを記録します。
Log Watcher¶
Logウォッチャーは、アプリケーションによって書き込まれたログデータを記録します。
デフォルトでは、Telescopeはerror
レベル以上のログのみを記録します。ただし、アプリケーションのconfig/telescope.php
設定ファイル内のlevel
オプションを変更して、この動作を変更できます。
'watchers' => [
Watchers\LogWatcher::class => [
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
'level' => 'debug',
],
// ...
],
Mail Watcher¶
Mailウォッチャーを使用すると、アプリケーションによって送信されたメールのブラウザ内プレビューと関連データを表示できます。また、メールを.eml
ファイルとしてダウンロードすることもできます。
Model Watcher¶
Modelウォッチャーは、Eloquent モデルイベントがディスパッチされるたびにモデルの変更を記録します。ウォッチャーのevents
オプションを介して、どのモデルイベントを記録するかを指定できます。
'watchers' => [
Watchers\ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.created*', 'eloquent.updated*'],
],
...
],
特定のリクエスト中にハイドレートされたモデルの数を記録したい場合は、hydrations
オプションを有効にします。
'watchers' => [
Watchers\ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.created*', 'eloquent.updated*'],
'hydrations' => true,
],
...
],
Notification Watcher¶
Notificationウォッチャーは、アプリケーションによって送信されたすべての通知を記録します。通知がメールをトリガーし、Mailウォッチャーが有効になっている場合、メールはMailウォッチャー画面でもプレビューできます。
Query Watcher¶
Queryウォッチャーは、アプリケーションによって実行されたすべてのクエリの生のSQL、バインディング、および実行時間を記録します。ウォッチャーは、100ミリ秒以上かかるクエリにslow
タグを付けます。ウォッチャーのslow
オプションを使用して、遅いクエリのしきい値をカスタマイズできます。
'watchers' => [
Watchers\QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'slow' => 50,
],
...
],
Redis Watcher¶
Redisウォッチャーは、アプリケーションによって実行されたすべてのRedisコマンドを記録します。キャッシュにRedisを使用している場合、キャッシュコマンドもRedisウォッチャーによって記録されます。
Request Watcher¶
Requestウォッチャーは、アプリケーションによって処理されたリクエストに関連するリクエスト、ヘッダー、セッション、およびレスポンスデータを記録します。size_limit
(キロバイト単位)オプションを介して、記録されるレスポンスデータを制限できます。
'watchers' => [
Watchers\RequestWatcher::class => [
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
],
...
],
Schedule Watcher¶
Scheduleウォッチャーは、アプリケーションによって実行されたスケジュールされたタスクのコマンドと出力を記録します。
View Watcher¶
Viewウォッチャーは、ビューのレンダリング時に使用されたビューの名前、パス、データ、および「コンポーザー」を記録します。
ユーザーアバターの表示¶
Telescopeダッシュボードは、特定のエントリが保存されたときに認証されたユーザーのユーザーアバターを表示します。デフォルトでは、TelescopeはGravatarウェブサービスを使用してアバターを取得します。ただし、App\Providers\TelescopeServiceProvider
クラスにコールバックを登録することで、アバターのURLをカスタマイズできます。コールバックはユーザーのIDとメールアドレスを受け取り、ユーザーのアバター画像のURLを返す必要があります。
use App\Models\User;
use Laravel\Telescope\Telescope;
/**
* アプリケーションサービスの登録
*/
public function register(): void
{
// ...
Telescope::avatar(function (string $id, string $email) {
return '/avatars/'.User::find($id)->avatar_path;
});
}