Sentryで「沈黙するエラー」を狩り尽くせ:オブザーバビリティの神髄
「Sentryを入れた。SDKも初期化した。なのに、肝心な本番環境のクラッシュが届かない」。
この苛立ちを経験したことがないエンジニアは、まだ本物のシステム運用に向き合えていない証拠です。
オブザーバビリティにおいて、「エラーが捕捉できないこと」は「監視していないこと」と同義であり、それは技術的負債ではなく、ただの怠慢です。Sentryを単なる「エラーログ置き場」から「戦場での生存ツール」に変えるための、現場の知見を叩き込みます。
—
1. エラーが「届かない」のには必ず理由がある
Sentryにエラーが飛んでこない場合、原因は9割が「環境」と「タイミング」の不整合です。
実行順序の罠:Sentry.initは「最初」に書け
最も多いミスが、他のモジュールやフレームワークの初期化よりも後に`Sentry.init`を呼んでいるケースです。特にReactやVueのルーター、またはサードパーティの初期化コードが先に走ると、その過程で発生した例外はSentryに捕捉される前に握り潰されます。
- 鉄則: `main.ts` または `index.ts` の一番上の行に記述してください。
ネットワークの「壁」:AdBlockとCSP
現代のブラウザはSentryのSDKを「トラッキングスクリプト」と誤検知してブロックすることがあります。
- AdBlock対策: Sentryのドメインをプロキシ(`tunnel`オプション)経由で自社ドメイン配下に逃がすのが正解です。
Sentry.init({
dsn: “…”,
tunnel: “/monitoring”, // 自社サーバー経由でSentryへ転送
});
- CSP対策: `Content-Security-Policy`で`sentry.io`への通信が許可されているか確認してください。ここが漏れていると、エラーを送信しようとした瞬間にブラウザから「不審な通信」として遮断されます。
—
2. 実践:デバッグの神髄
「なぜ届かないのか」を推測するのは時間の無駄です。SDK自体のログを吐き出させ、真実を直視しましょう。
デバッグモードの強制起動
初期化時に `debug: true` を設定し、コンソールを凝視してください。
Sentry.init({
dsn: “…”,
debug: true, // 内部の通信状況がコンソールにダンプされる
beforeSend(event) {
console.log(“送信前のイベントデータ:”, event);
return event;
}
});
これで「403 Forbidden」や「CORSエラー」が明確にログとして出力されます。これを無視してはいけません。
—
3. チームの生産性を爆速化する「神」設定
チーム開発では「個人の環境」ではなく「チームの規律」がエラー対応の質を決めます。
推奨:`sentry.config.js` のベストプラクティス
環境変数による制御を徹底し、開発環境でのノイズを排除しつつ、本番の検知漏れを防ぐ構成例です。
{
“dsn”: process.env.VITE_SENTRY_DSN,
“environment”: process.env.NODE_ENV,
“tracesSampleRate”: 0.2, // 開発環境は少なめに、本番はサンプリングを調整
“enabled”: process.env.NODE_ENV === ‘production’,
“integrations”: [
“browserTracing”, // ルーティングとパフォーマンスの自動追跡
“replay” // ユーザーの行動を動画で再現(神機能)
]
}
チーム開発のためのルール
1. Releaseタグの強制: デプロイ時に必ず `release` IDを付与してください。これがないと、どのコミットがバグを生んだのか、Sentryの「Suspect Commits」機能が機能不全に陥ります。
2. Breadcrumbsの活用: `Sentry.addBreadcrumb`を使い、エラー発生直前の「操作履歴」をログに残してください。エラー単体ではなく、「エラーに至る文脈」がバグ修正のスピードを10倍にします。
—
4. 現場で震えるほど役立つ「隠し味」
最後に、エンジニアの質を一段引き上げるテクニックを授けます。
- Keyboard Shortcut: Sentryの画面上で `Cmd + K` (Windowsは `Ctrl + K`) を押してください。コマンドパレットが開き、Issueの検索やプロジェクトの切り替えが爆速になります。マウスでポチポチしている時間は、我々にはありません。
- 神プラグイン: 「Sentry GitHub Integration」は必須です。エラーが発生した瞬間にGitHub Issueが自動作成される設定にしてください。これで「誰が・いつ・なぜ」対応するかが明確になり、チケット起票の時間がゼロになります。
- Error Boundaries: Reactなどを使っている場合、`Sentry.ErrorBoundary`でアプリを囲うのを忘れてはいけません。未捕捉の例外で画面が真っ白(White Screen of Death)になるのを防ぎつつ、その瞬間のスタックトレースを確実に掴み取ります。
最後に
Sentryはただのエラー収集箱ではありません。「ユーザーが体験している痛み」を可視化するレンズです。エラーが届かないなら、そのレンズが曇っているか、蓋がされているだけ。
今日、このチェックリストを全て確認してください。あなたのサービスが「見えないエラー」に蝕まれる時間は、今この瞬間で終わりにしましょう。それが、プロのエンジニアの矜持というものです。