AI

React NativeでオンデバイスAI:ExecuTorchでLLMをローカル実行する

前回の記事では、FastAPIバックエンドを用いたストリーミングAIチャットボットを構築しました。このパターンはエンタープライズユースケースの大半をカバーします。しかし、個人情報保護法(APPI)J-SOX監査証跡経済安全保障推進法に対応した完全なデータローカライゼーション要件、オフライン動作、大量メッセージでのコスト管理など、特定の要件に対しては、デバイス上で直接モデルを実行することが正解となります。

2026年において、これはもはや研究段階ではありません。Snapdragon 8 Eliteデバイスでの20ms以下のinferenceレイテンシ、GPT-3.5相当の品質を持つ1〜5 GBモデル、そしてReact Nativeの慣れ親しんだReactフックに包んだライブラリ——オンデバイスAIはプロダクション水準を超えました。


なぜオンデバイスなのか:4つの理由

1. APPIおよびJ-SOXに対応したアーキテクチャレベルのプライバシー保護。 inferenceがデバイス上で完結すれば、ユーザーデータは外部に出ません。APIコールの監査ログもなく、第三者サーバーへのデータ転送もなし。個人情報を扱うアプリにとって、越境データ転送リスクをアーキテクチャレベルで排除できます。

2. 低レイテンシ。 クラウドのラウンドトリップは最初のトークン表示まで200〜800ms加算されます。Snapdragon 8 Eliteでのオンデバイスファーストトークンレイテンシは100ms未満です。

3. 大量メッセージでのコスト。 高いメッセージボリュームでは、per-tokenのAPIコストが積み重なります。オンデバイスの1Bパラメータモデルは初回ダウンロード後、会話あたりの追加コストはゼロです。

4. オフライン動作。 工場フロア、病院の病棟、機内、地下施設——ネットワークが不安定な環境でもオンデバイスAIは動作します。


2026年のReact Native向けオンデバイスツール比較

ライブラリ バックエンド 用途
react-native-executorch Meta ExecuTorch LLM・音声認識・画像分類 — フックAPI完備
react-native-fast-tflite Google LiteRT 2.x 既存TFLiteモデル・ビジョンモデル
MediaPipe(ネイティブモジュール経由) Google MediaPipe 姿勢推定・物体検出・テキスト分類

LLM inferenceにはreact-native-executorch(Software Mansion製)が最適です。useLLMフックがモデルの読み込み、トークンストリーミング、メモリ管理を担い、useWhisperでオンデバイス音声認識も可能です。

注意: react-native-executorchにはNew Architectureが必須です。RN 0.84(2026年3月)でiOSビルドからレガシーブリッジのサポートが完全に削除されました。


Part 1: セットアップ

yarn add react-native-executorch
yarn add react-native-executorch-expo-resource-fetcher
yarn add expo-file-system expo-asset

アプリのエントリーポイントで初期化:

import { initExecutorch } from 'react-native-executorch';
import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher';

initExecutorch({
  resourceFetcher: ExpoResourceFetcher,
});

Part 2: 日本市場向けモデル選定

モデル サイズ 必要RAM ファーストトークン 備考
LFM2.5 1.2B Instruct ~900 MB ~1.4 GB ~80ms 品質・サイズ比が最良
Llama 3.2 1B ~850 MB ~1.3 GB ~90ms 多言語対応
Qwen2.5 0.5B ~400 MB ~700 MB ~45ms ミドルレンジ端末向け
Llama 3.2 3B ~2.0 GB ~3.0 GB ~210ms 高品質・フラグシップ専用

日本市場では2024年以降のフラグシップが主流のため、LFM2.5 1.2Bを基本推奨とします。企業の基幹業務アプリ(勘定奉行・弥生との連携を想定したモバイルフロントエンドなど)でオフライン動作が必要な場合も、このモデルサイズが実用的な選択肢です。


Part 3: オンデバイスチャットUI

import { useLLM, models, type Message } from 'react-native-executorch';

const llm = useLLM({
  model: models.llm.lfm2_5_1_2b_instruct(),
});

// 初回ダウンロード進捗表示
if (llm.downloadProgress < 1) {
  return (
    <View>
      <Text>AIモデルをダウンロード中…</Text>
      <Text>{Math.round(llm.downloadProgress * 100)}%</Text>
      <Text>この処理は初回のみです。モデルはデバイスに保存されます。</Text>
    </View>
  );
}

// トークンストリーミングで生成
await llm.generate(messages, {
  onToken: (token: string) => {
    setMessages((prev) => {
      const updated = [...prev];
      updated[updated.length - 1].content += token;
      return [...updated];
    });
  },
});

Part 4: ハイブリッドアーキテクチャ

プロダクションアプリでは、オンデバイスとクラウドを組み合わせるパターンが最も堅牢です:

  • オンデバイス: 個人情報を含むクエリ、オフラインシナリオ、大量メッセージ
  • クラウド: 複雑な推論、長文書のシンセシス、旧世代端末のユーザー
export function useHybridAI() {
  const llm = useLLM({ model: models.llm.lfm2_5_1_2b_instruct() });
  const [isCloudMode, setIsCloudMode] = useState(false);

  const generate = async (messages, onToken) => {
    if (isCloudMode || !llm.isReady) {
      await cloudGenerate(messages, onToken); // R-03のFastAPIエンドポイント
    } else {
      await llm.generate(messages, { onToken });
    }
  };

  return {
    generate,
    isOnDevice: !isCloudMode && llm.isReady,
  };
}

UIには「オンデバイス・データ送信なし」または「クラウドAI」のバッジを表示し、どちらのモードで動作しているかを常にユーザーに明示します。これはJ-SOX監査における透明性要件にも対応します。


Part 5: 本番運用での注意事項

モデルダウンロードのUXは最重要。 アプリ起動時に自動ダウンロードするのは絶対に避けてください。ユーザーによる明示的なオプトインを設けます。「AIアシスタントを有効にする(約900 MBダウンロード)」のような表示が適切です。

メモリ管理。 画面を離れる際にはモデルをアンロードしてください:

useEffect(() => {
  return () => { llm.interrupt(); };
}, []);

コンテキストウィンドウ制限。 オンデバイスモデルのコンテキストは2K〜8Kトークン程度です。スライディングウィンドウで会話履歴をトリムしてください。

OOMエラー時のフォールバック:

try {
  await llm.generate(messages, { onToken });
} catch (err: unknown) {
  if (err instanceof Error && err.message.includes('out of memory')) {
    setIsCloudMode(true);
    await cloudGenerate(messages, onToken);
  }
}

よくある質問

react-native-executorchはExpo managed workflowで使えますか?

expo-dev-clientを使えば可能です。Expo Goでは動作しません(ネイティブモジュールが必要なため)。

どのデバイスでオンデバイスLLMが動作しますか?

RAM 6 GB以上でLFM2.5 1.2Bが動作します。Snapdragon 8 Gen 3・8 Elite(QNN NPU)またはApple A17 Pro以降(ANE)でハードウェアアクセラレーションが有効になります。

自社でファインチューニングしたモデルを使えますか?

可能です。PyTorchモデルをtorch.export.pte形式にエクスポートし、そのURLをuseLLMに渡します。

エンタープライズRAGアプリに適していますか?

ハイブリッドアプローチが最適です:エンベディングと検索をオンデバイスで行い、長いコンテキストが必要な最終的な回答生成をクラウドモデルで行います。これはsimpliDocのドキュメントレイヤーをモバイルフロントエンドに接続する際に使用しているアーキテクチャです。


次のステップ

Rシリーズの次の記事では、React NativeアプリをプライベートドキュメントコーパスのRAGパイプラインと接続する方法を解説します。

プライベートなオンデバイスAI、または企業内文書への安全なモバイルアクセスが必要なプロジェクトがあれば、Simplicoチームにご連絡ください