RORK LABEN
MAX — Rork MaxがネイティブSwiftアプリを生成。iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDARスキャン、Metalの3Dゲーム、ウィジェット、Live Activities、Core MLまで踏み込めますFUNDING — Rorkがa16zから$2.8Mを調達。月間74.3万訪問・成長率85%と勢いがありますPRICING — 無料で開始でき、有料プランは月額$25から利用できますFLOW — アイデアを英語で説明すると動くコードを生成。共有リンク発行やiOS/Androidビルドに対応しますCOMPARE — 従来のRorkはExpo/React Nativeでクロスプラットフォーム。用途で使い分けられますMAX — Rork MaxがネイティブSwiftアプリを生成。iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDARスキャン、Metalの3Dゲーム、ウィジェット、Live Activities、Core MLまで踏み込めますFUNDING — Rorkがa16zから$2.8Mを調達。月間74.3万訪問・成長率85%と勢いがありますPRICING — 無料で開始でき、有料プランは月額$25から利用できますFLOW — アイデアを英語で説明すると動くコードを生成。共有リンク発行やiOS/Androidビルドに対応しますCOMPARE — 従来のRorkはExpo/React Nativeでクロスプラットフォーム。用途で使い分けられます
記事一覧/開発ツール
開発ツール/2026-06-27中級

リリースを重ねたら起動が静かに重くなっていたとき — Rork運用で効いたTTI計測と起動バジェットのメモ

Rorkで作ったアプリの起動が、機能を足すうちに少しずつ重くなる。平均値では気づけないコールドスタートの劣化を、起動トレースとTTIマークで計測し、CIの起動バジェットで止めるまでの運用メモです。

Rork462performance3cold startTTIReact Native188

プレミアム記事

リリース直後のアプリは、たいてい気持ちよく立ち上がります。問題は半年後です。機能を足し、SDKを増やし、画面を増やしていくうちに、起動が「なんとなく重い」状態へ静かに滑り落ちていきます。どのリリースが犯人かと聞かれても答えられない。一回の劣化が小さすぎて、その都度は誰も気づかないからです。

私は個人開発で壁紙系のアプリを長く運用していますが、起動の重さはレビュー評価とアンインストール率にじわじわ効いてきます。AdMob による広告と解析を足したあとに「最近もっさりする」というレビューが増え、原因を一つに絞れずに数日を溶かしたことがありました。このメモは、その手の「犯人不明の起動劣化」を、感覚ではなく数字で追えるようにするための運用記録です。Rork(React Native / Expo 出力)で作ったアプリを前提にしています。

平均値は劣化を隠す

最初に捨てたほうがいい癖が、起動時間を一つの平均値で見ることです。平均は速い端末と暖まったキャッシュに引っ張られて、実際の体感より良い数字を出します。

見るべきは三つに分けた起動です。

種類定義なぜ見るか
コールドスタートプロセスが存在しない状態からの起動新規ユーザーと再起動後の第一印象を決める。最も遅く、最も重要
ウォームスタートプロセスは生きていて画面を作り直す起動SDK初期化やルート構築の重さが出る
ホットスタートバックグラウンドから戻るだけここが遅いならリスナーやリレンダの問題

そして平均ではなく p75 と p95 を見ます。体感のクレームは遅い側の四分の一から出ます。さらに端末を分けます。最新の iPhone だけ見ていると、実ユーザーの多くが使う数年前の Android 中位機での劣化を丸ごと見落とします。私の場合、手元の検証は必ず一番遅い実機を一台固定で持っておき、その端末でのコールドスタート p75 を基準値にしています。

「いつ操作できるか」を計測する

起動の指標としてよく出てくるのが TTI(Time To Interactive)です。スプラッシュが消えた瞬間ではなく、ユーザーが実際に最初の操作をできるようになった瞬間までの時間です。スプラッシュを長く見せれば「起動が速く見える」だけで、操作可能になるまでが遅ければ体感は改善しません。

計測は二段構えにします。ネイティブのプロセス開始からの「アプリ起動トレース」と、JS 側で最初の画面が本当に使える状態になった「TTI マーク」です。

ネイティブ側のトレースは、自前で正確に測るのは骨が折れるので、Firebase Performance の自動 _app_start トレースか、Sentry のモバイル App Start 計測に任せるのが現実的です。Rork が出力した Expo プロジェクトに後乗せできます。

JS 側の TTI マークは、最初のインタラクティブな画面のマウント完了時に一度だけ記録します。react-native-performance を使うと performance.now() 起点で扱いやすくなります。

// app/_layout.tsx など、ルートの最上位で
import performance from 'react-native-performance';
import { useEffect, useRef } from 'react';
 
// モジュール評価のいちばん早い地点でマークを置く
performance.mark('jsModuleStart');
 
export function useReportTTI(screenName: string) {
  const reported = useRef(false);
 
  useEffect(() => {
    // 最初のフレームが描画され、操作可能になった直後
    if (reported.current) return;
    reported.current = true;
 
    performance.mark('firstScreenInteractive');
    const tti = performance.measure(
      'tti',
      'jsModuleStart',
      'firstScreenInteractive'
    );
 
    // 解析へ送る。リリースバージョンを必ず添える
    reportMetric('tti_ms', Math.round(tti.duration), {
      screen: screenName,
      appVersion: APP_VERSION,
      coldStart: wasColdStart(),
    });
  }, [screenName]);
}

ここで肝心なのは、計測値に必ず appVersion を添えることです。これがないと、あとで「どのリリースから遅くなったか」を切り分けられません。起動劣化の調査は、結局この紐づけがあるかどうかで難易度が変わります。

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

この記事の続きを読む

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

この記事で得られること
平均ではなくコールドスタートのp75と低スペック端末で起動劣化を捉える計測の置き方
ネイティブの起動トレースとJS側のTTIマークをリリースに紐づけて回帰の出どころを特定する手順
起動時間と初期バンドルをCIで監視し、PRで静かな劣化を止める起動バジェットの作り方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-27
Rork の共有リンクで配布前に実機差分を潰す手順 — プレビューで気づけない不具合の検証順
Rork のエディタプレビューは整った環境で動くため、実機でしか出ない不具合を見逃します。共有リンクで配布する前に潰すべき7つの実機差分と検証の順番、仕込んでおくコードを実体験からまとめました。
開発ツール2026-06-26
Rorkのアプリで音をバックグラウンド再生し、ロック画面から操作できるようにする
Rorkが生成したExpoアプリで音楽やヒーリング音をバックグラウンド再生し、ロック画面・コントロールセンターから操作できるようにするまでを、expo-audioの実装コードと落とし穴つきでまとめます。
開発ツール2026-06-25
海外に行くと毎朝の通知が9時に来ない — Expoの定時ローカル通知をタイムゾーンと夏時間に強くする設計
Rork(Expo)で作った定時リマインダーが、出張やサマータイムで現地の9時に届かなくなる問題。timeIntervalトリガーの落とし穴と、ローカル時刻基準で再スケジュールする設計を実装コード付きで整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →