【入門編】【React/Next.js】Rollbar導入ガイド:フロントエンドのエラーを完全捕捉する – 運用監視・オブザーバビリティ活用バイブル
Rollbar
こんにちは!フロントエンドの開発現場で、日々コンソールの赤文字やユーザーからの「画面が真っ白になりました…」という報告に冷や汗をかいていませんか?
「ローカルでは完璧に動いていたのに、なぜ本番環境の、しかも特定のユーザーの環境でだけエラーが起きるのか……」
このモダンフロントエンド開発における永遠の呪縛を断ち切るために不可欠なのが、今回紹介するRollbarです。
今回は、ReactおよびNext.jsのアプリケーションにRollbarを組み込み、ブラウザの向こう側で起きているエラーを完全に手掌に収めるための実践ガイドをお届けします。これをマスターすれば、明日からのエラー調査のストレスが劇的に軽くなりますよ。一緒に見ていきましょう!
—
なぜ、フロントエンドに「Rollbar」が必要なのか?
私たちが普段書いているReactやNext.jsのコードは、最終的にユーザーのブラウザ(クライアントサイド)で実行されます。つまり、エラーが起きた場所は開発者の手元ではなく、ユーザーの端末の中です。
- ユーザーは「エラーが出ました」と言ってくれても、再現手順やコンソールのログまでは教えてくれません。
- Sentryと並び、Rollbarはこの「ブラウザのブラックボックス」で起きた例外、未処理のPromise rejection、そしてコンポーネントのクラッシュを瞬時にキャッチし、「どのコードの、何行目で、どのブラウザを使っている誰に起きたか」をピンポイントで教えてくれる最強のエラートラッカーです。
それでは早速、Next.js(App Router / Pages Router共通の概念)およびReact環境への導入を進めていきましょう。
—
ステップ1:パッケージのインストール
まずは、Reactエコシステム専用に洗練された公式パッケージをインストールします。npmでもyarnでもpnpmでもお好みのものを使ってください。
npm install rollbar @rollbar/react
- `rollbar`: コアとなるJavaScript SDK。
- @rollbar/react`: Reactのコンテキストやライフサイクル、そして何よりErrorBoundaryをエレガントに統合するためのバインディング。
インストールが終わったら、Rollbarのダッシュボードから「Access Token(Client Token)」を取得しておいてください。環境変数(`.env.local`など)に設定するのが鉄則です。
NEXT_PUBLIC_ROLLBAR_ACCESS_TOKEN=your_client_access_token_here
NEXT_PUBLIC_ROLLBAR_ENVIRONMENT=development
(※Next.jsの場合は、クライアントサイドで参照するために `NEXT_PUBLIC_` 接頭辞を忘れずに)
—
ステップ2:基本セットアップと Provider の配置
RollbarをReactツリー全体で利用できるように、プロバイダーを設定します。Next.jsであれば、ルートレイアウト(`app/layout.tsx`)やカスタムApp(`pages/_app.tsx`)の最上位に組み込むのが定石です。
ここでは、モダンなNext.js App Routerを例に見てみましょう。
// app/providers.tsx
‘client’
import React from ‘react’;
import { Provider as RollbarProvider, ErrorBoundary } from ‘@rollbar/react’;
// Rollbarの初期化設定
const rollbarConfig = {
accessToken: process.env.NEXT_PUBLIC_ROLLBAR_ACCESS_TOKEN,
environment: process.env.NEXT_PUBLIC_ROLLBAR_ENVIRONMENT || ‘development’,
captureUncaught: true, // キャッチされない例外を拾う
captureUnhandledRejections: true, //非同期処理のunhandled rejectionを拾う
// ソースマップ対応時などに有用なペイロード設定
payload: {
client: {
javascript: {
source_map_enabled: true,
code_version: ‘1.0.0’,
},
},
},
};
export function Providers({ children }: { children: React.ReactNode }) {
return (
{/ ErrorBoundaryで子コンポーネント全体をラップし、画面全体のクラッシュを防ぐ /}
予期せぬエラーが発生しました。再読み込みしてください。
}>
{children}
);
}
この設計の美しいところは、単にエラーを送信するだけでなく、`` がコンポーネントツリーの爆発(画面の白パカ)を防ぎつつ、そのエラーを自動的にRollbarへ飛ばしてくれる点です。
—
ステップ3:精度高い「HelloWorld」動作確認
正しく設定できているか、意図的にエラーを起こしてテスト(HelloWorld)してみましょう。ボタンをクリックした瞬間に例外を投げるだけのシンプルなコンポーネントを作ります。
// components/ErrorTestButton.tsx
‘client’
import React from ‘react’;
import { useRollbar } from ‘@rollbar/react’;
export function ErrorTestButton() {
const rollbar = useRollbar();
const handleTriggerError = () => {
try {
// 意図的なエラーを発生させる
throw new Error(‘【Rollbarテスト】フロントエンドからの手動テストエラーです!’);
} catch (error) {
// 1. useRollbarフックを使って明示的にエラーを送信するパターン
rollbar.error(error);
}
};
const handleCrashComponent = () => {
// 2. ErrorBoundaryにキャッチさせるための意図的なレンダーエラー
throw new Error(‘【Rollbarテスト】ErrorBoundaryの動作確認用クラッシュ’);
};
return (
Rollbar 動作確認パネル
);
}
これをページに配置して実際にボタンを押してみてください。数秒後、Rollbarのダッシュボード(Items画面)を確認すると、スタックトレース付きで見事にエラーがキャッチされているはずです。感動の瞬間ですね!
—
ステップ4:現場で役立つ「カスタムデータ」の送信ノウハウ
単にエラー文言を飛ばすだけでは、プロのオブザーバビリティとは言えません。「誰が」「どんな状態の時に」そのエラーを踏んだのかという文脈(Context)を添えることで、デバッグのスピードは10倍になります。
1. ユーザー情報の紐付け(User Context)
ログイン中のユーザーIDやメールアドレスをRollbarに教えておきましょう。これにより、「VIP顧客の〇〇さんだけがこのエラーを踏んでいる」といった重大なビジネスインパクトに即座に気づけます。
import { useEffect } from ‘react’;
import { useRollbar } from ‘@rollbar/react’;
function useUserTracking(user: { id: string; username: string; email: string } | null) {
const rollbar = useRollbar();
useEffect(() => {
if (user) {
rollbar.configure({
payload: {
person: {
id: user.id,
username: user.username,
email: user.email,
},
},
});
} else {
// ログアウト時
rollbar.configure({
payload: {
person: null,
},
});
}
}, [user, rollbar]);
}
2. カスタムメタデータの付与
APIリクエストのパラメータや、直前に行っていた操作(パンくずリスト的な情報)をログに添えることも可能です。
try {
await api.updateProfile(data);
} catch (error) {
// ユーザーの入力状態や追加コンテキストを添えて送信
rollbar.error(error, {
customContext: {
action: ‘updateProfile’,
inputDataSize: JSON.stringify(data).length,
step: ‘form_submission’,
},
});
}
—
先輩エンジニアからのアドバイス:ソースマップの導入を忘れずに!
本番環境にデプロイされたReact/Next.jsのコードは、通常WebpackやVite、Turbopackによって「難読化(Minify)」されています。そのため、Rollbarに届くエラーのスタックトレースも `bundle.min.js: confused line 1:29482` のようになってしまい、読めません。
本番運用を始める前に、ビルド時に生成されるソースマップ(Source Maps)をRollbarへアップロードする仕組み(RollbarのCI/CDプラグインやwebpackpluginなど)を必ずセットアップしてください。これを行うことで、ダッシュボード上で「元の綺麗なTypeScriptのコードの行数」でエラー箇所が表示されるようになり、デバッグ体験が神がかったものに進化します。
—
まとめ
- `@rollbar/react` を使えば、数行の設定でReactエコシステムに堅牢なエラー監視を組み込める。
- `` で画面全体のエラー爆発を防ぎつつ、自動でレポート。
- `useRollbar` フックを活用して、ユーザー情報やカスタムコンテキストを添えれば、現場で即座に原因特定ができる無敵の体制が整う。
フロントエンドのエラーに怯える日々に終止符を打ち、コントローラブルで安心できる開発ライフを手に入れましょう。あなたのアプリケーションの品質が、今日から確実にワンランク上がりますよ!