九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、最近はブログ記事にもありますように「React」にハマってしまい、さらにありがたいことに同じ構成で開発までさせていただいているので、私の中ではVue
よりReact
ばかりの生活になってます。
とはいえ、根っからのLaravel Lover
なのでたまにはLaravel
単体の記事も書いてみようかという気分になりました。
そこで、今回やってみようと思ったのが・・・・・・
エラーの検知 & 監視
です。
Laravel
では、エラーや例外が発生したら/storage/logs/laravel.log
にその内容が書き込まれるようになっていますが、このファイルは以下のような内容が延々と続くというものになっています。😂
#0 /var/www/html/l9x-ssr/vendor/laravel/framework/src/Illuminate/Routing/Router.php(430): Illuminate\\Routing\\RouteFileRegistrar->register() #1 /var/www/html/l9x-ssr/vendor/laravel/framework/src/Illuminate/Routing/Router.php(386): Illuminate\\Routing\\Router->loadRoutes() #2 /var/www/html/l9x-ssr/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php(166): Illuminate\\Routing\\Router->group() ...
もちろんアクセス数がとても少ない場合は問題ないかもしれませんが、そうでない場合はテキストを無限に追っていかないといけなくなります。
さらに、開発者としてはエラーの再現のために、
誰がどんな操作をしたのか(パラメータとか)
が喉から手が出るほど欲しかったりしますよね。
そこに登場するのが、「エラー監視サービス」で、ウェブ上でこういった情報を簡単にチェックすることができるようになります。
そこで❗
今回はLaravel
のエラーログ機能に「Bugsnag」を使ってエラー監視をできるようにしてみたいと思います。
※ Bugsnap
には無料プランも用意されています。
ぜひ何かの参考になりましたら嬉しいです。😄✨
「大阪の『踊るうどん』うめぇ❗
むしろ嬉しくて
踊るのはこっちの方です(笑)」
開発環境: Laravel 9.x
目次
Bugsnag にユーザー登録する
まず Bugsnagのユーザー登録ページ にアクセスし、必要な項目を入力&「CREATE ACCOUNT」ボタンをクリックします。
すると、認証メールが送信されてくるので、この中にある「CONFIRM EMAIL」ボタンをクリック。
ページが移動するとメール認証が完了しますので、そのままログインしてください。
ログインすると(おそらく初回だけ)以下の表示になるので「CONTINUE」ボタンをクリック。
ページが切り替わり、「どこで使うの??」の選択になるので、「Server」をクリック。
続けて「言語の選択」画面になるので、「PHP」をクリック。
「フレームワークの選択」画面になるので我らが「Laravel」をクリックします。
次に、プロジェクト名を聞かれるので、お好きな名前を入れて「CONTINUE」ボタンをクリックしましょう。(今回はLaravel Test
という名前を使います)
「共同開発者の招待」画面になるので、今回はskip
します。
すると、インストール方法が書かれたページが表示されますので、このページの説明に沿って作業を続けていきましょう❗
Bugsnag のインストールをする
※ この作業は 2022.11.28 現在のものです。パッケージなどインストール作業は今後更新される可能性がありますので、Bugsnag
が表示するものを優先してインストールしてください。
では、まずはパッケージのインストールです。
以下のコマンドを実行してください。
composer require "bugsnag/bugsnag-laravel:^2.0"
すると、パッケージがインストールされますので、Laravel
側で使えるようにします。(どうやら自動でパッケージを認識するAuto-discovery
の設定がされていないので、自分でセットしないといけないようです)
config/app.php
// 省略 /* * Package Service Providers... */ Bugsnag\BugsnagLaravel\BugsnagServiceProvider::class, // 省略
そして、.env
に「APIキー」をセットします。
キーは現在のページ内に書かれていますのでコピペするだけでOKです。
.env
BUGSNAG_API_KEY=(ここにあなたの API キー)
後は、ログ関連のコンフィグです。
config/logging.php
// 省略 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'bugsnag'], // 👈 ここを追加しました 'ignore_exceptions' => false, ], 'bugsnag' => [ // 👈 ここを追加しました 'driver' => 'bugsnag', ], // 省略
あとは、ページ下部にある「CONTINUE」ボタンをクリックしてダッシュボードへ移動しておいてください。
これで作業は完了です❗
テストしてみる
では、実際にエラーがBugsnag
で確認できるかチェックしてみましょう❗
まず、ルートに以下のコードを追加してください。
routes/web.php
Route::get('bugsnag_test', function(){ throw new \Exception('Bugsnag test'); });
そして、ブラウザから「https://******/bugsnag_test」へアクセスします。
すると、以下のように例外表示になります。
では、Bugsnag
のダッシュボードを確認してみましょう。
どうなったでしょうか・・・・・・
はい❗
ちゃんとエラーが報告されていますね。
成功です 😄
では、中身も見てみましょう❗
こんな感じで例外が発生した場所を表示できたり…
また、REQUEST
タブをクリックすると、パラメータなどの情報を取得することができます。(これはパラメータをつけてアクセスしたものです)
そして、ログインした状態でアクセスすると、以下のようにユーザー情報まで確認することができるようになります。
さらに、登録したメールアドレスには以下のようなメールまで届きます。
すべて成功です ✨😄👍
ちなみに – その1:追加情報もセットする
ときには通常だけの値ではなく他の情報も追加したい場合もあると思います。
そんな場合は以下のようにしてください。
Providers/AppServiceProvider.php
<?php namespace App\Providers; use Bugsnag\BugsnagLaravel\Facades\Bugsnag; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { // 省略 public function boot() { Bugsnag::registerCallback(function ($report) { $report->setMetaData([ 'additional_1' => '追加情報1', 'additional_2' => '追加情報2', 'additional_3' => '追加情報3', ]); }); } }
この状態でエラー送信されると以下のようにチェックすることができるようになります。
ちなみに – その2: 無料プランについて
ユーザー登録した時点では無料プランにはなっていないようですので、もしライトに使いたい場合は以下の手順を行ってください。
まず、ページ右上のトライアルボタンをクリックします。
すると、ポップアップが表示されるので「Lite」を選択し「Continue」ボタンをクリックします。
さらに「Sampling」を選択し、「Continue」ボタンをクリックします。
以下の「できなくなること」が表示されるのでそのまま「Continue」ボタンをクリック。
- フリープランでは1ユーザー単体でしか使えない
- エラー情報が保持されるのは7日間だけ
- 日に 250 件まで
- メールサポートはない
※ 2022.11.28 現在
最後に「Confirm Subscription」ボタンをクリックしたら完了です。
企業様へのご提案
今回のようにエラー監視サービスを利用すると、逐一サイトに障害が出ていないかをチェックすることができるため、結果としてウェブサイトの質を向上させることにつながります。
また、記事中にも書きましたとおり、「エラーの再現をするための情報」を通常より多く確認することができるため、もしエラーが発生したとしても修正するまでの時間を短縮することができます。
なお、今回はBugsnag
でご紹介しましたが、Flare や Sentry も利用可能です。もしこういった機能をご希望の場合はぜひお問い合わせよりご相談ください。
お待ちしております。😄✨
おわりに
ということで今回は「Laravel + Bugsnag」でエラーを監視する機能を実装してみました。
おそらく私だけでなく多くの開発者は「うーん、エラー報告されたけど、情報が少なすぎて特定がムズい…😫」と思ったことは一度や二度ではないと思いますので、こういったサービスを活用できるなら保守業務が楽になるんじゃないでしょうか。
ぜひ皆さんもやってみてくださいね。
ではでは〜❗
「個人的1位❗
中村屋のコロッケ
買えなかった…😫」