Nest.js に React.js 版パッケージの Sentry を導入する
January 23, 2022
Sentry には Next.js 用のパッケージがありますが、ここでは React.js 版のパッケージを導入します。
Next.js 用パッケージの説明にもありますが、Next.js 版は @sentry/react
と @sentry/node
をラッピングしたものです。
This package is a wrapper around @sentry/node for the server and @sentry/react for the client, with added functionality related to Next.js.
Next.js は クライアントおよびサーバサイドで動かすことが標準なので、両環境に対応したパッケージとなっています。
私は Next.js をクライアントサイドのみで使用しているため、その場合は React.js 版の @sentry/react
で十分です。
FYI:
- React.js 用公式ドキュメント:React | Sentry Documentation
- Next.js 用公式ドキュメント:Next.js | Sentry Documentation
パッケージをインストールする #
パッケージをインストールします。
npm i @sentry/react @sentry/tracing
使用例 #
これは公式の React でのサンプル例です。以下のように初期化処理を行います。
import React from 'react';
import ReactDOM from 'react-dom';
import * as Sentry from '@sentry/react';
import { Integrations } from '@sentry/tracing';
import App from './App';
Sentry.init({
dsn: 'https://abcdefghijklmnopqrstuvwxyz012345678999999.ingest.sentry.io/0123456',
integrations: [new Integrations.BrowserTracing()],
// Set tracesSampleRate to 1.0 to capture 100%
// of transactions for performance monitoring.
// We recommend adjusting this value in production
tracesSampleRate: 1.0,
});
ReactDOM.render(<App />, document.getElementById('root'));
// Can also use with React Concurrent Mode
// ReactDOM.createRoot(document.getElementById('root')).render(<App />);
あとはコンポーネントのなかでエラーを throw したり、通知用のメソッドを呼び出せば Sentry に通知されます。
なお、DSN は Data Source Name の略のようです。データの発生元の意ですが、Sentry のどのプロジェクトに対してエラーを報告するかと捉えた方がわかりやすいかもしれません。つまりここに自分のプロジェクトの DSN を指定します。
Data Source Name (DSN) | Sentry Documentation
DSN は Sentry の設定画面から確認できます。
使用確認 #
さっそく使用してみます。
import * as Sentry from '@sentry/react';
import { Integrations } from '@sentry/tracing';
const SENTRY_DSN = 'https://abcdefghijklmnopqrstuvwxyz012345678999999.ingest.sentry.io/0123456';
export class Logger {
public static init = () => {
Sentry.init({
dsn: SENTRY_DSN,
integrations: [new Integrations.BrowserTracing()],
tracesSampleRate: 1.0,
});
};
public static error = (e?: Error) => {
Sentry.captureException(e);
};
}
そして _app.tsx
で Logger.init()
を実行します。
その後は各コンポーネントの中でエラーを通知します。
エラーを throw すると自動的に Sentry に通知されるほか、throw 以外で通知したいケースは Logger.error()
を使用します。
useEffect(() => {
throw new Error('Report an error automatically.');
}, []);
useEffect(() => {
Sentry.error(new Error('Report an error manually.'));
}, []);
補足 #
実際には本番環境からのみエラーを通知し、開発環境では通知を止めたいはずです。その場合は Sentry.init()
の dsn
に undefined
か空文字 ""
を渡します。これでエラーは通知されません。