Tauri と Electron の比較 - パフォーマンス、バンドルサイズ、そして実際のトレードオフ
(gethopp.app)- リモート・ペアプログラミング向けの超低遅延リモートコントロールアプリを開発する中で、アプリフレームワークとして Tauriを採用
- 選定理由は、パフォーマンス、メモリ効率、サイドカー対応など
- Rustベースのバックエンド + システムWebViewの利用により、Electronと比べて アプリサイズとメモリ使用量が大幅に小さい
- Tauri v2では機能差も急速に埋まりつつあり、自動アップデート、サイドカーなどの主要機能が組み込まれている
- Electronも依然として強力だが、Hoppの特殊な要件にはTauriのほうが適している
HoppがTauriを選んだ理由
背景: クロスプラットフォームアプリフレームワークの選定
- Hoppには、Windows、macOS、Linuxで同じように動作する 高性能デスクトップアプリ が必要
- ElectronとTauriは代表的な選択肢であり、それぞれに明確な長所と短所がある
- Hoppチームは、長期的な保守性とパフォーマンスを重視して選定した
Tauri vs. Electron: 構造的な違い
-
Electronの構造
- Node.jsランタイムを同梱する必要がある → アプリ容量が増える
- 各ウィンドウは 個別のレンダラープロセス(Chromiumエンジン) を使用 → メモリ消費が大きい
- システムとの深い統合には別プロセスが必要
-
Tauriの構造概要
- バックエンドは Rustベースのネイティブバイナリ → 別途ランタイム不要
- システムWebView を使用(Windows: WebView2、macOS: WKWebView、Linux: WebKitGTK)
- ウィンドウ数が増えてもメモリ効率が良い一方、ブラウザエンジンの不一致問題 への対応は必要
主要機能の比較
- 起動時間 はTauriもElectronも速い部類で、体感上の大きな差はない
- メモリ使用量 ではTauriのほうが大幅に少ない
- Tauriは約172MBのメモリを使用したのに対し
- Electronは約409MBで、ほぼ 2倍以上のメモリを消費 した
- レンダリングエンジン の観点では
- Tauriは OSに組み込まれたWebView を使うため、アプリサイズが小さく軽量
- Electronは Chromiumエンジンをアプリに直接同梱 するため、より多くのリソースを使う
- バックエンド言語 は
- Tauriは Rust を使うことで高性能なネイティブコードを記述できる
- Electronは JavaScript(Node.js) ベースでWeb開発者には親しみやすいが、性能は相対的に低い
- 初回ビルド時間 は
- TauriはRustのコンパイルを含むため 初回ビルドが遅い
- ElectronはJSベースなので 初回ビルドが速い
- アプリ容量 の比較では
- Tauriは約 8.6MiB と非常に軽く
- Electronは約 244MiB で、約28倍大きい
HoppがTauriを選んだ決定的な理由
-
1. 高性能なRustバックエンド
- WebRTCベースの超低遅延映像ストリーミング の実装が必要
- Electronでは別プロセスを立ち上げる必要があるが、TauriではRustバックエンドに直接実装できる
-
2. サイドカー(Sidecar)プロセス対応
- ストリーミングと入力処理を 別バイナリに分離 して管理
- Tauriはサイドカーを公式サポート → ライフサイクルと通信の管理が容易
- 将来的にはカーソルレンダリングのために Tauri eguiへの拡張も検討中
-
3. 急速に進化する機能対応
- Tauri v2は自動アップデートなどの主要機能を内蔵
- Electronよりは比較的新しいが、セキュリティとパフォーマンスを重視するビジョン がHoppと合致した
結論: どのフレームワークが優れているのか?
- ElectronもTauriも優れたデスクトップアプリフレームワーク である
- プロジェクトの性質によって選択は変わりうる
- Electron: 高速な開発、JSフレンドリー、広いエコシステム
- Tauri: より小さく、軽く、速く、Rustベースのパフォーマンスに最適化
- Hoppは、パフォーマンス重視の技術スタックと別プロセス構成の必要性 からTauriを採用した
6件のコメント
私は webui を使っています。容量も小さく、ランタイム依存性もはるかに少ないです。
Wails も一緒に比較されるとよいですね
私は逆に、ほとんどの場合はElectronで十分だ、という受け止め方になりました。
初期のTauriのバックエンド・フロントエンド間通信の体験があまり良くなかった記憶が残っているからでしょうか...
ブラウザーエンジンの違いが大きな問題だと思うが、モバイルを含むサポートを考えると小さくも感じられます
アプリの容量が大きな問題なら、無条件でTauriのほうに行くのが正しいですね
容量、メモリ、サイドカーの面で適切な選択かどうか、一度使ってみる必要がありそうです! ご紹介ありがとうございます。