Perry vs Tauri
Tauri は Rust バックエンドと、OS 組込みの webview(Windows の WebView2、macOS の WKWebView、Linux の WebKitGTK)の中で動作するフロントエンドで、クロスプラットフォームのデスクトップ(および徐々にモバイル)アプリを構築するためのフレームワークです。Tauri アプリは OS の webview をバンドルしないため Electron より劇的に小さくなります。Perry は別の道を選びます――webview はまったくなし、HTML レンダリングもなし、TypeScript を実プラットフォームウィジェットを駆動するネイティブマシンコードへコンパイルするだけです。
Tauri とは?
Tauri は Rust で書かれたオープンソースフレームワークで、Web フロントエンド(React、Vue、Svelte などのフレームワーク)と Rust バックエンドでクロスプラットフォームアプリケーションを構築できます。Chromium をバンドルする代わりに、Tauri は OS 組込みの webview を使用するため、Linux / Windows / macOS でアプリインストーラは 1 桁 MB の範囲に収まります。Tauri 2 ではモバイル(iOS と Android)対応が追加されました。フロントエンドはシステムの webview によって HTML / CSS / JS としてレンダリングされ、Rust バックエンドとの通信は IPC ブリッジ経由で行われます。
Perry とは?
Perry は LLVM 経由で TypeScript を直接ネイティブマシンコードへコンパイルします。UI レイヤ(perry/ui)は宣言的 SwiftUI スタイルの API で、webview がレンダリングする HTML ではなく、ネイティブプラットフォームウィジェットにマップされます。Perry で書かれたアプリは JavaScript エンジンを持ち運ばず、WebKit / WebView2 の中で動作せず、UI とロジックの間に IPC ブリッジを必要としません。Perry はモバイル、ウォッチ、TV を含む 10 のプラットフォームをターゲットにしています。
並べて比較
| 機能 | Perry | Tauri |
|---|---|---|
| UI レンダリング | ネイティブプラットフォームウィジェット(AppKit、UIKit、GTK4、Win32、JNI) | システム webview(WKWebView、WebView2、WebKitGTK)――HTML / CSS / JS |
| フロントエンド言語 | TypeScript(宣言的ウィジェット API) | 任意の Web フレームワーク(React、Vue など)経由の HTML / CSS / JS |
| バックエンド言語 | TypeScript | Rust |
| UI とロジックの間の IPC | なし――単一プロセス、直接呼出し | 必要(UI は webview、ロジックは Rust プロセス) |
| hello-world インストーラ | ~330 KB | ~3–10 MB(webview は OS 提供) |
| モバイル(iOS、Android) | あり――ネイティブ UI | あり――webview ベース(Tauri 2) |
| ウォッチ / TV | watchOS、tvOS、Wear OS | なし |
| WebAssembly ターゲット | あり(DOM ブリッジ経由の perry/ui) | 該当なし(Tauri 自体がネイティブに webview を使用) |
| 成熟度 | 1.0 未満 | 安定版(1.x / 2.x) |
Perry が優れている点
- +本当にネイティブな UI――Perry は HTML をレンダリングしません。実プラットフォームウィジェットを駆動するため、アプリはネイティブのスクロール物理、フォーカス、アクセシビリティ、IME、OS テーマを自動で継承します。
- +より小さい hello-world(~330 KB 対 Tauri の 1 桁 MB)、ランタイムでシステム webview への依存もありません。
- +単一言語、単一プロセス。アプリ全体――UI とロジック――が TypeScript で、設計やデバッグが必要な IPC ブリッジはありません。
- +watchOS、tvOS、Wear OS、そしてバンドルされた webview ではなく実ネイティブコンパイルパイプラインを伴うフル Web/JS ターゲット。
- +プラットフォーム間で webview の挙動差がありません。Tauri は WKWebView 対 WebView2 対 WebKitGTK のクセを継承しますが、Perry は各 OS でネイティブウィジェットの道を選びます。
- +計算性能は AOT-native であり、webview-JIT ではありません。Perry は M1 Max 上で条件を揃えた計算系マイクロベンチでリードしています(perry/benchmarks)。
Tauri が優れている点
- +活発な 2.x ラインと大きなコミュニティを擁する成熟した安定フレームワーク。
- +フロントエンドの柔軟性――すでに知っている任意の Web フレームワーク(React、Vue、Svelte、Solid など)を使えます。
- +Tauri は Chromium をバンドルせず OS 提供の webview に乗るため、Electron より小さなインストーラ。
- +システムレベルの作業(ファイルシステム、ネイティブ API)があり、そこで型付きコンパイル時保証が欲しい場合、Rust バックエンドは理想的です。
- +webview レンダリングなので CSS / HTML のイテレーション速度と devtools が Web 開発と同様に動作します。
- +確立されたパッケージング、コード署名、アップデータパイプライン。
Perry を選ぶべきとき
本当にネイティブな UI(webview 内でレンダリングされる HTML ではなく)が欲しいとき、webview 依存なしの小さなネイティブバイナリが欲しいとき、デスクトップ + モバイル + ウォッチ + TV にまたがるひとつの TypeScript コードベースが欲しいとき、またはコンパイル時に検証されるクロスプラットフォームウィジェットコードが欲しいときは Perry を選んでください。
Tauri を選ぶべきとき
既存または計画中の Web フロントエンドがあるとき、Rust バックエンドのインストーラの小さなデスクトップアプリが欲しいとき、UI に HTML / CSS で満足しているとき、または Web フレームワークとツールの広いエコシステムが欲しいときは Tauri を選んでください。
結論
Tauri は Electron のはるかに優れた版です――同じ Web 技術アプローチで、OS の webview をバンドルしないためインストーラが劇的に小さくなります。しかしそれでも依然として webview ベースのアーキテクチャであり、HTML / CSS / JS レンダリングと IPC ブリッジを伴います。Perry は別の立場を取ります:webview はまったくなし、ネイティブプラットフォームウィジェット、単一プロセス。Web スタックのまま Electron より小さなバイナリにしたいなら、Tauri が正解です。Web スタックを後にして TypeScript でネイティブウィジェットに進みたいなら、Perry です。