【実務・中級編】Sentryで「Uncaught Exception」を捕捉できないときの原因と解決策チェックリスト – 運用監視・オブザーバビリティ活用バイブル

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はただのエラー収集箱ではありません。「ユーザーが体験している痛み」を可視化するレンズです。エラーが届かないなら、そのレンズが曇っているか、蓋がされているだけ。

今日、このチェックリストを全て確認してください。あなたのサービスが「見えないエラー」に蝕まれる時間は、今この瞬間で終わりにしましょう。それが、プロのエンジニアの矜持というものです。

タイトルとURLをコピーしました