RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-05-05上級

Rork アプリ品質メトリクス2026 — Crashlytics・Instruments・Android Vitals で実現するリリース品質管理

Rorkで生成したアプリを本番環境で健全に維持するための品質メトリクス管理ガイド。Firebase Crashlytics、Xcode Instruments、Android Vitalsを使ったクラッシュ率・起動速度・ANR監視と、CIパイプラインへの品質ゲート組み込みを解説します。

品質管理Crashlytics13Instruments3Android VitalsCI/CD8

プレミアム記事

Rork で作ったアプリをリリースしてから数週間後、App Store Connect のダッシュボードを開いて「クラッシュ率が 2.8% になっています」という警告を初めて見たとき、どう対処すればいいかわからず困りました。

Rork は優秀なコードを生成しますが、本番環境の品質管理——クラッシュ率の追跡、起動時間の計測、応答不能(ANR)の検出——は開発者が設計しなければなりません。ここで扱うのはRork アプリを本番品質で維持するためのメトリクス管理の全体像を解説します。

App Store と Google Play の品質基準を理解する

まず、プラットフォームが何を見ているかを把握します。品質指標はランキングに直結するため、ここを無視すると「いいアプリなのに検索で上位に出ない」という事態になります。

App Store の主要品質指標:

クラッシュ率(Crash Rate)は最重要です。Apple は「セッションのうちクラッシュが発生した割合」を測定します。業界標準として 0.5% 未満 を目標にします。1% を超えると App Store のレビューで「クラッシュする」コメントが増え始め、2% を超えると検索順位に明確な影響が出ます。

ハングレート(Hang Rate)も重要です。メインスレッドが 250ms 以上ブロックされた割合です。ユーザーには「操作が固まった」と感じられます。

Google Play の Android Vitals:

ANR(Application Not Responding)レート: 24 時間に一度以上使ったユーザーのうち、ANR が発生した割合。0.47% 未満 が Google Play の「良好なしきい値」です。

クラッシュレート: 24 時間に一度以上使ったユーザーのうち、クラッシュが発生した割合。1.09% 未満 が良好とされます。

これらを超えると Google Play コンソールで警告が表示され、検索順位にペナルティがかかります。

Firebase Crashlytics のセットアップと活用

Firebase Crashlytics は iOS/Android 両方のクラッシュを一元管理できるため、Rork アプリには最適です。基本的な設定は expo-firebase-crashlytics で行いますが、Rork 向けには追加の設定が必要です。

// lib/crashReporting.ts
import crashlytics from '@react-native-firebase/crashlytics';
 
interface ErrorContext {
  userId?: string;
  screen?: string;
  action?: string;
  metadata?: Record<string, string | number | boolean>;
}
 
class CrashReporter {
  private static instance: CrashReporter;
 
  static getInstance(): CrashReporter {
    if (!this.instance) {
      this.instance = new CrashReporter();
    }
    return this.instance;
  }
 
  async setUser(userId: string): Promise<void> {
    await crashlytics().setUserId(userId);
  }
 
  async recordError(error: Error, context?: ErrorContext): Promise<void> {
    // コンテキスト情報を付与してからエラーを記録
    if (context?.screen) {
      await crashlytics().setAttribute('screen', context.screen);
    }
    if (context?.action) {
      await crashlytics().setAttribute('action', context.action);
    }
    if (context?.userId) {
      await crashlytics().setUserId(context.userId);
    }
 
    // カスタムメタデータを追加
    if (context?.metadata) {
      for (const [key, value] of Object.entries(context.metadata)) {
        await crashlytics().setAttribute(key, String(value));
      }
    }
 
    crashlytics().recordError(error);
  }
 
  async log(message: string): Promise<void> {
    crashlytics().log(message);
  }
}
 
export const crashReporter = CrashReporter.getInstance();

重要なのは エラーコンテキストの記録 です。「どの画面で」「何の操作をしていたときに」クラッシュしたかが分からないと、再現も修正もできません。

// app/_layout.tsx
import { ErrorBoundary } from '@/components/ErrorBoundary';
import { crashReporter } from '@/lib/crashReporting';
 
// React Navigation のナビゲーション追跡
const navigationRef = useNavigationContainerRef();
 
useEffect(() => {
  const unsubscribe = navigationRef.addListener('state', () => {
    const currentRoute = navigationRef.getCurrentRoute();
    if (currentRoute?.name) {
      crashReporter.log(`Screen: ${currentRoute.name}`);
      crashlytics().setAttribute('current_screen', currentRoute.name);
    }
  });
  return unsubscribe;
}, []);

ナビゲーション状態を Crashlytics に送り続けることで、「UserProfileScreen でクラッシュ」という情報が取れるようになります。

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

この記事の続きを読む

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

この記事で得られること
App Store/Google Playのランキングアルゴリズムに影響する品質指標の全体像と優先順位
Firebase CrashlyticsとXcode Instrumentsを使った問題の検出・再現・修正サイクルの実践
GitHub Actions + EAS BuildでクラッシュフリーレートとANRを自動監視するCIパイプラインの構築
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-18
Rorkアプリの本番クラッシュを「読める」レポートに変える — dSYM復元と文脈ログ、段階配布の実装メモ
Crashlyticsを入れたのにスタックトレースが読めない——dSYM/mapping復元、文脈を持たせるログ設計、App DistributionとGitHub Actionsの段階配布までを実装メモとしてまとめます。
開発ツール2026-06-01
Android Vitals の ANR 率が上がったとき — メインスレッドを止めない React Native 設計ノート
Rork で書き出した React Native アプリで Android Vitals の ANR 率がしきい値を超えたときの原因切り分けと、メインスレッドを塞がない実装・運用の記録です。
開発ツール2026-05-31
クラッシュフリー率を『予算』として運用する — 個人開発 6 アプリで撤退と投資を判断する SLO 設計ノート
壁紙アプリ 6 本を並行運用するなかで、クラッシュフリー率を「良い・悪い」の二値ではなくエラーバジェットとして扱うようにした設計を共有します。バーンレートを撤退・投資判断のゲートに変える運用ノートです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →