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-27上級

累計 5,000 万 DL アプリの Crashlytics を Claude Code で 11 日間掘り続けた実装ログ

壁紙アプリ 2 本(綺麗な壁紙 v2.0.0 / 浮世絵壁紙 v1.7.0)でリリース後に Crashlytics と Play Console から噴き出した 30 件超のバグを、Claude Code で 11 日間掘り続けて v2.1.1 / v1.8.1 まで仕上げた工程を、スタックトレース → 原因仮説 → 修正コミットの順で公開します。

claude-code129crashlyticsandroid9デバッグ3個人開発110保守運用

プレミアム記事

5 月 19 日に Android の壁紙アプリ v2.1.1 のホットフィックスをほぼ書き終えたあと、Crashlytics を眺めながらコーヒーを淹れていたら、Play Vitals の「ユーザー認識クラッシュ発生率」が 1.08% に上がっていました。Google の「不正な動作」フラグが立つしきい値が 1.09% なので、あと 0.01%。

廣川政樹です。2014 年から個人開発を続けていて、累計 5,000 万 DL ほどの iOS/Android アプリを一人で保守しています。壁紙系の主力 2 本(綺麗な壁紙・浮世絵壁紙)はこの 5 月にメジャーアップデート(v2.0.0 / v1.7.0)を投げたばかりで、リリース直後の Crashlytics は新規バグの祭りでした。11 日間で 30 件以上のスタックトレースを掘り、そのうち 13 件を確定でコードに落とし、6 件を OS・SDK 起因として塩漬け判定にしました。この記事はその工程を、Claude Code の使い方を中心にして公開する実装ログです。

「個人開発で Crashlytics を毎日チェックする習慣はあるけれど、スタックトレースを読みきれずに『そのうち直す』が溜まっている」「Play Vitals のしきい値接触で焦って手当てしたら別の不具合を出した」あたりで困っている方を想定読者に置いています。

11 日間の地図 — 何を直して、何を直さなかったか

最初に全体像を出しておきます。期間は v2.1.0 リリース後の観察期から、v2.1.1 / v1.8.1 を Play Console に投げた 5 月 27 日まで。

  • 5/12 (Day 1): v2.0.0 リリース直後の Crashlytics 新規 issue 12 件を仕分け。RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline の IOOBE が 28 日で 50+ ユーザーまで急増していたのを発見
  • 5/13 (Day 2): Android 6.0.1 ユーザー全員が起動 3 秒でクラッシュする j.u.function.Supplier NoClassDefFoundError を発見・即日修正。coreLibraryDesugaringEnabled を有効化するだけの 1 行修正
  • 5/13 (Day 2 後半): Gallery.onResume の入れ子構造で、戻る時のインタースティシャル広告がリワード誘導に勝てない論理を解体
  • 5/14〜18 (Day 3〜7): v2.1.0 をリリース、観察期。BW-015 (PageJumpSlider の NPE) が 1 user → 9 user に伸張。BW-009 (R8 strict mode + density split で drawable がストリップされる) が継続発生
  • 5/19 (Day 8): 上の 1.08% スパイクが見えた日。ViewPager2 内部 RecyclerView の fling 中 IOOBE (BW-017) を setItemAnimator(null) + setHasFixedSize(true) の 2 行で潰し、Glide プレースホルダーの同期デコード ANR (BW-027) を ColorDrawable 置換で潰す
  • 5/22 (Day 11): API 37 エミュレーターで Material You が overlay を再生成して CategoryActivity が真っ白になる無音 UX バグを再現・修正
  • 5/25 (Day 14): Play Console + Crashlytics を全件再精査。残存リスクの BW-015 / UE-007 / BW-009 を v2.1.1 / v1.8.1 で塩漬け撤回・先行リリース確定
  • 5/27 (Today): v2.1.1 / v1.8.1 を Play Console に審査提出

この期間、Claude Code のセッションは合計 27 回起動しました。1 回あたりだいたい 30 分〜2 時間。コードの実装と Crashlytics の確認、両方を 1 つのセッションに混ぜないのが安定運用のコツだったので、後述します。

スタックトレースを Claude Code に投げる時の前処理

Crashlytics や Play Console の「クラッシュの問題」ページからスタックトレースをコピーすると、ほぼ毎回 200〜400 行になります。これを生のまま貼ると Claude Code のコンテキストを浪費する上に、原因仮説が曖昧になりがちです。私は次の形に整形してから投げる癖をつけました。

## 環境
- アプリ: 綺麗な壁紙 v2.1.0 (vc=49)
- 端末: Sharp AQUOS wish4 (DOCOMO SH-52E)
- OS: Android 15 (SDK 35)
- 発生: 7日で 117 events / 99 users(74.4% 寄与)
 
## トップ 5 フレーム(関係ありそうな上位だけ抜粋)
RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline (line 7160)
LinearLayoutManager.scrollBy
RecyclerView.scrollHorizontallyBy
RecyclerView.scrollStep
RecyclerView$ViewFlinger.run
 
## メッセージ
Inconsistency detected. Invalid item position 1(offset:1).state:1030
 
## 既知パターン早見表での当該行
- "ViewPager2 内部 RV の fling 中"
- 修正候補: setItemAnimator(null), setHasFixedSize(true), Predictive Animation を切る
 
## 実装側に予想がついている部分
ThumbnailActivity の ViewPager2 で setAdapter 直後に
mViewPager.getChildAt(0) で内部 RecyclerView を取って
チューニングを当てれば直りそう。Gallery 側にも予防的に当てたい。

Claude Code に投げる前に、自分なりの仮説と「どのファイルを触りたいか」を 3 行でも書いておくと、出力が一気にコードに寄ります。なにも書かずに丸投げすると、解説 8 割・コード 2 割の応答になりがちで、それは個人開発の保守フェーズでは欲しい形ではありません。

このスタックトレースを Claude Code にこのまま貼ると、ほぼ確実に次のような修正案を返してきます。

// ThumbnailActivity#ThumbnailPager.start() に追加
mViewPager.setAdapter(mAdapter);
View inner = mViewPager.getChildAt(0);
if (inner instanceof RecyclerView) {
    RecyclerView rv = (RecyclerView) inner;
    rv.setItemAnimator(null);          // Predictive Animation 由来の状態不整合を抑制
    rv.setHasFixedSize(true);          // ノートブック型再計測のスキップ
}

これは v2.1.0 → v2.1.1 で実際に入れた修正そのままです。修正前は 7 日で 117 events / 99 users、修正後は v2.1.1 リリース後の観察対象として「>99% 帯への改善見込み」と判定しました(クラッシュフリーユーザー 97.98% からの引き上げ)。

setItemAnimator(null) は副作用があります。私の場合、PageJumpSlider のドラッグで setCurrentItem(largePosition, false) を呼んだ時に LayoutManager の再 layout がスキップされて壁紙が変わらないバグ(BW-032)を別途踏みました。Claude Code に「setItemAnimator(null) で何が変わるか、ViewPager2 の挙動に副作用がないか教えて」と聞いておくと、こういう罠を事前に拾えます。

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

この記事の続きを読む

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

この記事で得られること
Crashlytics の生スタックトレースを Claude Code に貼り付けて、ViewPager2 内部 RecyclerView の IndexOutOfBoundsException や Glide の同期デコード ANR を再現性のあるパターンとして潰し切るループの組み方が分かります
Play Vitals のユーザー認識クラッシュ率がしきい値 1.09% にあと 0.01% まで迫った時に、ホットフィックス 1 本に何を入れ何を見送るかの優先順位付け(setItemAnimator(null) / R8 keep.xml / ColorDrawable プレースホルダー)の判断材料を取得できます
個人開発で月 100 本超の Crashlytics 新規 issue を一人で捌くために、既知/未知/対応不可(OS・SDK 起因)を分類する known-bugs-tracker パターンと Claude Code への投げ方を、累計 5,000 万 DL の運用から逆算して習得できます
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Claude Code2026-06-12
Android でペイウォールとレビュー誘導が重なって表示される競合を ModalGate で解決した実装メモ
ペイウォール・レビュー誘導・リワード広告案内の3つのダイアログが同時に表示される競合を、優先度付きの中央ゲート(ModalGate)で解決した実装メモです。Claude Code とのレビューで見つかった閉じ漏れの3経路と Kotlin 実装例を紹介します。
Claude Code2026-06-12
Android の戻るボタン広告ゲートを入れ子から並列独立構造へ — Claude Code と進めた終了フロー再設計の記録
戻るボタンの広告が「出ない」と「出すぎる」を同時に起こした原因は、入れ子分岐に埋め込まれた暗黙の優先度でした。壁紙アプリ v2.1.0 で広告ゲートを並列独立構造へ作り直した過程を、Kotlin実装・Claude Codeへの依頼内容・テストまで含めて記録します。
Claude Code2026-06-02
Claude on Xcode と Claude Code を、iOS 個人開発の日常で 2 週間使い分けた所感
Xcode に常駐する Claude on Xcode と、ターミナルで動く Claude Code を、壁紙アプリの実務で 2 週間並行して使いました。どちらをどの作業に充てると手が止まらないのか、実際の振り分けと判断基準を残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →