crash-analytics について
アプリチーム向けのクラッシュ分析スキルです。クラッシュデータの収集、優先順位付け、デバッグ、リリース監視を案内し、クラッシュ率と評価、継続率、App Storeでの表示との関係も扱います。
主な機能
- 01クラッシュレポートの設定
- 02影響度に基づく優先順位付け
- 03レポートの読み取りとデバッグ
- 04シンボリケーションの管理
- 05リリース後のクラッシュ率監視
活用シーン
- 01影響の大きいクラッシュのトリアージ
- 02リリース後のクラッシュ回帰調査
- 03段階的なアプリリリースの監視
- 04クラッシュが評価に与える影響の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ appeeky/ aso-skills --skill crash-analyticsインストール後、Claude Code で/crash-analyticsを入力して読み込まれたか確認します。
詳細
クラッシュ分析
アプリのクラッシュのトリアージ、優先順位付け、削減を支援し、クラッシュ率が App Store での見つけやすさや評価に与える影響を理解します。
クラッシュ率が ASO のシグナルとなる理由
- App Store のランキング — Apple のアルゴリズムは、クラッシュ率の高いアプリの評価を下げます
- App Store での特集 — クラッシュ率が高いと、編集部による選定の対象外になります
- 評価 — クラッシュは星 1 つのレビューの最大の原因です
- 継続率 — 初回セッションでクラッシュすると、Day 1 の継続率が大きく損なわれます
目標: クラッシュのないセッション > 99.5% | クラッシュのないユーザー > 99%
ツール
| ツール | 提供される機能 | セットアップ |
|---|---|---|
| Firebase Crashlytics | クラッシュ、ANR、シンボリケーション済みスタックトレースのリアルタイム表示 | FirebaseCrashlytics pod/SPM パッケージを追加 |
| App Store Connect | クラッシュ率の推移、セッションあたりのクラッシュ数 | 標準搭載、コードは不要 |
| Xcode Organizer | TestFlight と App Store の集約済みクラッシュログ | Xcode → Window → Organizer → Crashes |
| MetricKit | デバイス上の診断情報、ハング率、起動時間 | iOS 13 以降、自動 |
おすすめ: Crashlytics(リアルタイムのアラートと検索)+ App Store Connect(推移の検証)
Crashlytics のセットアップ
iOS(Swift)
// AppDelegate or @main App struct
import FirebaseCore
import FirebaseCrashlytics
@main
struct MyApp: App {
init() {
FirebaseApp.configure()
// Crashlytics is auto-initialized
}
}
非致命的エラー(クラッシュさせずに記録)
// Log a non-fatal error
Crashlytics.crashlytics().record(error: error)
// Log a custom key for debugging context
Crashlytics.crashlytics().setCustomValue(userId, forKey: "user_id")
Crashlytics.crashlytics().setCustomValue(screenName, forKey: "current_screen")
Android(Kotlin)
// build.gradle (app)
implementation("com.google.firebase:firebase-crashlytics:18.x.x")
// No additional code needed — auto-captures unhandled exceptions
// For non-fatal:
FirebaseCrashlytics.getInstance().recordException(throwable)
トリアージのフレームワーク
すべてのクラッシュが同じではありません。影響度に基づいて優先順位を付けます。
優先度スコア = クラッシュ頻度 × 影響を受けたユーザー数 × ユーザーセグメントの重み
| 優先度 | 基準 | 対応時間 |
|---|---|---|
| P0 — 致命的 | 起動時/チェックアウト時/主要機能でクラッシュする、セッションの 1% 超 | 本日中に修正 |
| P1 — 高 | よく使われるフローでクラッシュする、セッションの 0.1% 超 | 今回のリリースで修正 |
| P2 — 中 | エッジケースでクラッシュする、セッションの 0.1% 未満 | 次回のリリースで修正 |
| P3 — 低 | まれで、操作を妨げないクラッシュ、セッションの 0.01% 未満 | バックログに追加 |
Crashlytics ダッシュボードでのトリアージ
- 頻度ではなく、「影響」(影響を受けたユニークユーザー数)で並べ替えます
onboarding、checkout、core feature、background、launchでグループ化します- 上位 3~5 件の問題に P0/P1 を割り当てます
- 0.5% を超えるユーザーに影響する問題について、Crashlytics で発生率アラートを設定します
クラッシュレポートの読み方
Fatal Exception: com.example.NullPointerException
at com.example.UserProfileVC.loadData:87
at com.example.HomeVC.viewDidLoad:45
Keys:
user_id: 12345
current_screen: "home"
app_version: "2.3.1"
os_version: "iOS 17.3"
デバッグ手順:
- Xcode でファイルと行番号(
UserProfileVC.swift:87)を開きます - その時点で nil になり得る値を確認します
- ユーザーの状況(OS バージョン、デバイス、画面)に合わせて再現します
- 修正する前に、失敗するテストを作成します
シンボリケーション
dSYM をアップロードしていれば、Crashlytics が自動的にシンボリケーションします。シンボル化されていないトレースが表示される場合:
# Manually upload dSYMs
./Pods/FirebaseCrashlytics/upload-symbols -gsp GoogleService-Info.plist -p ios MyApp.app.dSYM
Bitcode を有効にしたビルドの場合は、App Store Connect → Activity → Build → dSYMs から dSYM をダウンロードします。
App Store Connect のクラッシュデータ
- App Store Connect → App Analytics → Crashes — バージョンごとのクラッシュ率の推移
- リリースごとに、リリース前後のクラッシュ率を比較します
- 特定のバージョンでの急増は、そのリリースでのリグレッションを示します
クラッシュ率の計算式: クラッシュ数 / セッション数 × 100
影響範囲を最小限に抑えるリリース戦略
段階的リリースを利用して、全面展開の前にクラッシュを検出します。
iOS: App Store Connect → Version → Phased Release(7 日間の展開:1% → 2% → 5% → 10% → 20% → 50% → 100%)
Android: Play Console → Production → Managed publishing → Rollout percentage
ルール: 各段階で 24 時間、Crashlytics を監視します。クラッシュ率が 0.2% を超えて増加した場合は、展開を一時停止します。
クラッシュが原因の星 1 つのレビューへの対応
- クラッシュに関連する星 1 つのレビューが投稿されたアプリのバージョンを特定します
- クラッシュを修正します
- クラッシュに関連する各レビューに返信します:「バージョン X.X で修正しました — アップデートしてください」
- アップデートの公開後、
rating-prompt-strategyを使って評価を回復します
出力形式
クラッシュ監査レポート
Stability Report — [App Name] v[version] ([period])
Crash-free sessions: [X]% (target: >99.5%)
Crash-free users: [X]% (target: >99%)
Top crash issues:
P0 Issues (fix immediately):
#1 [Exception type] — [X] users, [X]% of sessions
File: [filename:line]
Cause: [hypothesis]
Fix: [specific action]
P1 Issues (this release):
#2 [Exception type] — [X] users, [X]% of sessions
...
Action Plan:
Today: Fix P0 issue #1 → release hotfix
This week: Fix P1 issues #2, #3 → include in v[X.X]
Monitoring: Set velocity alert at 0.5% session threshold
関連スキル
app-analytics— 分析スタック全体。Crashlytics はその一部ですrating-prompt-strategy— クラッシュが原因の星 1 つのレビューを解消した後に評価を回復しますreview-management— クラッシュに関連するレビューに返信しますretention-optimization— Day 1 のクラッシュは継続率の指標を損ないますapp-store-featured— クラッシュ率が 2% を超えると、編集部による特集の対象外になります