◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-04-16上級

Rork が生成した React Native コードのメモリリークを React Native DevTools と Instruments で診断して直す手順

Rork が生成する React Native コードに潜むメモリリークを、React Native DevTools のメモリパネルと Xcode Instruments で診断する手順、ヒープ増分の判断基準、5パターンの修正コードまでまとめました。Flipper 前提の記事が使えなくなった今の環境に合わせて計測手順を作り直しています。

React Native239メモリリークReact Native DevToolsXcode Instrumentsデバッグ22パフォーマンス最適化3Rork585

✦ プレミアム記事

壁紙アプリのプレビュー画面を 20 回ほど行き来したあと、端末が明らかに熱を持っていました。落ちるわけではない。ただ、指の下でスクロールがわずかに引っかかる。個人開発でこの「わずかに引っかかる」を放置した結果、D7 リテンションが 18% 落ち、連動して AdMob の eCPM が 22% 下がるところまで見届けたことがあります。広告ネットワークから見れば、すぐ離脱するアプリは単価を下げてよい対象なのだと、数字で思い知らされました。

Rork は React Native + Expo の構成でよく動くコードを出してくれます。ただ「動くコード」と「メモリを適切に解放するコード」は別物です。生成されたコードは宣言的な部分が整っている一方で、後始末のコードだけがすっぽり抜けていることが珍しくありません。

そしてもう一つ。この記事は当初 Flipper を前提に書いていましたが、その前提はすでに崩れています。React Native の Flipper 統合は 0.73 で非推奨となり、0.74 で新規テンプレートから外れ、0.76 以降は React Native DevTools が既定のデバッガになりました。Expo も SDK 50 の時点で Flipper のサポートを外しています。ネット上に残る「Flipper でメモリを見る」手順の多くが、今の環境では最初の接続すら通りません。以下は、その置き換えを済ませたあとの計測手順です。

なぜ Rork のコードでメモリリークが起きやすいのか

Rork の生成は、React のフックを使った宣言的な書き方は得意ですが、ライフサイクル周りの細かい後始末は省略されがちです。具体的には以下の4つの傾向が繰り返し観察できます。

  • useEffect でイベントリスナーを登録するがクリーンアップ関数を返さない
  • setInterval や setTimeout を使うがコンポーネントアンマウント時にクリアしない
  • 非同期処理の結果をアンマウント後もステートに書き込もうとする
  • Supabase / Firebase のリアルタイム購読や RevenueCat のリスナーを解除しない

いずれもコードとしては「動く」のが厄介なところです。長時間使うと確実にメモリが積み上がり、最後にはバックグラウンド復帰時の OS キル、つまり「アプリが落ちた」という体験につながります。壁紙アプリのように一回のセッションが短くてもアプリ内で頻繁に画面遷移するタイプは特に被害が大きく、画面遷移 10 回でヒープが 5MB 以上増えるようになった時期は、レビュー欄に「重い」「落ちる」が目に見えて増えました。

運用視点でのリリース判断基準

計測手順の前に、どこで線を引いているかを先に共有しておきます。ツールが Flipper から React Native DevTools に変わっても、この数値そのものは変える必要がありませんでした。見ているのはツールではなく、JS ヒープの増え方だからです。

  1. 10 往復後のヒープ増分が 3MB 未満 → リリース可
  2. 増分 3〜5MB → デバッグして原因特定 → 修正できたらリリース
  3. 増分 5MB 超 → 本番リリース停止。原因が特定できるまで App Store / Google Play の Submit を止める
  4. 増分 10MB 超 → 既にリリース済みなら緊急アップデート(48 時間以内)

この数字は端末の RAM 容量と OS のメモリ警告タイミングから逆算しています。4GB RAM の iOS 端末では、フォアグラウンドのアプリが概ね 1.3〜1.4GB を超えたあたりから OS キルの候補に上がります。起動直後 100MB のアプリが 10 往復ごとに 5MB ずつ積み上げると、単純計算で 2,600 往復。一見遠く思えますが、実際には画像キャッシュやネイティブ側の確保がここに乗るため、体感の劣化は桁ひとつ手前で始まります。

絶対値ではなく増え方を見る。 これが一番言いたいことです。リークのないアプリは、同じ操作を何度繰り返してもヒープが元の値付近に戻ります。戻らないものだけがリークです。

✦

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

この記事の続きを読む

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

この記事で得られること
✦Flipper 廃止後の React Native DevTools メモリパネルで、ヒープスナップショットを比較しながらリーク源のクラスを特定する手順を通しで追えます
✦10 往復後のヒープ増分 5MB 超で本番リリースを止める、という運用可能な数値基準に落とし込めます
✦useEffect / タイマー / アンマウント後の setState / Supabase・RevenueCat 購読 / FlashList キーの5パターンを Before/After コードで即修正できます
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-09-04
EAS の secret は「アプリに入れない」設定ではありません — 接頭辞と可視性を別々に決める
EXPO_PUBLIC_ の接頭辞は成果物に入るかを決め、EAS の可視性は誰が読めるかを決めます。二つを重ねたときに OTA 更新でだけ値が消える筋道と、出荷前に自分の手で確かめる手順をまとめました。
⬡ 開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
⬡ 開発ツール2026-08-14
Expo SDK 57 に上げる前に、prebuild で消えるネイティブ変更を洗い出す
Expo SDK 57 では expo prebuild が既定で ios と android を消してから再生成します。手編集を上げる前に洗い出す方法、config plugin への移し替え、57.0.9 で解消したメモリ回帰までを実務の順序でまとめました。