Seer のおかげでバグ57個が1個に

Article by: (読了時間:16分)

 

ゲスト投稿:Dan Mindru。インディー開発者、エンタープライズ向けのコンサルタント、Morning Maker Show の共同ホストでもあります。複数のオープンソースプロジェクトを手がけ、CrontapSaventifyそのほか10社ほどのスタートアップの創業者です。

 

先日、歯医者で予約の順番を待っていたときのことです。待合室はやたらと豪華で、椅子はどれも別々のいかにも値の張るデンマーク人デザイナーの作品に見えました。これは相当ふんだくられるな……と覚悟し始めたそのとき、愛用のメールアプリから通知が届きました。

*** ポーン ***

GitHub のメール通知のスクリーンショット

GitHub に新しい Pull Request が来ています。でも、いつものとはどこか違う。どこから湧いてきたのか、まるで見当がつきません。どの自動化が引き金になったのかと慌てて考えるうちに、いやな想像が頭をもたげてきます……もしかして、ハッキングされた?!

コードタブを開いてみると、そこにあったのはまったく理にかなった修正でした。ユニットテストの更新まで、ひととおり揃っています。しかもリスクは低そうで、チェックもすべてグリーン。

歯科医がおそらく3度目に私の名前を呼ぶなか、私はパニックになり、(自分でもどうかと思いつつ)……私は「Squash and merge」を押してしまいました。スマホをポケットに戻し、歯科医にこうつぶやきます。「すみません、ちょっと集中してて…。」

 

どうせ直すつもりのなかったバグ

あなたは私なんかよりずっと頻繁に、歯医者から本番環境にデプロイしているかもしれません。それでも私にとって、これは大きな変化に感じられました。単にコードをマージした、という話ではありません。それが「安い」コードだったからです。自分が汗をかいたり、優先順位をつけたりする必要のなかったコードなのです。

いったい何が起きたのか。そもそも、あの PR はどこから来たのか。少しだけ待ってください。その前にバグと優先順位づけについて、正直な話をしておく必要があります。

本番システムに関わったことがあれば分かるとおり、Issue はどんどん積み上がり、いずれはバグのトリアージをする羽目になります。たいていはこんな問いを立てながら。

  • 影響を受けるユーザーは何人か
  • どんな影響があるか
  • 直すのにどれくらいかかるか

 

これをもとに、ステークホルダーがバグに優先度を割り当てます。たいていの場合、「高」に満たないものはすべて、いわゆる「バックログ」行きです。

この世界に不慣れな方へ。エンタープライズでいう「バックログ(backlog)」とは、「Bottomless Abyss of Casually Kept, Long-Overdue Grievances(なんとなく放置された、とっくに期限切れの不満が沈む、底なしの奈落)」の略です。

とはいえ、そのバグを直すことに、<ここに CEO が夢中になっている機能名を入れる>と比べてどれだけのビジネス価値があるでしょうか。そのバグ1個が実際どれほどの害をもたらすというのか。なにしろ、もう何か月も付き合ってきたバグなのですから。

そう、このバグの運命は、優先度の高い機能と天秤にかけられた瞬間にすでに決まっていたのです。これは規律や意志の強さの問題ではありません。単純に、経済の問題です。新規顧客を大量に連れてくるかもしれない機能の追加と比べれば、バグ修正のコストはとても正当化できません。

そうして数年が過ぎると、(ご想像のとおり)バックログにはバグが57個たまっている、というわけです。これを1個まで減らした方法を、ぜひお見せしたいと思います!

 

バグ修正の経済が変わりつつある

ここまで書いてきたのは、これまで多くの企業に当てはまっていた話です。でも、もうそうではないと思っています。2026年の春ごろ、AI の分野でいくつもの要素が噛み合い、バグ修正の経済をすっかり塗り替えたと、確信しています。

  • モデルの知能
  • より大きなコンテキスト
  • より優れたハーネスとツール呼び出し
  • 新しい抽象化(スキル、フック、サブ/クラウドエージェントなど)
  • より長く動き続けるエージェント

 

これらすべてが飛躍を生み、バグ修正の経済を「割に合わない」から「まあいいか、これもスプリントに入れちゃおう」へとひっくり返しました。

自分のすべてのシステムで Sentry を動かしておいてよかった、と心から思いました。というのも、いま挙げたものはすべて、コンテキストがなければ無価値だからです。十分なコンテキストさえあれば、たいていのバグ修正は、AI が直すことも、検証することも、造作なくこなせるようになります。そして Sentry は、そのなかでも最も濃く、最も価値のあるコンテキストを持っています。トレース、デバイス情報、ネットワーク、ログ——ほんの一例です。驚いたことに、Session Replayまでコンテキストに使うというのです。

hunted.space で起きたナビゲーションエラーの、Sentry 上の Issue。右側には Seer の Autofix が開いており、Session Replay を含む「Evidence(根拠)」フッターが表示されています。

 

ちょっとしたコツ:送るテレメトリ(トレース、プロファイル、ログ)が多いほど、その先の自動修正はどれも精度を増します。ぜひ Sentry で JavaScript のログを設定してみてください。

このコンテキストがあれば、仕事の3分の1は、指一本動かさないうちに片づいています。次の3分の1が、修正の実装。そして最後の3分の1が、その検証です。

理屈のうえでは、この3つの3分の1をすべて自動化できれば、たいていのバグは寝ている間に片づけられることになります。そして本記事で話したいのは、まさにそこです。いまやほとんどのバグは、自動で解決できると私は考えています。もしバグ修正が株式だったら、その株価は2008年のリーマン・ブラザーズよろしく急落するでしょう。ただし今回は、その暴落こそが朗報なのです。

では、その仕組みの作り方をお見せしましょう。

 

くつろぎながら、自分のバグを安く直す方法

正しいセットアップを選ぶには、まずバグの気持ちになってみる必要があります。いわば「バグになりきって考える」ことが求められるのです。

 
バグにも気持ちがある

バグはどれも平等、というわけではありません。気立てのいいバグは、洒落た髪型にサングラス。厄介なやつは、モヒカンにタトゥーです。おおまかに、バグは3つのカテゴリーに分けられます。

カテゴリー 独立性 再現性 複雑さ 修正は? 検証は?
フレンドリーなバグ(Friendly) あり あり 数行のピンポイントな修正 ユニットテスト
気難しいバグ(Grumpy) ほぼあり ほぼあり 複数のファイルに及び、多少の調査が必要 ユニット+結合テスト+ビジュアルリグレッションテスト+スモークテスト
暴れん坊のバグ(Punk) なし ときどき 誰にも分からない。再現するより作り直すほうが早い ユニット+結合+E2E、DB チェック、ビジュアルリグレッションテスト、加えて人によるスモークテスト

それぞれを詳しく見ながら、どうすれば最も安く直せるのかを探っていきましょう。

 

フレンドリーなバグ(Friendly)

直すのが簡単なバグたちです。独立していて、再現でき、検証もレビューも容易で、マージのリスクも低い。

例を挙げます。

  • 不正なペイロードで API を呼び出してしまう
  • null チェック漏れで、フィールドが空のときに例外を投げる
  • off-by-one エラーで、リストの最後の要素が抜け落ちる
  • モバイルでレイアウトが崩れる

 

とはいえ、油断は禁物です。見た目は無害でも、ユーザーにとっては強烈なストレスになり、サポートチケットの山につながることもあります。

嬉しいことにこの手のバグは、もう解決済みです。次のシンプルなセットアップで、まるごと自動化してしまえます。

  1. [前提] 必要なコンテキストを得るために、アプリケーションに Sentry を追加する(Sentry のプラットフォーム設定ドキュメント
  2. GitHub リポジトリと連携する
  3. Seer の設定を開き、プロジェクトを対応するリポジトリにひも付ける。Seer は、ここを読んで根本原因の分析とコード生成を行います。
  4. 同じ設定ページで、Automation のステップを Stop after PR drafted(PR 作成後に停止) に設定する。

 

「Stop after PR drafted」は、3つある自動化レベルのなかで最も手離れのよい設定です。もっと早い段階で人の目を挟みたいなら、Root Cause 後(分析のみ)や Plan 後(修正案のみ、PR なし)で止めることもできます。

Seer の設定が見つからない場合は、組織の一般設定で「Generative AI Features」が有効になっているか確認してください。

これだけで、フレンドリーなバグはもう出てきません。実際にはどう回るのでしょうか。私の側から見ると、数日おきに PR が届くだけです。中身はたいてい、数行のコード修正。チェックがすべてグリーンかを確認して、マージボタンを押す。それだけで Sentry 側の Issue まで閉じてくれるので、私のように面倒くさがりな人ならきっと気に入るはずです。気の利いた点としては、Seer はルールファイル(Cursor や Claude Code など)を自動で読み取ります。そのため、分析も引き渡された先での修正も、あなた自身のエージェントと同じ規約に従ってくれます。

Sentry の側から見ると、もう少し込み入ったプロセスになっています。Issue は自動修正を「勝ち取る」必要があるのです。

  • そのIssueに十分な数のイベントが記録されていて、まぐれでないことが明らかである
  • そのIssueが最近のものである(現時点では、直近14日以内)
  • そのIssueが十分な「修正しやすさスコア」を持っている。Sentry は解決のしやすさを見積もり、確度の高いものだけを先へ進めます

 

私の経験からいうと、これはつまりこういうことです。

  • PR で埋め尽くされることがない。
  • 届く PR は、たいてい文句なしの当たりである。

 

これを有効にするだけで、おそらくバグのかなりの部分がすでに片づいているはずです。なかなかすごいことです。では、もう一歩踏み込みましょう。

 

気難しいバグ(Grumpy)

もう少し手ごわいバグです。未知の要素が多く、たいていはより深い調査を必要とします。とはいえ、まだおおむね独立していて再現もでき、ただ修正が複数ファイルに及ぶようになった、という程度です。

例を挙げます。

  • 2つの API 呼び出しのあいだで起きる競合状態で、低速な回線でしか現れないもの
  • WebSocket の再接続後に状態が古いまま取り残されるもの
  • 楽観的な UI 更新がリクエスト失敗時にロールバックされないもの
  • ページ間でデータが変わったときに、項目を飛ばしたり重複させたりするページネーションのバグ

 

こうしたバグは、金銭的に正当化するのがぐっと難しくなります。たいていは「エッジケース」として片づけられ、優先度を下げられてしまいます。

ここで私が「でも、これも Seer が直してくれます」と書いて次の節に進むと思っているなら、それは外れです。正直に言うと、Seer だけでは直すことができません。Seer は素晴らしい「調査員」ですが、修正を適用して検証するための本格的な環境は持っていません。開発サーバーを立ち上げることも、データベースをつつくことも、フローを5ステップ進んだ先でバグを引き起こすボタンを押すこともできないのです。

ここまで来ればもう分かるはずです。エージェントが検証できないなら、そのタスクは終わっていないということです。

そこで気難しいバグでは、Seer には得意なこと(本番環境の濃いコンテキストを使った根本原因の分析)に専念してもらい、実際の修正は、環境を持っているエージェント——本格的なクラウドコーディングエージェント——に引き渡します。

現時点で選べるのは次のエージェントです。

 

この例では Cursor を選びます。セットアップは次のとおりです。

1. Sentry で、Settings → Integrations →「Cursor Agent」と進み、「Accept & Install」をクリック

注:Cursor には API 連携もあります。「Coding Agent」タグの付いたほうを選んでください。

2. Cursor のアカウント設定へ行き、プロフィールの API Keys で API キーを生成

3. Sentry に戻り、その API キーを貼り付ける

4. 最後に Seer の設定を開き、プロジェクトを選び、Handoff to Agent を「Cursor Cloud Agent」、Automation Steps を「Stop after PR drafted」に設定

Handoff to Agent と Automation Steps を、説明どおりの値に設定したプロジェクトの Seer 設定画面

 

サードパーティのクラウドエージェントをもっと細かく制御したい場合は、Seer を「Handoff Agent」のままにしておき、Issue ごとにサードパーティのクラウドエージェントを手動で起動することもできます。

任意の Issue の Root Cause Analysis カードで、「Find Solution」の隣のドロップダウンをクリックすれば、Cursor Cloud Agent を起動できます。すべてを自動化するのではなく、特定のバグ1つだけを任せたいときに便利です。

 

歯医者で本当に起きていたこと

さあ、ようやく種明かしです。なぜ私は、歯医者であの PR を受け取ったのか。

種を明かすと、その数日前に、同僚がたまたま Seer 設定で Cursor Agent を有効にしていたのです。Sentry が「このバグは直す価値がある」と判断し、Cursor に引き渡し、修正を実装・検証したうえで PR を作成した。というわけです。(この引き渡しについては、このあとすぐ詳しく触れます。次のカテゴリーのバグでも鍵になります。)

わかりにくかったのは、Sentry へのリンクが見当たらず、Cursor Agent のチャットも見られなかったことです。だから最初にパニックになったのでした。小さな画面で確認したのも裏目に出ました。大きな画面ならいつも目を通す PR のメタ情報をいくつか見落としていたのです。

Issue の説明の要約と根本原因が記載された、GitHub Pull Request の概要

 

ではコーディングエージェントへの引き渡しは、どのように動いているのでしょうか。

Seer の Autofix のフローは3つのステップからなります。

  1. 根本原因の分析(Root Cause Analysis)
  2. 解決策の特定(Solution Identification)
  3. コード生成(Code Generation)

 

引き渡しを設定していても、Seer は変わらず根本原因の分析を行い、あの濃い本番環境のコンテキスト(スタックトレース、breadcrumbs、トレースなど)を集めます。ただし、自分でコードを生成する代わりに、3つ目のステップが Cursor Cloud Agent に渡されます。そのプロンプトには、Seer がそこまでに突き止めたすべてが含まれています。

根本原因の分析を含んだ、Cursor Cloud Agent へのプロンプト

 

するとエージェントは、実際の環境であなたのリポジトリをチェックアウトします。そこでは、次のようなことができます。

  • ユニットテストと結合テストを実行する
  • 開発サーバーを立ち上げ、壊れているフローを実際に動かしてみる
  • Cursor のマーケットプレイスにある任意の MCP を使って、さらに踏み込む。開発用データベースへのクエリ、ブラウザの操作、CI の確認、E2E テストの作成・実行、スクリーンショットの取得など

 

つまり、調査 → 修正 → 検証のループが閉じるのです。かつては人が対応していたあの手間のかかる最後の3分の1までもが、これで自動化されました。

ここまで整えれば、バグの8〜9割は片づいているはずです。さて、いよいよラスボスです。ここから先はそれほどスムーズにはいきません。見ていきましょう。

 

暴れん坊なバグ(Punk)

あなたのテストスイートをひと目見て大笑いするタイプのバグです。独立しておらず、再現もほとんどできず、根本原因はたいてい、AI が気軽に入り込めない場所(本番データやサードパーティのサービスなど)に潜んでいます。

例を挙げます。

  • 古い本番データが原因のクラッシュ。5年前のマイグレーションで作られた、いまのコードでは絶対に生成しえない形のレコード
  • feature flag・プラン・アカウントの古さという特定の組み合わせのせいで、ある1社の顧客でしか発生しないバグ
  • サードパーティのサービスが、ドキュメントにない挙動をすることに依存するもの(認証プロバイダーや、2回届く決済 webhook など)
  • 本番規模でしか現れない Issue。1万行なら問題ないのに、5000万行では致命的になるクエリ
  • 環境まわりの何か。社内プロキシ、本番の設定、ブラウザ拡張、自分が持っていないデバイスなど

 

欠けているピースは本番環境です。記事をここまで読み進めたあなたなら、どんな事情があろうと AI に本番環境へのアクセスを与えてはいけないというくらいは分かっているはずです。

この手のバグを直す最善の方法は、エージェントに「あなたと一緒に」作業してもらうことです。たいていは、いくつかのレコードを開発環境に複製し、エージェントの動きを見守りながら、何がおかしいのかをじっくり理解していく、という流れになります。

とはいえ、コンテキストの価値は相変わらず大きいままです。では、それをどのように手に入れるのか。この手のバグのセットアップは次のとおりです。

1. ホスト版の Sentry MCP サーバーをお気に入りの IDE やエージェント型 CLI に追加する。Cursor なら Settings → MCP → New MCP Server(たいていのエージェント型コーディングツールでは、mcp.json を編集するだけ)です。

2. OAuth で自分の Sentry 組織にログインする。案内に沿ってクリックしていけば完了です。

3. エージェントのチャットを開き、ふつうの言葉で質問し始める。「本番のバグの根本原因を調べたい。SAVENTIFY-1R のイベントを Sentry から取ってきて、breadcrumbs を見てほしい」といった具合です。

CursorSaventify のバグを調べるのに、Sentry MCP を使っているところ。

 

MCP サーバーがあれば、エージェントは調査と修正案づくりに必要なものすべてに直接アクセスできます。チャットからそのまま根本原因の分析ツールを走らせられる Seer も、そこに含まれます。

エージェントがコンテキストを引き出していくあいだ、あなたは、表からは見えない過去の経緯やビジネスロジックを補っていきます。

  • 「あのアカウント群は2021年に旧システムから移行したもので、設定が違う」
  • 「あの四半期に決済プロバイダーを切り替えた」
  • 「あの顧客は社内プロキシの内側にいる」

 

こうした一言のどれもが、正しい根本原因にたどり着ける可能性を大きく引き上げます。原因さえ突き止められれば、開発環境でも再現できる場合は、修正を完全に自動化してクラウドエージェントに投げられます。そうでない場合は、修正を手動で検証する必要があります。

こうした事情から、この手のバグの修正はいつまでもコストがかかります。場合によっては、特定の歴史的・ビジネス的な文脈をたまたま持っている人にしか直せません。現実にはどれだけ AI を積んでも、これは避けて通れないのです。ソフトウェアづくりが祝福であると同時に呪いにもなりうるのは、たぶんそういうことなのでしょう。

調査と検証の時間を減らすこと。それが望みうる最善であり、このワークフローはまさにそれを実現します。

 

結局、直せなかった1個のバグとは?

みなさんがこれを待っていたのは承知しています。

「そんなに偉そうに万全のセットアップを説明しておいて、Dan、じゃあどうして全部のバグを直さなかったんだ?」

突き詰めれば、コストと「高リスク・低リターン」の組み合わせに行き着きます。このバグは再現するだけでも次のものを要求してきます。

  • 本番の MSAL 設定
  • Microsoft 側のリクエスト失敗+リダイレクト
  • 再現のためにタイミングがぴたりと合うこと

 

要するに、ユーザーにはこのバグが「データの消失」として体験されます。私に言わせれば、これは致命的です。ユーザーが特定の作成・更新操作を行い、そのタイミングで認証トークンが失効すると、MSAL がサイレントなトークン更新の呼び出しに失敗することがあります。すると、アプリケーションは一連のリダイレクトをたどり、その途中でリダイレクト URL を入力済みのデータもろとも取りこぼしてしまうのです。

あまりに直しづらいので、もう何度も認証プロバイダーの乗り換えすら検討しました。今となっては、そのほうが安上がりで確実かもしれません。

ひとまず一歩引いて、発想を変える必要がありました。修正に何度も失敗した末、たどり着いたのはキー入力のたびに保存・復元する仕組みの実装です。これで少なくともユーザーは次にその URL を開いたとき、中断したところから再開することができます。

 

まとめ

人が製品に愛着を抱く理由を言い当てるのは簡単ではありません。たいていは、ブランディング、デザイン、機能、パフォーマンス、カスタマーサポート、価格に見合う価値、などが絡み合ったものです。

一方で、人が製品を嫌いになるきっかけのほうは、ずっと見極めやすいものです。小さな不快が積み重なれば、ユーザーは「もうこのアプリは信用できない」と思い始めます。バグを放置するのは危険です。ある一線を越えてしまうと、挽回できなくなってしまいます。たとえ非がユーザー側にあったとしても、彼らはやはり、それをあなたの製品のせいにします。そうなればユーザーの不満は募る一方で、最後には「あの製品はやめておけ」と周りに言うようになります。これこそ、まさに最悪のシナリオです。

幸い、ほとんどのバグはこういう類のものではありません。

近年の AI の進歩、そして Sentry と Seer のおかげで、いまやほとんどのバグは、ほんのわずかなコストで直せるようになりました。ぜひ試してみてください。もう後戻りする気にはならないはずです。

 

 

Original Page: From 57 bugs to 1, thanks to Seer

 

 




IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談は「お問い合わせ」からお気軽にお問い合わせください。

 

シェアする

Recent Posts

;