RORK LABEN
PLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっていますPLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっています
記事一覧/開発ツール
開発ツール/2026-04-16上級

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

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

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

プレミアム記事

壁紙アプリのプレビュー画面を 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 でイベントリスナーを登録するがクリーンアップ関数を返さない
  • setIntervalsetTimeout を使うがコンポーネントアンマウント時にクリアしない
  • 非同期処理の結果をアンマウント後もステートに書き込もうとする
  • 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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-06-20
Rork が直せるバグと自分で直すバグを見分ける — エクスポートコードのトリアージ手順
Rorkに任せて直せるバグと、エクスポートしたReact Native/Expoコードを自分で手当てすべきバグを見分けるトリアージ手順です。エラーを層で分ける切り分け、非同期処理の握りつぶし、OSごとの挙動差、権限とATTの順序など5つの手当てを動くコードで示します。
開発ツール2026-06-17
Rork が自分で直せない3割を見極める — エクスポート前提の手直しワークフロー
Rork は遭遇したバグのおよそ7割を自力で直しますが、残り3割は手作業が必要です。再プロンプトで粘るべきか、エクスポートして自分で直すべきかを切り分ける判断基準と、動くコードでの手直し例をまとめました。
開発ツール2026-04-30
Rork の『undefined is not an object』エラーを最短で特定する方法
Rorkで頻発する『undefined is not an object (evaluating ...)』エラーの読み解き方と、典型的な5つの原因をコード付きで解説します。Hermesのスタックが読みにくいときのデバッグ手順もまとめています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →