モバイルアプリをiOSとAndroidの両方で効率よく開発したいとき、最初に直面するのが「FlutterとReact Nativeのどちらを選ぶか」という問題です。どちらもクロスプラットフォーム開発の代表的なフレームワークですが、設計思想・描画方式・使用言語が根本的に異なります。

2026年現在、FlutterはImpellerレンダリングエンジンの標準化やDesktop対応の安定化が進み、React NativeはNew Architectureのデフォルト有効化とExpoエコシステムの急成長で大きく進化しました。数年前とは状況が一変しているため、古い情報に基づく選定は危険です。

この記事では、両フレームワークの技術的な違い・2026年の最新動向・実際の採用企業事例・プロジェクト特性に応じた選定基準を、具体的なデータとコード例を交えて整理しています。

クロスプラットフォーム開発の二大フレームワーク

Flutter — Google製のUIツールキット

FlutterはGoogleが2018年に正式リリースしたオープンソースのUIツールキットです。プログラミング言語にDartを採用し、iOS・Android・Web・Windows・macOS・Linuxの6プラットフォームに対応しています。

独自のレンダリングエンジン(Impeller)でUIを直接描画する設計が最大の特徴で、プラットフォーム間でピクセル単位の一貫したUIを実現できます。2026年2月時点の最新安定版は Flutter 3.41(Dart 3.11同梱)で、868コミット・145名のコントリビューターによるリリースです(出典: Flutter公式ブログ)。

GitHub Starsは約17.5万で、クロスプラットフォームフレームワークとしては最多です(出典: GitHub)。

React Native — Meta製のモバイルフレームワーク

React NativeはMeta(旧Facebook)が2015年にオープンソースとして公開したフレームワークです。JavaScriptまたはTypeScriptで開発でき、Reactのコンポーネントモデルをモバイルアプリ開発に拡張しています。

FlutterがUIを自前で描画するのに対し、React NativeはOS標準のネイティブUIコンポーネントをJavaScriptから操作する設計です。2026年2月にリリースされた React Native 0.84 が最新安定版で、Hermes V1エンジンのデフォルト化やiOSプリコンパイルバイナリによるビルド高速化が特徴です(出典: React Native公式ブログ)。

GitHub Starsは約12.5万で、npmでの週間ダウンロード数は約2,200万に達しています。JavaScript / TypeScriptエコシステムの広大なパッケージ資産を活用できる点が最大の強みです(出典: GitHub出典: npm)。

技術アーキテクチャの根本的な違い

描画方式 — 独自レンダリング vs ネイティブコンポーネント

両フレームワークの最も根本的な違いは、画面描画の仕組みです。

Flutter は独自のレンダリングエンジン(Impeller)を使い、Skiaグラフィックスライブラリを介してCanvasに直接UIを描画します。OSのUIコンポーネントは一切使わず、ボタンもテキストフィールドもすべてFlutter側で再実装されています。

React Native はOS標準のネイティブUIコンポーネント(iOSならUIKit、AndroidならAndroid View)をJavaScriptから生成・操作します。0.76以降のNew Architectureでは、JSI(JavaScript Interface)を介してネイティブ側と同期的に通信します(出典: React Native 0.76リリースノート)。

観点FlutterReact Native
描画方式独自レンダリングエンジン(Impeller)OSネイティブUIコンポーネント
UI一貫性全プラットフォームで同一の見た目OS標準UIに準拠
プラットフォーム感独自デザイン寄りネイティブアプリに近い
カスタムUI自由度が高いネイティブ制約あり

言語とランタイム — Dart vs JavaScript/TypeScript

FlutterはDart言語を使用します。Dartはnull安全、AOT(Ahead-of-Time)コンパイル、パターンマッチングなどモダンな機能を備えた言語で、Dart 3.x ではrecords(タプル型)、sealed classes、class modifiersなどが追加されています(出典: Dart公式)。

React NativeはJavaScript / TypeScriptで開発します。Webフロントエンド開発者にとって学習コストが低く、既存のReactの知識をそのまま活かせます。ランタイムには Hermes V1エンジン がReact Native 0.84からデフォルト採用されており、実行速度とメモリ使用量が大幅に最適化されています(出典: React Native 0.84リリースノート)。

// Flutter (Dart) — 型安全なカウンター
class CounterState extends ChangeNotifier {
  int _count = 0;
  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}
// React Native (TypeScript) — 同等のカウンター
const [count, setCount] = useState<number>(0);
const increment = () => setCount(prev => prev + 1);

状態管理のアプローチ

FlutterではProvider、Riverpod、BLoCなどDart専用の状態管理ライブラリが主流です。ウィジェットツリーと状態管理が密結合する設計で、StatefulWidget + setState が最もシンプルなパターンです。

React NativeではReactの useState / useReducer に加え、Redux Toolkit、Zustand、Jotai、TanStack Queryなど、Web由来の豊富な選択肢があります。React 19のServer Components対応もReact Native 0.78で利用可能になりました。

2026年の最新動向と進化

Flutter — Impellerエンジンとマルチプラットフォーム拡大

Flutterは2024〜2025年にかけて大きな技術転換を遂げました。

Impellerレンダリングエンジン がiOS(Flutter 3.16〜)とAndroid(Flutter 3.22〜)でデフォルト化されました。iOSではFlutter 3.29以降Impellerが唯一のレンダラーとなり、Skiaへのフォールバックは不可です。AndroidでもAPI Level 29以上でデフォルト有効です。Impellerはシェーダーの事前コンパイルにより初回フレーム描画時のジャンク(カクつき)を恒久的に排除し、CPU使用量もSkia比で約40%削減しています(出典: Flutter公式ドキュメント)。

Material 3 がFlutter 3.16以降のデフォルトデザインシステムとなり、useMaterial3: true が標準設定です(出典: Flutter公式)。

Desktop対応 はWindows・macOS・LinuxがいずれもFlutter 3.0(2022年5月)以降stableチャンネルで利用可能です。ただし、モバイル向けと比較するとプラグインの対応範囲が限定的な点は留意が必要です(出典: Flutter公式)。

React Native — New ArchitectureとExpoの躍進

React Nativeも2024〜2025年に根本的なアーキテクチャ刷新を果たしました。

New Architecture がReact Native 0.76(2024年10月)で デフォルト有効化 されました。具体的には以下の3要素が標準で動作します(出典: React Native 0.76リリースノート)。

  • Fabric: 新しいレンダリングシステム。UIの同期的な更新を可能にし、描画パフォーマンスが向上
  • TurboModules: ネイティブモジュールの遅延読み込みとJSI経由の型安全な通信を実現
  • Bridgeless Mode: 旧来のBridge(非同期のJSON通信レイヤー)を完全に廃止し、JSIによる直接通信に移行

Expo の成熟も見逃せません。2026年2月時点の安定版は Expo SDK 54 で、SDK 55がベータ公開中です(出典: Expo Changelog)。Expo Routerによるファイルベースルーティング、EAS Build / Submit / UpdateによるクラウドCI/CD、OTAアップデートなど、開発体験が大幅に向上しました。React Native 0.78(2025年3月)でCommunity TemplateがExpoベースに変更されたことで、ExpoがReact Native開発の事実上の標準ツールチェーンとなっています(出典: React Native 0.78リリースノート)。

さらにReact Native 0.82以降ではレガシーアーキテクチャの段階的な削除が進み、0.84で旧Bridge関連コードがiOS・Android両方から完全に除去されました(出典: React Native 0.84リリースノート)。

パフォーマンスの傾向

起動速度とフレームレート

パフォーマンスは「どちらが速いか」と一概に答えられる問題ではなく、アプリの性質や実装方法に大きく左右されます。一般的な傾向を整理します。

Flutter はDartのAOTコンパイルにより、起動後の実行速度に優れます。Impellerエンジンの導入で60fps/120fpsのスムーズなアニメーション描画が安定し、特にアニメーション多用のUIで力を発揮します。

React Native はNew Architecture導入前はBridge経由の非同期通信がボトルネックでしたが、0.76以降のBridgeless Mode + JSIにより大幅に改善されています。0.84で標準化されたHermes V1エンジンは、バイトコード事前コンパイルに加え内部ベンチマークでiOSクリーンビルドが約8倍高速化するなど、パフォーマンスが飛躍的に向上しました。

バイナリサイズとメモリ

指標FlutterReact Native
最小APKサイズ(空アプリ)約7〜10MB約7〜12MB(Hermes有効時)
ランタイムの含有Dartランタイム + Impellerエンジン同梱Hermesエンジン同梱
メモリ使用傾向独自レンダラー分のオーバーヘッドありネイティブUIのため比較的軽量

※ バイナリサイズは使用するライブラリやアセットにより大きく変動します。上記は公式ドキュメントやコミュニティのベンチマーク情報に基づく目安です。

開発体験と生産性

環境構築の手軽さ

Flutterflutter doctor コマンドで環境の問題を一括診断でき、セットアップの手順が明確です。ただし、Dartという新しい言語の習得が前提となります。

React Native はExpoを使うことで npx create-expo-app 一発で環境構築が完了します。Expo Goアプリをスマートフォンにインストールすれば、ネイティブビルド環境がなくても即座にプレビューが可能です。ただしカスタムネイティブモジュールを使う場合はDevelopment Buildsへの移行が必要です(出典: Expo公式)。

ホットリロード

どちらのフレームワークもホットリロードをサポートしていますが、実装方式が異なります。

FlutterのHot Reloadはウィジェットツリーの状態を保持したままUIを更新する仕組みで、レイアウト変更を即座に反映できます。Hot Restartとの切り分けも明確です。

React NativeのFast Refreshも同様にコンポーネントの状態を保持しますが、フックの依存関係が変わった場合は状態がリセットされます。Expo SDK 54以降ではFast Refreshの安定性がさらに向上しています。

デバッグ・テストツール

機能FlutterReact Native
公式IDE連携VS Code, Android Studio, IntelliJVS Code, WebStorm
デバッガDart DevTools(Widget Inspector, Timeline)Chrome DevTools, Flipper, React DevTools
UIインスペクタWidget InspectorReact DevTools
テストフレームワークflutter_test(Unit/Widget/Integration統合)Jest + React Native Testing Library
E2Eテストintegration_test(公式), PatrolDetox, Maestro, Appium

エコシステムとコミュニティの規模

パッケージ数とGitHub Stars

指標FlutterReact Native
GitHub Stars約17.5万約12.5万
パッケージレポジトリpub.dev(約5万パッケージ)npm(JS/TSエコシステム全体を活用可能)
開発者満足度(Admired)約64%(Stack Overflow調査)約60%(Stack Overflow調査)
クロスプラットフォーム利用率約46%約35%

出典: Stack Overflow Developer SurveyStatista - Cross-platform mobile frameworks

pub.devのパッケージ数は約5万と、npmの総パッケージ数(250万以上)に比べると少なく見えます。ただし、React Native専用パッケージだけを見ると約2万程度で、Flutter専用パッケージとの差は小さくなります。React Nativeの真の強みは、React / JavaScriptエコシステムのライブラリ(日付処理、バリデーション、HTTP通信など)をそのまま利用できる点です。

日本語リソースの充実度

Flutter・React NativeともにQiita、Zennを中心に日本語記事は増加傾向にあります。ただし、React NativeはReactのWeb向け記事から応用できる範囲が広い一方、FlutterはDart固有の知識が必要なため日本語の入門記事がより重要になります。

公式ドキュメントについては、Flutterは日本語コミュニティによる翻訳が部分的に存在し、React Nativeの公式ドキュメントは英語のみですがExpo公式にもチュートリアルが充実しています。

求人市場の動向

日本の求人市場では、React NativeはReact / JavaScript経験者向けの求人にカウントされることが多く、単独の「React Native求人」だけでは実態を把握しにくい構造です。FlutterはDart + Flutter指定の求人が明確に区分されています。

グローバルではFlutterの求人成長率がReact Nativeを上回る傾向にありますが、JavaScript / TypeScriptエンジニアの総数はDartエンジニアを大きく上回るため、React Nativeの方が人材確保しやすいケースもあります。

地域による差も顕著で、ヨーロッパではFlutterが新規プロジェクトの52%を占める一方、北米ではReact Nativeが57%と優勢です。アジアでは両フレームワークが最もバランスよく採用されています(出典: nomtek)。

主要な採用企業・アプリ事例

Flutterの採用事例

企業 / アプリ概要
Google AdsGoogle自身が開発する広告管理アプリ
BMW(MY BMW)車両管理アプリをFlutterで刷新
Nubankブラジル最大のデジタルバンク。ユーザー数1億人超
Alibaba(閑魚)中国最大級の中古品取引アプリ
Toyota車載インフォテインメントシステムに採用。Flutter/Dart製ゲームエンジン「Fluorite」も開発
Universal Studiosパークアプリ(Orlando, Hollywood, Osaka)とEpic Universeのセルフサービスキオスクに採用
じゃらんネットリクルートが運営する旅行予約アプリ。Flutterリプレースで開発工数を約50%削減
メルカリ ハロメルカリのスキマバイトサービス。2024年リリースのFlutter製アプリ
出前館2023年にReact NativeからFlutterへ移行。2年間で4つのアプリを全てFlutterに統一

出典: Flutter ShowcaseメルカリエンジニアリングブログじゃらんFlutterリプレイス(Speaker Deck)出前館 Tech Blog

React Nativeの採用事例

企業 / アプリ概要
Meta(Facebook / Instagram)開発元であるMeta自身が複数アプリで使用
Shopify2020年にモバイル開発の標準技術として採用を宣言し、5年以上運用を継続
Microsoft(Teams / Outlook)複数のMicrosoftモバイルアプリで採用
Discordコミュニケーションアプリ。iOS/Androidで98%のコード共有を実現
Coinbase暗号資産取引プラットフォーム
Tesla車両制御アプリ
Progateプログラミング学習アプリ(日本発)

出典: React Native ShowcaseShopify Engineering BlogFive years of React Native at Shopify

「React Native離れ」の実態

2018年のAirbnb、2021年のスタディサプリ、2023年の出前館など、React Nativeからの撤退・移行事例は複数報告されています。ただし、これらの離脱にはそれぞれ固有の背景があります。

Airbnb(2018年)が指摘した「ネイティブとの統合の困難さ」「パフォーマンス上のボトルネック」は、旧Bridge方式に起因する問題で、2024年10月以降のNew Architecture(Bridgeless Mode + Fabric + TurboModules)で構造的に解消されています(出典: Airbnb Engineering Blog)。

スタディサプリ(2021年)はReact NativeからSwift/Kotlinのネイティブ開発へ移行しました。当時の主な理由はバージョンアップ負荷とネイティブ機能へのアクセス制限です(出典: スタディサプリブログ)。

出前館(2023年〜)はReact NativeからFlutterへ移行し、2年間で4つのアプリを全てFlutterに統一しました。複数の言語・フレームワークが混在した保守コストの解消がFlutter採用の主な動機です(出典: 出前館 Tech Blog)。

一方で、Shopify(2020年に採用宣言し2025年で5年継続)、Microsoft、Coinbaseなど大企業がReact Nativeを本番運用しており、フレームワークとしての勢いは衰えていません。MetaもFacebook・Instagram・Meta Horizonで引き続きReact Nativeを主力技術として投資を続けています。2025年だけで7つのメジャーリリースが行われ、React Conf 2025ではバージョン1.0が「on the horizon(近い将来)」と発表されました(出典: Shopify Engineering Blog出典: Callstack - React Native Wrapped 2025)。

プロジェクト特性に応じた選定基準

Flutterが適しているケース

  • UIの一貫性を最優先するアプリ: ブランド独自のデザインをiOS・Androidで完全に統一したい場合。Flutterの独自レンダリングなら1ピクセルのズレもなく再現可能
  • アニメーション・グラフィックス多用のアプリ: Impellerエンジンによる安定した60fps/120fps描画が活きる
  • モバイル + Web + Desktopのマルチプラットフォーム: 単一コードベースで6プラットフォームに対応したい場合(ただしWeb/Desktopはモバイルほど成熟していない点に注意)
  • チームにDart学習の余裕がある: 新規プロジェクトで言語選択に制約がない場合

React Nativeが適しているケース

  • 既存のReact / JavaScript資産がある: Web版をReactで開発済みのチームなら、コンポーネント設計やビジネスロジックを流用しやすい
  • OS標準のルック&フィールを重視: iOSらしさ・AndroidらしさをUIに反映したい場合、ネイティブコンポーネントを使うReact Nativeが有利
  • Expo中心の高速プロトタイピング: Expo Router + EAS Build/Updateの組み合わせで、環境構築からOTAアップデートまで最速で回せる
  • JavaScript / TypeScriptエンジニアの確保が容易: Web開発者の圧倒的な母数を活かせる

選定チェックリスト

判断基準Flutter有利React Native有利
チームの言語スキルDart学習可 / Java・C#経験ありJavaScript / TypeScript経験者が多い
UI要件カスタムデザイン重視OS標準UI準拠
対応プラットフォームモバイル + Web + Desktopモバイル中心(+ Expoで一部Web対応)
既存コード資産なし(新規プロジェクト)Reactアプリあり
プロトタイプ速度やや時間がかかるExpoで極めて高速
アニメーション要件複雑なアニメーション多用標準的なUI遷移が中心
長期メンテナンスGoogle主導で安定Meta + Expo + Microsoft の多重支援

コード比較 — カウンターアプリの実装例

Flutterの実装例(Dart)

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const CounterPage(),
    );
  }
}

class CounterPage extends StatefulWidget {
  const CounterPage({super.key});

  @override
  State<CounterPage> createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int _counter = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Flutter Counter')),
      body: Center(
        child: Text('$_counter', style: const TextStyle(fontSize: 48)),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => setState(() => _counter++),
        child: const Icon(Icons.add),
      ),
    );
  }
}

FlutterではすべてのUI要素がウィジェット(Widgetクラス)で構成されます。StatefulWidget で状態を管理し、setState を呼び出すとウィジェットツリーが再構築されます。コード量はやや多いものの、型安全に守られた明確な構造です。

React Nativeの実装例(TypeScript + Expo)

import { useState } from 'react';
import { View, Text, Pressable, StyleSheet } from 'react-native';

export default function CounterScreen() {
  const [counter, setCounter] = useState(0);

  return (
    <View style={styles.container}>
      <Text style={styles.count}>{counter}</Text>
      <Pressable
        style={styles.button}
        onPress={() => setCounter(prev => prev + 1)}
      >
        <Text style={styles.buttonText}>+</Text>
      </Pressable>
    </View>
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
  count: { fontSize: 48, fontWeight: 'bold' },
  button: {
    marginTop: 20, width: 56, height: 56, borderRadius: 28,
    backgroundColor: '#6200ee', justifyContent: 'center', alignItems: 'center',
  },
  buttonText: { color: '#fff', fontSize: 24 },
});

React Nativeでは関数コンポーネント + Hooks(useState)が標準です。JSXによる宣言的UIはWebのReactとほぼ同じ書き方で、Reactに慣れた開発者なら即座に読めます。コード量が少なく、記述の自由度が高い反面、StyleSheetの設計には規約が必要です。

CI/CDとデプロイ環境

Microsoft App Centerが2025年3月31日に終了したため(出典: Microsoft)、CI/CDの選択肢が変化しています。

環境Flutter向けReact Native向け
公式推奨Codemagic(Flutterパートナー)EAS Build(Expo公式)
汎用CI/CDGitHub Actions, Bitrise, CircleCIGitHub Actions, Bitrise, CircleCI
デプロイ自動化FastlaneFastlane
OTAアップデートShorebirdEAS Update

ExpoユーザーであればEAS Build / Submit / Updateで ビルドからストア提出、OTAアップデートまでを一元管理 できます。FlutterはCodemagicがFlutter専用の最適化を提供しており、設定の手軽さで優れています。

まとめ

React NativeとFlutterは、それぞれ異なる強みを持つ成熟したフレームワークです。「どちらが優れている」ではなく「どちらがプロジェクトに合っているか」で選ぶことが重要です。

Flutterを選ぶ決め手: カスタムUIの一貫性、アニメーション品質、マルチプラットフォーム(Mobile + Web + Desktop)への展開。Impellerエンジンの安定化でパフォーマンス面の優位性もさらに強化されています。

React Nativeを選ぶ決め手: JavaScript / TypeScriptチームの即戦力化、Expoによる高速な開発サイクル、既存Reactアプリとのコード共有。New Architectureの標準化で、かつて指摘されていたパフォーマンス課題は構造的に解消されました。

2026年現在、どちらのフレームワークも活発にメンテナンスされ、大企業の採用実績も豊富です。チームのスキルセット・プロジェクトのUI要件・対応プラットフォームの範囲を軸に判断すれば、後悔のない選定ができます。