◉RORK LABEN
●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主●EXPO — EAS Observe がネイティブクラッシュも記録(10/07)。SDK 57 は 57.0.21 以降で確認できます●SDK 58 — SDK 58 Beta は 9/15 公開。stable の日付はまだ未確認です●RN 0.88 — React Native 0.88.x の正式リリース予定は 10/12、残り3日●Q&A — expo-widgets が本番ビルドだけ真っ黒になる、という問いが出ています●RORK — 09-29 に GPT-6.1 Sol を追加。Pro・Max プランで利用できます●NEW — クライアントのアプリを作る前に決める、公開アカウントの持ち主
記事一覧/開発ツール
⬡ 開発ツール/2026-06-29上級

New Architecture へ移行したら本番だけ画面がカクつくとき — interop 層への静かなフォールバックを計測して切り分ける運用メモ

New Architecture へ切り替えた Rork アプリが、開発中は快適なのにリリースビルドの実機でだけ一覧スクロールがカクつく。原因は旧式ネイティブモジュールが interop 層へ静かにフォールバックしていたことでした。検知の計測と段階的な切り戻しの実務メモです。

Rork577React Native238New Architecture4TurboModulesFabricパフォーマンス33interopリリースビルド

✦ プレミアム記事

開発機では出ない不具合に半日溶かした話

ある壁紙アプリを Expo SDK 52 系へ上げ、New Architecture を有効にしたまま数週間、特に問題なく運用していました。ところが、ある日 TestFlight に配ったビルドで「一覧をスクロールすると一瞬引っかかる」という報告が届きます。手元の開発ビルドでは何度試しても再現しません。Expo Go でも、expo run:ios のデバッグビルドでも、滑らかに動くのです。

最終的に原因は、特定のサードパーティ製ネイティブモジュールが New Architecture の TurboModule として動かず、interop 層(後方互換のためのブリッジ)を経由して静かに動いていたことでした。interop 層は「動かなくする」のではなく「遅いまま動かす」ので、機能テストはすべて通ります。だからこそ release ビルドの実機で、しかも特定画面でだけ顔を出すのです。

このメモは、同じ「dev では出ないが release でだけ出る」種類の回帰に当たったときに、当て推量ではなく計測で切り分け、全体を旧アーキへ巻き戻さずに直すための実務記録です。私自身、2014年から個人開発を続けていますが、こうした「環境差で出たり消えたりする」不具合ほど、まず観測点を置くことが近道だと感じています。

なぜ dev と release で挙動が割れるのか

New Architecture では、JavaScript とネイティブの間が JSI(直接参照)に置き換わり、ネイティブモジュールは TurboModule として遅延初期化されます。しかし旧式の NativeModules / NativeEventEmitter に依存したライブラリは、いきなり動かなくなるわけではありません。React Native は interop 層を用意していて、旧 API を新ランタイム上で取り持ってくれます。

問題は、この取り持ちにコストがかかる点です。旧経路では呼び出しごとに JSON シリアライズとスレッド跨ぎが発生し、JSI のゼロコピー同期呼び出しの恩恵が消えます。一覧のセルがマウントのたびに旧式モジュール(例えば画像のメタ情報取得やデバイス情報の同期取得)を叩いていると、その差がスクロールのフレーム落ちとして表面化します。

dev ビルドでこれが見えにくいのは、Metro のリロード前提で最適化が浅く、そもそも体感のばらつきが大きいからです。逆に release ビルドは Hermes のバイトコード化や最適化が効くぶん、相対的に「旧経路だけが遅い」という差が際立ちます。つまり release でだけ出るのは偶然ではなく、構造的に起きやすい現象です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦「dev では出ないが release でだけ出る」回帰を、interop 層フォールバックの計測で切り分ける手順
✦どのネイティブモジュールが legacy 経路に落ちているかを起動時に列挙する実装
✦全体を旧アーキへ戻さず、問題モジュールだけを隔離して段階的に直す切り戻し設計
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-07-24
同じ通信が同時に何本も飛ぶのを1本に束ねる — 参照カウント付きシングルフライト層の設計
起動直後に同じ API へ何本ものリクエストが同時に飛ぶ多重フェッチを、進行中の Promise を共有して1本に束ねる設計です。束ねる範囲を決めるキーの組み立て方、失敗した Promise を配り続けてしまう罠、呼び出し側の中断が全体を巻き込む罠、そして束ね率を数えて回帰を止めるテストまで、参照カウント付きシングルフライト層の実装を実測の通信ログとともに残します。
⬡ 開発ツール2026-05-02
FlatList でカクつき始めたら読む — Rork アプリを FlashList v2 で快適にする実装手順
Rork で生成したアプリの長いリストが重くなったとき、FlashList v2 へ移行することでスクロールが大幅に滑らかになります。estimatedItemSize が不要になった v2 の思想を踏まえた、現実的な移行手順を解説します。
⬡ 開発ツール2026-04-25
Rork アプリでスケルトンスクリーンを実装する — 読み込み中の体感速度を改善する実践パターン
Rork で作ったアプリの「読み込み中」が、ただのぐるぐるスピナーで終わっていませんか。スケルトンスクリーンと Shimmer エフェクトを取り入れるだけで、体感速度と離脱率は大きく変わります。実装の型と注意点を整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます