参考サイト
はじめに
こんばんは。
今日はSentryっていうツールを触ってみたので、ちょっと書いておこうと思います。
現在お仕事手伝わせていただいているプロジェクトは結構年代物のプロジェクトで、比較的レガシーな環境で動いています。
testコードもほぼほぼないので、E2E的なテストツールや、バグレポート(検知)を取れるようなツールがないかなーといろいろ探して見つけたのがSentryでした。
フロントエンドのエラーの検知含め、PHPのエラーの検知も可能ということで、これはいいと思い触ってみました。
やってみた
アカウント作成
コチラからアカウント作成します。
確認メールも飛んできますので、Confirmを押してください。
言語選択
アカウント作成が終わると、以下のページに遷移します。
ここで、バグ検知を行う言語を選択できます。
言語以外にも、特有のFWもサポートしているようです。
今回はLaravelでいきたいと思います。
Laravelを選択して、Create Projectを押します。
そうすると、Laravelでの導入方法が記載されたドキュメントページへ移動します。
Sentry-laravelセットアップ
laraveのプロジェクト作成については、割愛します。
自分が上げた昔の記事にlaradockでの開発環境構築を乗せています。
インストールとセットアップはドキュメントにあるとおりにやっていきます。
1. install
$ composer require sentry/sentry-laravel Using version ^0.8.0 for sentry/sentry-laravel ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Installing sentry/sentry (1.8.4): Downloading (100%) - Installing sentry/sentry-laravel (0.8.0): Downloading (100%) Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nunomaduro/collision Discovered Package: sentry/sentry-laravel Package manifest generated successfully.
2. setup
config/app.php
$ vi config/app.php
// providersに追加
Sentry\SentryLaravel\SentryLaravelServiceProvider::class
// aliasに追加
'Sentry' => Sentry\SentryLaravel\SentryFacade::class
app/Exceptions/Handler.php
$ vi app/Exceptions/Handler.php // report()を以下のように修正 public function report(Exception $exception) { if (app()->bound('sentry') && $this->shouldReport($exception)) { app('sentry')->captureException($exception); } parent::report($exception); }
config/sentry.php作成
$ php artisan vendor:publish --provider="Sentry\SentryLaravel\SentryLaravelServiceProvider"
.env修正
$ vi .env
// 以下を追加
SENTRY_DSN=My Sentry DSN URL
エラーが出るように修正してみる
セットアップが終わったら、ダッシュボードに移動します。
今はまだ何もレポートが上がってない状態です。
では、実際にエラーレポートが検知されるようなコードを挟んでみましょう。
routes/web.phpを以下のように修正します。
Route::get('/', function () { return view('aaaa'); // return view('welcome'); });
存在しないテンプレートを表示しようとしているので、laravel側では InvalidArgumentExceptionが出ます。
現状はテストモードなので、laravelがエラーページを表示してくれますが、本番環境の場合は、システムエラーが発生しました的なエラーページが表示されて、ユーザーサポートかなにかをフックにエンジニアがバグに気づく感じかと思います。
Sentryダッシュボードで確認
では、Sentryダッシュボードを再度見てみます。
一件来てます!!
エラーが発生しているコードの場所までキチンと見えます!
Sentryがエラーを検知したらSlackに通知してみる
エラー出るかどうかSentryのダッシュボードを見張っとくわけにもいかないので、新たなissueが上がったらslackに通知するようにしたいです。
連携は簡単にできるみたいなんで、やってみます。
例としてslackでcentry-notificationという名前のチャンネルを作成しました。
そのチャンネルにSentry
と Sentry Notifications
というアプリをセットします。
次ページにSentry上での設定項目が書かれているので、そのとおりに設定します。
以下の画像遷移通りに行けば完了です。
チャンネルにSentryが追加されました。
では早速、エラー出してみましょう。
ではまた同じようにエラー出してみます。
出ました!!
終わりに
これすごくいいですね。
ただ、なんかハマったのが、同じPHPエラーの場合は、毎回Slackへ通知されないような感じがしました。
これはもしかしたらFreeプランだからなのかな?
いや、俺の設定の可能性もある・・・
なんにせよかなり使えます。
まぁ、最近のPHPのプロジェクトだとログ監視とかは普通に行われているとは思うのですが、そうではない現場では結構使えるような気がします。
次はJSのバグ検知もやってみたいと思います。
では。