なみひらブログ

学んだことを日々記録する。~ since 2012/06/24 ~

Laravel Telescopeの導入メモと初見の所感

※この記事は Laravel #2 Advent Calendar 2019 - Qiita の24日目の記事です。

概要

これまでLaravelを関連ツールを使わずに素だけ(?)で使っていたので、デバック用にLaravel Telescopeを入れてみました。
その作業メモと見てみた所感を書いてみます。
※真実:Adventカレンダーの投稿ネタのために導入。きっかけをありがとう(* ´ω`*)

前提

Laravel Telescope

Laravel界隈でデバッグツールを言えば、まず「Laravel Debugbar」らしいですが、Laravel公式がver5.7からデバッグツールをリリースしたらしいです。
Laravel Telescope 5.7 Laravel

動作環境

Laravel 5.8

導入

基本的に公式ページに記載している通りです。 readouble.com

とりわけ気になった点と少し対応した点について記載します。

composerで導入

デフォルトでは入っていないのでcomposerで入れる。

composer require laravel/telescope

アセットの公開と、データベーステーブル追加

php artisan telescope:install
php artisan migrate

以下のファイルが生成される。

  • app/Providers/TelescopeServiceProvider.php
  • config/app.phpに「App\Providers\TelescopeServiceProvider::class,」の記載追加
  • データベースにログ用のテーブル「telescope_xx」が追加される。

migrations配下にDDLファイルが生成されなかったので「rollbackできない?別管理?」と思いましたが、

php artisan migrate:rollback --step=1

とすると、先ほど作成したtelescope用テーブルが削除されたので同じバージョン管理配下っぽい。(stepの指定とか間違えそう)

設定

コード修正

isLocal()に呼び出しできないエラーが出てたのでenv指定に変更した。
app/Providers/TelescopeServiceProvider.php

 public function register()
 {
// before    if ($this->app->isLocal()) {
// after     if ($this->app->environment('local')) {
                        ...

アクセス制御

本来はgate()内で認証済みユーザ情報で認可チェックしますが、作っているサイトに認証機能がないので一時的なランダムパスなパスを設定することで隠す(?)。

.env

TELESCOPE_PATH=***/***/***

ログの定期破棄

ほっとくとテーブルにどんどんログが溜まっていくので定期的に削除するスケジューラを追加した(毎日24時に前日分削除)。

Kernel.php

protected function schedule(Schedule $schedule)
{
    ...
    $schedule->command('telescope:prune')->daily();
    ...
}

動作確認

上記で設定したパスにアクセスすると画面が表示されました。

Logsは以下で出力したログが集まっている。

use Illuminate\Support\Facades\Log;

     ...
      Log::info('hoge foo');
     ...

所感

導入しただけで使いこなしていないですが、初見の所感です。

  • 1つのHTTPリクエストで発行された一連のログ・SQLクエリが見れるのが良い。
  • リアルタイムでHTTPリクエスト/レスポンスの内容を見たいときはブラウザのDevツールで十分そう。
  • リアルタイムで1箇所のLogや例外を見たいときは現状Slackに投げているので不要そう。
  • 1リクエストに紐づくログ、過去ログや傾向を見たいときに出番がありそう
  • 「UI使わずにデータベースのテーブルを直接参照して何か解析できる?」と思いましたが、1カラムにJSON(≒No SQLっぽい)で格納されているので解析はきつそう
  • Scheduleログはcronの実行条件ぐらいしか出ないのであまり参考にならない。HTTPと同じように、1回のScheduleジョブにぶら下げる形で一連のログ/SQLログがみたい。

まとめ

ログって大事(* ´ω`*)