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-06-01上級

起動時間を『予算』として管理する — 6本のアプリでSDK初期化を後ろ倒しにした設計記録

起動時間を場当たり的に速くするのではなく、フェーズごとに予算を割り当てて守る運用に切り替えた記録です。Rork で書き出した6本のアプリでSDK初期化を後ろ倒しにし、CIで予算超過を止めるまでをまとめました。

React Native209起動時間2パフォーマンス30AdMob70設計8

プレミアム記事

きっかけは、6本並行で運用している壁紙アプリのうち、一番ダウンロード数の多い1本の起動が「最近もっさりしてきた」というレビューでした。クラッシュではありません。落ちないし、機能も動く。ただ、タップしてから最初の壁紙一覧が出るまでが、自分で触っても明らかに遅い。計測してみると、コールドスタートの TTI(操作可能になるまでの時間)が、半年前の 1,500ms から 2,400ms に伸びていました。

機能を足すたびに、初期化処理が少しずつ増えていたのです。広告 SDK、解析、リモート設定、フォントのプリロード、お気に入りの復元。どれも単体では「数十ミリ秒だから」と通してきたものでした。2014年から個人開発を続けて累計5,000万ダウンロードを超えるなかで、私が一番くり返してきた失敗がこれです。一つひとつは正しい判断でも、起動という共有資源に対して誰も上限を決めていないと、合計はいくらでも膨らみます。この記事は、起動時間を「速くする」対象から「予算を決めて守る」対象に変えた、その設計と運用の記録です。

なぜ「最適化」ではなく「予算」で考えるようになったか

起動を速くするテクニックは世の中にたくさんあります。Hermes を使う、バンドルを分割する、画像を遅延読み込みする。私もひと通り試しました。ですが、テクニックを単発で当てるアプローチには弱点があります。直した直後は速いのに、数か月後にはまた遅くなるのです。

理由ははっきりしています。最適化は「今ある遅さ」を削る作業なので、新しく足される遅さを防げません。機能追加のたびに初期化が増え、半年かけてまた元の木阿弥になります。私の6本すべてで、これがほぼ同じ周期で起きていました。

そこで考え方を変えました。起動時間は、CPU 時間やメモリと同じ「有限の共有資源」です。であれば、家計と同じように予算を決めて、各処理にいくらまで使ってよいかを割り当て、超えたら止めればいい。視点を「速くする」から「枠内に収める」に移した瞬間に、運用がぐっと安定しました。

宮大工だった祖父たちを思い出します。木組みは、一本ごとに「ここは何分で削る」と決めて手を動かすのではなく、全体の寸法と取り合いを先に決めてから各部材を作る、と聞いたことがあります。起動時間も同じで、全体の枠を先に引いてから各処理に配分するほうが、結果として崩れにくいというのが私の実感です。

起動を3フェーズに分けて予算を配る

最初にやったのは、起動を意味のある3つのフェーズに分けることでした。「起動が遅い」を一つの塊で見ているうちは、どこを削ればいいか判断できません。

私が6本で共通に使っている区切りは次の3つです。

  1. ネイティブ起動フェーズ:プロセス生成からReactルートビューがマウントされるまで。ここはアプリ側のJSではほぼ制御できない領域です。
  2. 初回描画フェーズ:JSが動き始めてから、最初の意味のある画面(壁紙一覧のスケルトン)が描画されるまで。
  3. 対話可能フェーズ:スケルトンが出てから、スクロールやタップに実際に反応できる状態(TTI)になるまで。

そのうえで、各フェーズに予算(上限ms)を割り当てます。私が現在6本で使っている配分はこうです。

  • ネイティブ起動フェーズ:上限 700ms
  • 初回描画フェーズ:上限 600ms
  • 対話可能フェーズ:上限 500ms
  • 合計予算:1,800ms(TTI)

この 1,800ms という数字は、ミドルレンジの実機(私の検証では Pixel 6a と iPhone SE 第3世代)で、ユーザーが「待たされた」と感じ始める手前の経験的なラインとして置いています。端末性能に幅があるので、絶対値より「予算を決めて運用に乗せること」自体が本質です。重要なのは、新しい初期化処理を足したい人(過去の自分を含めて)が、必ずこの表のどこかから時間を捻出しなければならない、という制約が生まれることです。

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

この記事の続きを読む

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

この記事で得られること
起動を3フェーズに分けて予算を配分する考え方と、私が6本で使っている実際の配分表(合計1,800ms)
AdMob・Crashlytics の初期化を最初のフレーム後ろに退避させる Before/After コードと、TTI 2,400ms→1,500ms の実測変化
起動時間の回帰を CI で止めるしきい値ゲートの実装と、しきい値を『超えたら落とす』に倒した理由
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-02
広告の本当のeCPMを自分で測る — Impression-Level Ad Revenue を計測基盤に流し込む実装記録
AdMob の管理画面が見せる平均eCPMだけでは、どの地域やプレースメントが本当に稼いでいるかは分かりません。1インプレッションごとの収益を paidEventListener で受け取り、解析基盤に流して本当のeCPMを出すまでの実装と運用をまとめました。
開発ツール2026-07-14
AI再生成に壊されない設計 — Rork の生成コードと手書きロジックを分ける境界の引き方
Rork へ追加指示を出すたびに手書きのロジックが消える。プロンプトで守るのは対症療法です。生成コードと自分の所有コードを層で分け、再生成が届かない境界を設計で引く方法を、Zustand と service 層の実装例つきでお伝えします。
開発ツール2026-07-10
React Compiler を Expo に入れて、手書き memo を 41 箇所消しました
Rork が生成した React Native 画面に React Compiler を導入し、再レンダリング回数を Profiler で実測しました。手書き memo/useCallback の削除判断、効かない箇所の見分け方、CI での回帰検知までをまとめています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →