React×Sentryで実現する実践的なエラー監視
株式会社TimeTree / Cyno
メンバー / フロントエンドエンジニア / 従業員規模: 101名〜300名 / エンジニア組織: 51名〜100名
| 利用プラン | 利用機能 | ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
|---|---|---|---|---|
Team | Error Monitoring, Alerts, Release Tracking, Source Maps | 11名〜50名 | 2017年5月 | B to C |
| 利用プラン | Team |
|---|---|
| 利用機能 | Error Monitoring, Alerts, Release Tracking, Source Maps |
| ツールの利用規模 | 11名〜50名 |
| ツールの利用開始時期 | 2017年5月 |
| 事業形態 | B to C |
アーキテクチャ

アーキテクチャの意図・工夫
TimeTree の特徴は、Sentry・Debug Mode・自作 AI トリアージという 3 つの仕組みを連携させ、「検知」だけで終わらずに「トリアージ」や「カスタマーサポート連携」までをひとつの流れでつないでいるところにあります。
主な構成は次の 4 層です。
- Frontend(React + Vite +
@sentry/react)createRootのonUncaughtError/onCaughtError/onRecoverableErrorを利用し、React が扱う全カテゴリのエラーをキャプチャしていますbeforeSendフックに動的サンプリング・3 層のノイズフィルタリング・例外正規化を集約し、送信前のロジックを一箇所で管理しています- OpenFeature と連携してフィーチャーフラグの評価状態を Sentry イベントに自動付与し、Firebase Remote Configロールアウト中のリグレッションも追跡できるようにしています
- Debug Mode
- カスタマーサポート連携のために自前で用意している独自機構です
- デバッグ用パラメーター付き URL をユーザーに使ってもらうと、数日間だけ 100% サンプリングに切り替わり、エラーが漏れなくキャプチャされます
- 自作 AI トリアージ(GitHub Actions + Claude Code Action)
- 毎週自動で動くワークフローです
- Sentry REST API で「新規 / 影響ユーザー大 / Regressed / Seer actionability:high」の 4 カテゴリの issue を取得し、Claude Code が「要対応 / 要調査 / 対象外」に振り分けます
- フロントエンドチームへの自動アサインや重複 issue のマージまで一度に実施し、カスタムダッシュボードで結果を可視化しています
- リリース追跡
- タイムスタンプ付きバージョンを埋め込むことで、どのリリースで問題が入ったかを即座にたどれます
- この日以降にどんなエラーが発生しているかもリリース時刻を起点にフィルタしやすく、新しい不具合の切り出しに役立ちます
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
Sentry 導入前、本番環境で発生するエラーを体系的に把握する手段がありませんでした。
- エラーが見えない: ユーザーのブラウザコンソールは確認できず、環境の多様性から再現も困難でした
- 影響範囲が不明: 1 人だけの問題なのか 1,000 人規模の問題なのか、判断する材料がありませんでした
どのような状態を目指していたか
- 本番エラーをリアルタイムに検知し、影響ユーザー数と環境情報を即座に把握できること
- サンプリング制御でコスト効率を保ちつつ、重要なエラーは確実にキャプチャできる運用にすること
比較検討したサービス
Sentry の採用は、社内で 2 段階の比較検討を経て決まりました。本記事はフロントエンド視点ですが、実際の検討プロセスはバックエンド側から始まっていたのが実態に近いため、両方のフェーズを簡潔にご紹介します。
① 2017年2月:バックエンド(Rails)観点での調査
バックエンドでは当時 New Relic で計測していた本番エラー件数の規模感から、体系的な収集基盤の必要性が浮上していました。BE チームが料金モデルの柔軟性・SDK 対応・GitHub/Slack 連携を軸に複数サービスを比較した結果、2017 年 2 月に Sentry が従量課金モデルへ移行したタイミングで、データ量の伸びに追従しやすい Sentry が優勢になりました。
② 2017年5月:フロントエンド観点での再検討
FE チームではこの時期、「画面の読み込み中に止まる」といった問い合わせが続き、JavaScript のエラーが疑われる状況でした。minify された状態のスタックトレースでは原因を特定しづらく、Web 向けのエラー収集ツール導入を改めて検討することになります。
| 候補 | 評価 |
|---|---|
| New Relic Browser Monitoring | 既に Rails 側で New Relic を使用しており第一候補。しかし LITE プランは JS Errors / Instance Details 非対応。対応プランは $149 USD/月と高額で見送り |
| Bugsnag | 10k events/月まで無料。メンバーに前職での利用経験者あり。有力候補 |
| Sentry | 10k events/月まで無料。バックエンド側で既に導入 PR が動いており、FE/BE を同じ基盤に寄せられる点が決定打になりました |
比較した軸
- Minify コードの原因特定能力 — Source Maps 対応の有無、CI/CD への組み込みやすさ
- 無料枠でのスタート可否 — 導入ハードルを下げるため、初期は無料枠で運用できること
- FE/BE 共通基盤化 — 既にバックエンド側で検討されていた候補との親和性
- サンプリング / ノイズ除外の制御性 — ユーザー起因の例外(ID/PW 入力ミス等)を除外しながら、無料枠に収める運用が可能か
選定理由
最終的に Sentry を選んだ決め手は、次の 4 点です。
- FE/BE 基盤の統一: バックエンド側で先行して導入が動いていたため、フロントエンドも同じ基盤に寄せることで、エラー監視の一元化とノウハウの共有を同時に進められました
- Source Maps 運用の現実性:
sentry-cliで複数ファイルを一括アップロードする流れが CI に組み込みやすく、minify されたスタックトレースでも元コード上で原因を特定できる体制を、最小限のコストで構築できました - 無料枠とサンプリング設計の両立:
sampleRateによる動的サンプリングとignoreErrorsによるノイズ除外を組み合わせることで、10k events/月 の無料枠に収めつつ、重要なエラーは確実に拾える運用を実現できました - 料金プランの追従性: 2017 年 2 月からの従量課金化により、エラー件数の変動に対して柔軟にコストを調整できる構造になっていた点も、採用の後押しになりました
こうして検討時に挙がった論点が、7 年以上たった今も運用の中核として生き続けていることは、Sentry を長く使い続けてきた理由のひとつでもあります。
導入の成果
改善したかった課題はどれくらい解決されたか
| 導入前の課題 | 導入後の状態 |
|---|---|
| エラーが見えない | 本番エラーをリアルタイム検知、ダッシュボードで常時可視化 |
| 影響範囲が不明 | エラーごとに影響ユーザー数・イベント数が即判明(最大影響 issue は単独で 1 万ユーザー規模に達することも) |
どのような成果が得られたか
上の Before / After に加えて、長く運用するなかで見えてきた成果もいくつかあります。
- エラーに向き合う文化の醸成: トリアージ定例が定着し、ノイズ排除から優先度付け、issue 化、担当アサインまでを一貫して回せるようになりました
- 動的サンプリングとクリティカルエラー 100% キャプチャの両立: デフォルト 25% サンプリングでコストを抑えつつ、重要なエラーは
sampleRateタグで 100% 送信する、といった使い分けができるようになりました - Debug Mode の仕組みづくり: 特定ユーザーのブラウザで数日間 100% エラーを収集できる独自機構を構築しました(カスタマーサポート連携としての実運用は、これから運用フローの整備とあわせて稼働させていく予定です)
- AI 自動トリアージの着手: 運用初週の時点で、AI が要対応と判定した issue を resolve するところまでは実際に到達しています
- リリース追跡の精度向上: リグレッションが入った PR までその場で遡れるようになりました
導入時の苦労・悩み
Sentry を入れて終わりではなく、ここに至るまでには、導入直後の技術・運用面の苦労と、その後の運用を続ける中で訪れたいくつかの再評価フェーズがありました。
導入当時の技術・運用面の課題
導入直後は、とにかくエラー監視の仕組みを整えること自体に手一杯でした。代表的には次のような壁にぶつかっています。
- 大量に飛んでくるエラーとノイズに埋もれ、本当に直すべきエラーが見えづらい状態でした
- イベント数ベース課金のためコストが高騰しやすく、全送信を続けるとすぐにプラン上限に達してしまいました
- 導入しても「エラーを見る」という文化がまだなく、有志頼みの運用になり、放置されるエラーも発生していました
運用中の再評価①:エラーに向き合う文化を根付かせるフェーズ
放置されるエラーを減らすため、フロントエンドと SRE の合同で「毎週のトリアージ定例」を発足させました。ここでノイズ排除・優先度付け・issue 化・担当アサインまでを一通り回すことで、エラーを見る/直すという行為が、属人的な有志活動から組織のルーチンへと少しずつ変わっていきました。この時期の一番大きな変化は、まさにこの「文化としての定着」だったと振り返っています。
運用中の再評価②:他ツールへの移行検討と Sentry 継続の判断
運用を続けるなかで、Datadog(RUM / Bits AI)への移行を検討した時期もありました。AI トリアージ機能(Bits AI)への期待と、サンプリングの柔軟性がそのきっかけです。検討して分かったことは大きく 3 点でした。
- Datadog の費用評価: コスト面で見合わず移行は見送ることにしました
- 費用を下げるにはサンプリングが必要ですが、その場合は Sentry と同等の機能を自前実装することが求められます
- Sentry の再評価: 当時やりたかったことはひと通り実現できており、機能面で大きな不足は感じられませんでした
- サンプリングの構造的課題: Sentry/Datadog のどちらを採用してもサンプリングは避けられず、問い合わせ対応時にログが取れないユーザーが一定数発生します
- 対策としては、ツールに依存せず自前の API を用意する必要があるとの結論に至り、これがのちの Debug Mode の原型につながっていきました
運用中の再評価③:AI トリアージへの取り組み
トリアージ定例がうまく回るようになると、今度はまた別の課題が見えてきました。「毎週すべての issue を人力で確認して分類するのが、件数の増加とともに現実的でなくなってきた」という悩みです。ノイズを除外しつつ、対応すべきエラーだけを浮上させるトリアージそのものを、何らかのかたちで自動化する必要が出てきました。
私たちが求めていたのは「ノイズを削減し、対応すべきエラーだけを浮上させるトリアージ支援」でしたが、Sentry 公式の Seer は根本原因特定と自動修正提案が軸足で、ねらいとはスコープが合いませんでした。また、Datadog Watchdog や Bits AI は前提となるデータ送信先が Sentry ではないため、選択肢から外れました。最終的には、GitHub Actions と Claude Code で自作のトリアージワークフローを構築する方針に着地しています。
結論としては、他ツールへ移行するのではなく、Sentry と自前の仕組み(Debug Mode / 自作 AI トリアージ)の組み合わせで運用を強化していく方向を選びました。
導入に向けた社内への説明
上長・チームへの説明
正直にお話しすると、導入当時は上長への正式な投資判断としての説明は行っていません。当時はまだ社員 20 名ほどのスタートアップで、Sentry に無料枠(10k events/月)があったため、まずは追加コストをかけずに試せる範囲で導入し、本当に必要かどうかを実運用のなかで見極める判断でスタートしました。
その後、運用を続けるなかでエラー件数が増え、無料枠に収まらない規模になってから、ようやく Team Plan の契約に向けて予算を確保し、正式な投資として位置付ける流れへ移行しました。つまり、「無料枠で価値を検証してから予算化して正式に導入する」という 2 段階のアプローチで定着させた形です。
活用方法
- 毎週のトリアージ会議: フロントエンドと SRE がダッシュボードを確認し、ノイズ排除を検討してから、バグの優先度付け、issue 化、担当アサインまでを一気に進めます
- カスタマーサポート連携: Debug Mode の URL をユーザーにお送りし、数日間のエラー詳細を収集して調査に活用します
- リリース追跡: リリースバージョンに埋め込んだタイムスタンプから、問題が入ったリリースをその場で特定します
- Claude Code × Sentry MCP: エラー URL を渡すだけで、調査から修正案の検討までを AI のなかで完結できます
よく使う機能
日常的に触れているのは、以下の 5 つの機能です。
- Error Monitoring: 日々のエラー検知・トリアージの中心
- Source Maps: minify されたコードから元のコードで原因を特定するために必須
- Alerts: Slack 通知による即時検知
- Release Tracking: リリースごとのエラー追跡
- Breadcrumbs: エラーに至るまでのユーザー操作履歴
ツールの良い点
長く運用してきたうえで、特にありがたいと感じているのは次のような点です。
- React SDK の完成度が高く、React 19 のエラーハンドリングにもネイティブで対応してくれています
beforeSendフックひとつで動的サンプリング・ノイズフィルタ・例外正規化をまとめて扱えるため、Debug Mode のような独自機構も無理なく実装できる柔軟性があります- OpenFeature 連携でフィーチャーフラグの評価状態が自動的に付与され、FF ロールアウト中のリグレッション検出にも活用できます
- Sentry MCP と Claude Code の組み合わせにより、エラー調査から修正提案までを AI のなかで完結させられる開発者体験が得られます
ツールの課題点
1. サンプリングの壁と Debug Mode 自作の必要性
Sentry はイベント数ベース課金のため、私たちの規模ではコスト制御の観点からサンプリング(デフォルト 25%)が必要でした。一方で、サンプリングを入れた瞬間から、問い合わせ対応時に該当ユーザーのエラーが記録されていないケースが出てきます。この問題を解消するために、特定ユーザーだけ 100% 送信する Debug Mode を自前で構築しました。サンプリングとデバッガビリティの両立は Sentry 単体では完結しづらく、何らかの自前の仕組みが必要だったというのが実感です。
2. AI によるトリアージ特化機能の不足
Sentry 公式の AI エージェント「Seer」は、根本原因の特定と自動修正提案に軸足があり、私たちがやりたかった「ノイズを減らしてトリアージを効率化する」というユースケースとは、機能スコープが噛み合いませんでした。そのため、Seer の精度そのものを十分に検証する前に採用を見送り、GitHub Actions と Claude Code で自作ワークフローを構築する方針に切り替えています。「トリアージそのものを自動化する機能」は Sentry 単体ではまだ手薄だと感じており、そこを外部 AI で補う構成になっています。
自作ワークフローの方も運用を始めた直後で、評価自体はまだ十分に行えていません。初週からチューニングすべき点がすぐに見つかりました。実運用レベルのトリアージ自動化は、外部 AI との組み合わせと継続的なチューニングを前提に設計するのが現時点では現実的で、ここもまだ最終形ではなく、改善を重ねていく前提の仕組みだと捉えています。
3. SDK バージョンアップの頻度
直近 1 年で 2 メジャーが上がるなど、追従にコストがかかっています。マイナー更新も頻繁で、Renovate で自動 PR 化しているものの動作確認の負荷が継続的に発生します。breaking changes の確認と対応は定期的に必要です。
ツールを検討されている方へ
ツールだけでなく組織的プロセスをセットで設計する
Sentry を導入しても、エラーを日々見る習慣がなければ、やはりエラーは放置されてしまいます。定期トリアージ会議(フロントエンドと SRE の合同など)をツール導入とあわせて始めることで、エラーに向き合う文化がようやく根付き始めます。ツール選定よりも先に運用設計を考えておくことを、個人的には強くおすすめしたいポイントです。
動的サンプリング + フィルタリング戦略を最初から
イベント数ベース課金の性質上、全エラーを送っているとプラン上限にすぐ到達してしまいます。beforeSend で動的サンプリング(通常 25%、クリティカル 100%)とノイズフィルタリング(ignoreErrors、thirdPartyErrorFilter)をあわせて導入することで、コストの急激な増加を防げます。
今後の展望
Sentry 運用を「検知から対応文化までを貫く基盤」へと、さらに育てていくことを目指しています。具体的には、Debug Mode を発展させた「ユーザー能動型バグ報告」の仕組みや、自作 AI トリアージの高度化を検討しているところです。ツールと運用、そして AI 基盤を一体で設計していく領域として、Sentry は今後も中核に据えていく予定です。
株式会社TimeTree / Cyno
メンバー / フロントエンドエンジニア / 従業員規模: 101名〜300名 / エンジニア組織: 51名〜100名
よく見られているレビュー
株式会社TimeTree / Cyno
メンバー / フロントエンドエンジニア / 従業員規模: 101名〜300名 / エンジニア組織: 51名〜100名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法



