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-03上級

Rork アプリ パフォーマンス最適化:レンダリング・メモリ・バンドルサイズを徹底チューニング

Rork製アプリのパフォーマンスを体系的にチューニングします。React Nativeのレンダリング理解、FlatListの調整、FlipperとHermes Profilerによるボトルネック特定、メモリリーク対策、60fpsアニメーション、バンドルサイズ削減、起動時間短縮まで章立てで扱います。

パフォーマンス最適化3React Native233Rork Max232メモリ管理3レンダリングバンドルサイズFlipperReanimated10

プレミアム記事

取り組みの背景:パフォーマンスがアプリの命運を決める

Rork でアプリを構築する際、機能の実装に集中するあまり、パフォーマンス最適化を後回しにしてしまうことは珍しくありません。しかし、App Store のレビューや競合との差別化において、「速さ」と「滑らかさ」は決定的な要素です。実際、Google の調査によれば、読み込み時間が 1 秒から 3 秒になるだけで直帰率は 32% 上昇し、ユーザー定着率にも大きな影響を与えます。


第1章:React Native のレンダリングを深く理解する

React のレンダリングサイクル

React Native は、JavaScript スレッドと UI スレッド(メインスレッド)を分離した架け台構造を持っています。状態(state)や props が変更されると、React は仮想 DOM を再計算し、差分(diff)を UI スレッドに送信します。この「ブリッジ通信」がボトルネックになりがちです(新アーキテクチャの JSI では改善されていますが)。

最も頻繁に起こる問題は「不要な再レンダリング」です。親コンポーネントが再レンダリングされると、デフォルトでは子コンポーネントもすべて再レンダリングされます。これを防ぐのが React.memouseCallback / useMemo です。

React.memo で不要な再描画を防ぐ

// ❌ 悪い例:親が更新されるたびに Card も再描画される
const Card = ({ title, onPress }) => {
  console.log('Card rendered:', title);
  return <TouchableOpacity onPress={onPress}><Text>{title}</Text></TouchableOpacity>;
};
 
// ✅ 良い例:propsが変わらない限り再描画しない
const Card = React.memo(({ title, onPress }) => {
  console.log('Card rendered:', title);
  return <TouchableOpacity onPress={onPress}><Text>{title}</Text></TouchableOpacity>;
});
 
// 親コンポーネントでの useCallback が必須
const ParentScreen = () => {
  const [count, setCount] = useState(0);
 
  // ❌ これがあると Card は毎回再描画される(関数が毎回新しく作られるため)
  // const handlePress = () => console.log('pressed');
 
  // ✅ useCallback で関数を安定させる
  const handlePress = useCallback(() => {
    console.log('pressed');
  }, []); // 依存配列が空なら初回のみ作成
 
  return (
    <View>
      <Button onPress={() => setCount(c => c + 1)} title="Increment" />
      <Card title="Item" onPress={handlePress} />
    </View>
  );
};

useMemo で重い計算をキャッシュする

const ProductList = ({ products, searchQuery }) => {
  // ❌ 毎レンダリング時にフィルタリングが走る
  // const filtered = products.filter(p => p.name.includes(searchQuery));
 
  // ✅ searchQuery か products が変わった時だけ再計算
  const filtered = useMemo(() => {
    return products.filter(p =>
      p.name.toLowerCase().includes(searchQuery.toLowerCase())
    );
  }, [products, searchQuery]);
 
  return <FlatList data={filtered} renderItem={/* ... */} />;
};

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

この記事の続きを読む

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

この記事で得られること
React Native のレンダリングサイクルを深く理解し、不要な再描画を根絶する実装テクニックを習得できる
Flipper・Hermes Profiler を使った実機パフォーマンス計測と具体的なボトルネック特定手法を学べる
バンドルサイズ削減・メモリリーク防止・アニメーション60fps維持の包括的チェックリストを手に入れられる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-25
壁紙アプリの画像キャッシュが静かに膨らんでメモリで落ちる — Rork運用で効いた計測と上限設計の運用メモ
画像が主役のRorkアプリで、ディスクキャッシュとメモリ常駐が少しずつ膨らみ、OOMクラッシュとして表面化する問題への対処。実測フック・キャッシュ上限・配信側リサイズまで、運用で効いた順に実装コード付きで整理します。
開発ツール2026-06-23
「視差効果を減らす」をオンにした人に、アニメーションをどう返すか — Expo で Reduce Motion を尊重する層を作る
iOS の「視差効果を減らす」/ Android の「アニメーションを削除」をオンにした利用者に、アニメーションをどう出し分けるか。AccessibilityInfo と Reanimated の ReduceMotion を組み合わせ、消すのではなく「穏やかな代替」を返す実装層を作ります。
開発ツール2026-06-21
Rork のお気に入り一覧を長押しドラッグで並べ替える — 再レンダリングを抑えた reorderable list と並び順の永続化
Rork が生成したお気に入り一覧に、長押しドラッグの並べ替えを後から足す実装手順です。再レンダリングを抑える設計、worklet の境界、並び順の永続化、ジャンクやゴーストカードの回避までを実コードでまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →