zudo-tauri-wisdom
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

Tauri Mobile (iOS)

作成 2026年4月16日更新 2026年5月28日Takeshi Takatsudo

Tauri v2 を使って Web フロントエンドをネイティブ iOS アプリとしてラップする

Tauri Mobile とは

Tauri v2(2024 年 10 月 2 日に安定版リリース)では、既存のデスクトップターゲットに加えて iOS と Android のファーストクラスなターゲットが追加された。iOS における Tauri アプリは、システムの WKWebView を埋め込み、フロントエンドアセットを読み込む薄い Swift シェルである。Rust バックエンドは静的ライブラリとしてコンパイルされ、FFI 経由で Swift から呼び出される。フロントエンドから見ると、@tauri-apps/api 経由で Rust へ IPC できる点を除けばブラウザのように感じられる。

実際のところ、すでにデスクトップで動作している Vite + React の Web アプリをモバイル化するときのストーリーは「既存の frontendDist をそのまま Tauri に指さして、iOS アプリとして出荷する」というものになる。

安定性の現状

  • デスクトップ(macOS/Windows/Linux) -- 安定、プロダクション品質

  • iOS と Android -- v2.0.0 で API は安定したが、すべてのデスクトッププラグインがモバイルで使えるわけではない。Tauri チームは「2.0 は『モバイルがファーストクラスシチズンになるリリース』ではない」と明言している。あくまで堅実な土台であり、完成形ではない

  • iOS エコシステム -- dialog、fs、notification、geolocation、haptics などのプラグインは存在する。macOS API に深く食い込むプラグイン(windowing、menubar、dock 系)は当然使えない

Info

動作している Vite + React Web アプリがあり、それを iOS に載せたいだけであれば、Tauri Mobile は有力な選択肢である。ただしネイティブ iOS との深い統合(ウィジェット、App Intents、アプリ内 SwiftUI ビューなど)が必要なら、別のスタックを検討したほうが良い。

なぜ Capacitor や React Native ではなく Tauri なのか

観点Tauri MobileCapacitorReact Native
UI レイヤーシステム WebView(iOS では WKWebView)システム WebView(iOS では WKWebView)JS から橋渡しされるネイティブビュー
バックエンド言語Rust(デスクトップと共通)TypeScript + Swift プラグインJavaScript + Objective-C/Swift ブリッジ
バンドルサイズ(iOS)小(Rust は小さくコンパイルされる、システム WebView 利用)小(システム WebView)中(JS ランタイムとブリッジを同梱)
メモリフットプリント中から高
フロントエンドフレームワーク制約なし(好きな Vite/webpack セットアップ)なしReact のみ
デスクトップとの親和性高い(Rust バックエンドを共用)弱い(Electron 系は別口)弱い(React Native for Windows/macOS の状況は様々)
ネイティブ API の到達度成長中、Rust プラグインのみ広大なプラグインエコシステム、追加も容易三者で最大のネイティブエコシステム
iOS 上での成熟度安定版から 1 年超長期間長期間

率直にまとめるとこうなる。

  • Tauri を選ぶ -- すでに Tauri デスクトップアプリがあり、デスクトップとモバイルで一貫したコードベースを維持したい場合

  • Capacitor を選ぶ -- Web ファースト・モバイルファーストのアプリで、多くのネイティブプラグインが必要、デスクトップは「あれば良い」程度の場合

  • React Native を選ぶ -- モバイルでリッチなネイティブ UI パフォーマンスが必要で、Web 版を書き直す覚悟がある場合

このカテゴリでカバーする内容

これらのノートは、既存の Vite + React Web アプリをラップする視点から iOS にフォーカスしている。

  • iOS 前提条件 -- Xcode、Rust iOS ターゲット、CocoaPods、Apple ID、Developer Mode

  • iOS プロジェクト構成 -- cargo tauri ios init が生成するもの、gen/apple/ ディレクトリ、Info.ios.plistbundle.iOS 設定フィールド

  • iOS 開発ループ -- シミュレーター、実機、TAURI_DEV_HOST、Vite 設定、ATS、Safari Web Inspector

  • 無料 Personal Team での署名 -- 7 日プロビジョニングプロファイル、使えない capabilities、有料プログラムへのアップグレードパス

  • iOS の WKWebView ハマりどころ -- safe-area-inset、キーボード、スクロール、Service Worker、Cookie

  • App Store Review 4.2 -- WebView ラッパーアプリがリジェクトされる理由と、通すために必要なネイティブ面

  • iOS での input フォーカス時のオートズーム -- WKWebView が 16px 未満の input にフォーカス時ズームする理由と、ピンチズームを潰さずに防ぐ方法

  • iOS ネイティブプラグイン -- ガード付き動的 import() を使って tauri-plugin-hapticstauri-plugin-notification を読み込み、Web・デスクトップ・iOS で同一フロントエンドバンドルをクラッシュなく動作させる方法

公式ドキュメント

Revision History

Takeshi Takatsudo作成: 2026-04-17T08:50:05+09:00更新: 2026-05-29T05:36:12+09:00