比較一覧に戻る
クロスプラットフォーム UI

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 のプラットフォームをターゲットにしています。

並べて比較

機能PerryTauri
UI レンダリングネイティブプラットフォームウィジェット(AppKit、UIKit、GTK4、Win32、JNI)システム webview(WKWebView、WebView2、WebKitGTK)――HTML / CSS / JS
フロントエンド言語TypeScript(宣言的ウィジェット API)任意の Web フレームワーク(React、Vue など)経由の HTML / CSS / JS
バックエンド言語TypeScriptRust
UI とロジックの間の IPCなし――単一プロセス、直接呼出し必要(UI は webview、ロジックは Rust プロセス)
hello-world インストーラ~330 KB~3–10 MB(webview は OS 提供)
モバイル(iOS、Android)あり――ネイティブ UIあり――webview ベース(Tauri 2)
ウォッチ / TVwatchOS、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 です。

Perry を試す

今日から TypeScript をネイティブにコンパイルしましょう。

はじめる