Closed30

SentryをNext.js13に導入したい

hajimismhajimism
hajimismhajimism

In particular, building with Turbopack will currently cause the Sentry SDK not to be included in your app.

Turbopackは今んとこムリ

hajimismhajimism

Automatic Performance Monitoring for both the client and server, from version 6.5.0

こんなこともやってくれるのか

hajimismhajimism

Under the hood the SDK relies on our React SDK on the frontend and Node SDK on the backend, which makes all features available in those SDKs also available in this SDK.

React / Node SDKの内容も確認する必要がありそう

hajimismhajimism
npx @sentry/wizard -s -i nextjs

こっちでやったら@sentry/nextjs isn't in your dependencies.と怒られた。
yarn addしたら通った

hajimismhajimism

client, server, edgeと3種類のconfigファイルが生成された。
それぞれにwizardcopyっていうファイルがあって、さらにpropertiesファイルもある。
多いな。

hajimismhajimism

Error: Event handlers cannot be passed to Client Component props.
<button type="button" style={{...}} onClick={function} children=...>
^^^^^^^^^^
If you need interactivity, consider converting part of this to a Client Component.

sampleのbuttonをHomeに追加したらエラーになった。それはそう。

hajimismhajimism

↑このエラー自体をキャッチしてくれていたので自ずと検証ができたw

hajimismhajimism

どこを見れば楽しいかよくわからないので一旦Zenn記事漁る

hajimismhajimism
hajimismhajimism

エラーが送信されても、そのエラーがどのユーザーによって起こされたものか分からなければ意味は半減します。

login処理のときについでにsetUserすればよいのかな

hajimismhajimism

ユーザーがエラーを起こしたことが特定できても、その直前まで何をしていたのか、という文脈が重要になることはあります。たとえばチャットアプリを開発していて、チャットメッセージの送信直後にエラーが出ていた場合などです。

その文脈はSentryではBreadcrumbsという機能で保存できます。

Breadcrambのpopは勝手にやってくれるのかな

hajimismhajimism

特にWebフロントエンドでは、ブラウザ依存のエラーなどどうしようもないエラーログがしょっちゅう流れますし、Network Errorなどユーザー側の通信状況に依存するようなエラーが流れることも多いです。これらのエラーが毎回Slackに流れるとうるさいので、マナリンクの場合はIssueの詳細画面で「Ignore」を押してAlertの対象外にしています。

トリアージの問題はたしかにあるな

hajimismhajimism
hajimismhajimism

エラーが通知されたとき、即座に対応する必要があるものもあれば、一時的なものや短期的には許容したいものがあります。いずれにしても、定期的にトリアージしなければSentry上にissueとしてたまり続ける一方です。自分が所属しているチームでは、週に一度30分、スクラムのレトロスペクティブ・プランニングをやる前にissueのトリアージを行うことにしました。

週次のルーティンにするのは良さそう

hajimismhajimism

現状すべてのエラーを通知する必要がないため、アプリケーション側でフィルタリングしています。原則アプリケーションサーバーへのリクエストが共通して通過する部分で、ステータスコードが500系の場合のみ通知されるように実装しています。

エラーコードの詳細な場合分けよくわかってない

hajimismhajimism
hajimismhajimism

ignoreErrors では、無視したい (Sentry に通知しない) エラーを設定しています。
メンテナンスモード時の通信エラーや、利用しているモジュール側で発生するエラーなど、開発側で想定済みのエラーを ignore の対象にしています。

hajimismhajimism

UI の一部に不具合があった際、React 16 以降では error boundary という機構により、子コンポーネントのエラーを親コンポーネントでキャッチ出来ます。

app dirだとerror.tsで呼べるのかな

hajimismhajimism

Magic Moment Playbook 上で通信エラーが起きた際は、スナックバーの UI コンポーネント AlertSnackbar.tsx を表示させるようにしていますので、try / catch で拾ったエラーの大半はこのコンポーネントから Sentry に通知させています。

こういうのもいいね

このスクラップは2023/02/03にクローズされました