CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-05-11上級

Claude Code でクラッシュレポートから修正コミットまでの導線を引く — 個人開発のリリース後障害対応を仕組み化する

Crashlytics や Sentry に届くクラッシュレポートを Claude Code で自動診断し、修正コミットまでつなげる個人開発者向けの実装パイプラインを、今も自分が回している運用とコード例で具体的に書きます。

Claude Code197クラッシュレポート個人開発110Crashlytics8Sentry障害対応2

プレミアム記事

個人で複数のアプリを長く運用していると、毎朝の習慣がひとつ重荷になっていることに、あるときふと気づきました。Firebase Crashlytics のダッシュボードを開く時間です。前日の夜にリリースした更新がどこかで小さくこけていないかを、コーヒーをいれる前に確認します。それが3〜4分で済む朝もあれば、新しい OS の細かな挙動変化に巻き込まれて1時間以上溶ける朝もありました。

リリース後の障害対応というのは、本来は分業で吸収する仕事です。SRE がいて、運用エンジニアがいて、サポート窓口がいます。けれど個人開発者は、これらをすべて一人で抱える前提で動いています。広告収益がそれなりの規模に育った時期も、その裏側ではほとんど毎日、何かしらのクラッシュレポートを読んでいました。他の活動と並行しながら、それでも個人開発を細く長く続けていくためには、この朝のルーチンを何とかしなければならない、と静かに思い続けていました。

Claude Code を本格的に使い始めて変わったのは、クラッシュレポートを「読む対象」から「処理する対象」に置き直せたことです。本記事はその仕組みを、私自身が今でも回している運用とコード例で書きます。表面的な「ログをAIに貼り付けて聞いてみよう」という話ではなく、レポートの取得・正規化・仮説生成・該当コード特定・差分提案までを、ひとつのパイプラインとして組む方法を紹介します。

なぜ個人開発者ほど「リリース後の障害対応」が重い負荷になるのか

クラッシュレポートの対応コストは、単に「件数 × 1件あたりの調査時間」では測れません。もう少し正確に言えば、個人開発者には以下のような特殊な構造的負荷がかかっています。

ひとつは、コンテキストスイッチの代償です。新規開発でコードを書いている最中に Crashlytics の通知メールが届くと、頭の中の作業記憶を一度退避してクラッシュ調査に切り替えなくてはいけません。組織の中であれば「あとで担当者が見る」と委ねられる場面でも、個人開発では自分の中でこれを切り替えるしかありません。私の経験では、新機能の設計に集中している1時間と、クラッシュ調査に1時間使った後の1時間では、生産性が体感で3〜4倍違います。

もうひとつは、ユーザー数のスケールです。長く配信を続けたアプリは、月間アクティブで見れば数十万人規模になることもあり、しかもタブレット・スマホ・国・OS バージョンが多様に分布します。クラッシュ率が0.1%しかなくても、毎日数百件は何らかのレポートが上がってきます。手で開いて読むのは現実的ではなく、しかし「無視する」と評価が落ちて売上が削れる。この板挟みが個人開発者の日常です。

そしてもうひとつ、心理的な負荷があります。クラッシュレポートを開くということは、自分が書いたコードに穴があったことを直視する作業です。何年やっても、スタックトレースの先頭に自分のソースが乗っていると静かに胃が縮みます。これを毎朝続けるのは、技術的にも精神的にも持続可能ではありません。

ここで私が出した結論は単純です。「読む」のをやめる。代わりに、Claude Code に処理させ、自分は判断と意思決定だけに集中します。この発想の転換が、本記事の出発点です。

レポートを「Claude Code に渡せる形」に整える前処理

Claude Code に直接スタックトレースを貼り付けて聞いても、ある程度の答えは返ってきます。けれど個人開発の運用に耐える品質には届きません。理由は単純で、生のレポートはノイズが多すぎ、また同じ原因のレポートが何百件と複製されているからです。仕組み化の最初のステップは前処理です。

私が組んでいる流れはこうです。

    1. Crashlytics または Sentry の API を叩いて、過去24時間の Issue を JSON で取得する
    1. スタックトレースを正規化(行番号の差異を吸収)し、signature を計算する
    1. 同じ signature のレポートをマージし、発生件数・影響ユーザー数・初出時刻・最終発生時刻だけを残す
    1. 上位 N 件を「優先トリアージキュー」として JSON ファイルに書き出す

ここまでをスクリプトで自動化しておけば、Claude Code に渡すのは「整理済みの優先キュー」だけで済みます。ノイズが落ち、重複が消え、調査対象が明確になります。

実装例を示します。Sentry を使っている方を想定したスクリプトですが、Crashlytics でも考え方は同じです。

# fetch_top_issues.py
# 直近24時間のクラッシュ Issue を取得し、影響ユーザー数の多い順に上位10件を整形して出力します。
# 期待出力: triage_queue.json (Claude Code に渡す形式)
 
import os
import json
import time
import urllib.request
 
SENTRY_TOKEN = os.environ["SENTRY_AUTH_TOKEN"]
ORG_SLUG = os.environ["SENTRY_ORG_SLUG"]
PROJECT_SLUG = os.environ["SENTRY_PROJECT_SLUG"]
 
def fetch_issues(hours: int = 24, limit: int = 50) -> list:
    url = (
        f"https://sentry.io/api/0/projects/{ORG_SLUG}/{PROJECT_SLUG}/issues/"
        f"?statsPeriod={hours}h&query=is:unresolved&sort=user&limit={limit}"
    )
    req = urllib.request.Request(url, headers={"Authorization": f"Bearer {SENTRY_TOKEN}"})
    with urllib.request.urlopen(req, timeout=30) as r:
        return json.loads(r.read())
 
def normalize(issue: dict) -> dict:
    # 末端のフレームだけを正規化キーとして使う(行番号は外す)
    frames = issue.get("metadata", {}).get("function") or ""
    return {
        "id": issue["id"],
        "title": issue["title"],
        "culprit": issue.get("culprit"),
        "signature": frames.split("(")[0].strip(),
        "users": issue.get("userCount", 0),
        "events": issue.get("count", 0),
        "first_seen": issue.get("firstSeen"),
        "last_seen": issue.get("lastSeen"),
        "permalink": issue.get("permalink"),
    }
 
if __name__ == "__main__":
    issues = fetch_issues()
    triaged = [normalize(i) for i in issues]
    # 影響ユーザー数の多い順
    triaged.sort(key=lambda x: x["users"], reverse=True)
    queue = triaged[:10]
    with open("triage_queue.json", "w") as f:
        json.dump(queue, f, ensure_ascii=False, indent=2, default=str)
    print(f"wrote {len(queue)} issues to triage_queue.json at {time.strftime('%Y-%m-%d %H:%M')}")

このスクリプトを cron か GitHub Actions で1日1回流しておくだけで、毎朝 triage_queue.json がリポジトリに用意されます。Claude Code はこのファイルを起点に作業を始めればよく、ダッシュボードを開きにいく必要はありません。

ここで重要なのは、シンボリケーション(iOS の dSYM や Android の Proguard mappings の解決)はこのステップより前に済ませておくことです。Sentry も Crashlytics も、シンボル解決前のスタックトレースをそのまま渡されると Claude Code の仮説生成が大きく外れます。私はリリースパイプラインの中で fastlane upload_symbols_to_sentry を必ず叩くようにしています。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
Crashlytics や Sentry を毎朝目視確認する運用から抜け出し、Claude Code に15分以内でトリアージさせる仕組みに置き換えられるようになります
重複レポートの統合・原因仮説の生成・該当コード箇所の特定までを連続したパイプラインとして実装できるようになります
AI が提案した修正をそのまま適用してはいけないケース(再現条件不明・ライブラリ起因・スレッド競合)の見極め基準を、個人開発の現場で再利用できる形で持ち帰れます
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-05-24
iOS Crashlytics の障害トリアージを Claude Code で自動化する — dSYM シンボリケーションから修正候補生成までの本番運用設計
Firebase Crashlytics に届く iOS クラッシュを Claude Code で受け取り、dSYM シンボリケーション、影響範囲推定、修正候補のドラフト PR までを一筆書きで流すパイプラインの本番運用設計を、累計5,000万DLのアプリ事業での実例と数値とともにまとめます。
Claude Code2026-06-04
Crashlytics の「Missing dSYM」をClaude Codeで潰した実装メモ
Firebase を SPM へ移行した直後、Crashlytics のクラッシュが記号化されず address のまま並びました。Missing dSYM 警告の原因をClaude Codeで切り分け、再発しないアップロード経路を組むまでの実作業メモです。
Claude Code2026-07-15
型は付いたのに、安全にはならなかった — JS→TS 移行で Claude Code に任せた範囲と任せなかった範囲
tsc が緑でも any は静かに漏れます。型カバレッジで移行の実態を測り、Claude Code に任せて速い作業と人が決めるべき判断を線引きし、悪化を止める CI ゲートまでを実装付きで整理した運用メモです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →