ElectronとTauri、どちらでデスクトップアプリを作るべきか。
結論から言います。新規開発ならTauri。既存のElectronアプリをわざわざ移行する必要はありません。
私は実際にElectronで開発したアプリをTauriに移行しました。バンドルサイズは150MBから8MBに。Apple審査で1ヶ月半ハマっていた問題が、Tauriでは発生すらしませんでした。
この記事では、2026年時点の最新データを使って両フレームワークを7項目で比較します。判断フローチャートも用意したので、あなたのプロジェクトに合う方がすぐにわかります。
ElectronとTauriの比較表【7項目】
まずは数字で見てください。
| 項目 | Electron | Tauri |
|---|---|---|
| バンドルサイズ | 150〜300MB(Chromium同梱) | 3〜10MB(OS標準WebView) |
| メモリ使用量 | 300〜500MB(アイドル時150MB〜) | 50〜150MB(アイドル時30MB〜) |
| 起動速度 | 2〜5秒 | 0.5〜1.5秒 |
| ビルド時間 | 2〜5分 | 3〜8分(Rustコンパイル含む) |
| 対応OS | Win / Mac / Linux | Win / Mac / Linux / iOS / Android |
| Apple審査 | 通りにくい(コード署名で詰まりやすい) | 通りやすい(ネイティブバイナリ) |
| エコシステム | 成熟(npmパッケージ豊富) | 急拡大中(公式プラグイン60以上) |
バンドルサイズの差が圧倒的です。ElectronはアプリごとにChromiumを丸ごと同梱するため、どうしても100MB超えになります。TauriはOSに標準搭載されているWebView(macOSならWKWebView、WindowsならWebView2)を使うため、アプリ本体のみで済みます。
メモリ使用量も大きく異なります。シンプルなTodoアプリを起動した場合、Electronは150MB程度を消費しますが、Tauriは30MB前後です。ユーザーのマシンリソースを考えると、この差は無視できません。
ただし、ビルド時間はTauriの方が長いです。Rustのコンパイルが入るためです。初回ビルドは特に時間がかかりますが、2回目以降はキャッシュが効くので体感は変わりません。
判断フローチャート:あなたに合うのはどっち?
迷ったら、上から順に答えてください。
Q1. Apple App Storeに出す予定がある?
→ Yes → Tauri を強く推奨(理由:後述「Apple審査の壁」)
→ No → Q2へ
Q2. iOS / Androidにも展開したい?
→ Yes → Tauri(v2でモバイル対応済み)
→ No → Q3へ
Q3. Node.jsのネイティブモジュール(sharp, sqlite3等)を多用する?
→ Yes → Electron(Node.js統合がネイティブ)
→ No → Q4へ
Q4. チーム全員がRust未経験で、学習コストを最小化したい?
→ Yes → Electron(JS/TSだけで完結)
→ No → Tauri
Q5. アプリサイズ・起動速度がユーザー体験に直結する?
→ Yes → Tauri(バンドル3〜10MB、起動1秒以下)
→ No → どちらでもOK。好みで選んで問題なし
私のケースはQ1でYesでした。App
Storeに自分のアプリを並べたいという目標があったので、Tauriへの移行は必然的な選択でした。
Tauri v2の最新状況【2026年】
Tauri
v2は2024年10月に安定版がリリースされ、2026年現在も活発に開発が続いています。v1から大きく進化したポイントを整理します。
モバイル対応(iOS / Android)
Tauri
v2最大の目玉です。1つのコードベースからデスクトップとモバイルの両方に対応できるようになりました。
- iOS: WKWebViewベースで動作。App
Store申請にも対応 - Android: Android WebViewベースで動作。Google
Playへの申請も可能 - 共有コード:
フロントエンド(React、Vue、Svelte等)はデスクトップとモバイルでほぼそのまま共有できる
ただし、モバイル対応はまだ「使える」段階であって「何でもできる」段階ではありません。カメラやGPS等のネイティブ機能はプラグイン経由で対応していますが、React
NativeやFlutterほどの網羅性はまだありません。「Webアプリをモバイルに載せたい」というユースケースにはぴったりです。
プラグインエコシステム
v2ではプラグインシステムが刷新され、公式・コミュニティ合わせて多数のプラグインが利用可能です。
| プラグイン | 機能 |
|---|---|
tauri-plugin-store |
キーバリューストア(永続化) |
tauri-plugin-sql |
SQLite / MySQL / PostgreSQL接続 |
tauri-plugin-fs |
ファイルシステム操作(スコープ付き) |
tauri-plugin-shell |
外部コマンド実行 |
tauri-plugin-updater |
自動アップデート |
tauri-plugin-notification |
OS通知 |
tauri-plugin-clipboard-manager |
クリップボード操作 |
tauri-plugin-deep-link |
ディープリンク |
v1時代は「Electronに比べてプラグインが足りない」と言われていましたが、v2では主要なユースケースはほぼカバーされています。
セキュリティモデル
Tauriのセキュリティ設計は、Electronと根本的に異なります。
Electron: フロントエンドからNode.jsのAPIに直接アクセスできる
→ 便利だが、XSS等があるとシステム全体が危険
Tauri: フロントエンドはWebViewのサンドボックス内に閉じ込められる
→ バックエンド(Rust)経由でのみシステムリソースにアクセス
→ 許可するAPIを tauri.conf.json で明示的に宣言
このモデルのおかげで、Apple審査でもセキュリティ面での指摘を受けにくくなっています。
移行のリアル:ElectronからTauriへ
ここからは実体験です。
私はElectronで作ったデスクトップアプリを、Tauriに移行しました。移行にかかった期間は約1週間です。
Apple審査の壁
最大のきっかけは、ElectronアプリがTestFlightで110回リジェクトされた経験です。
ローカルでは完璧に動くアプリが、TestFlightからインストールすると起動すらしない。原因はElectronのコード署名とノータリゼーションの複雑さでした。設定項目が膨大で、Stack
OverflowやGitHub Issueを1ヶ月半漁っても解決できませんでした。
Tauriに移行したら、この問題は消えました。Tauriはネイティブバイナリを生成するため、Appleのコード署名プロセスがシンプルです。公式ドキュメント通りに進めるだけで、TestFlightからの起動に成功しました。
拍子抜けでした。
フロントエンドはほぼそのまま
UIを構成するReact / Vue /
Svelteのコードは、ほぼ変更不要です。書き換えが必要なのはElectronのIPC通信をTauriのコマンドに置き換える部分だけです。
具体的なコード比較を1つだけ示します。ファイル保存処理の例です。
Electron(メインプロセス + レンダラープロセス):
// main.js(メインプロセス)
const { ipcMain, dialog } = require('electron');
const fs = require('fs');
ipcMain.handle('save-file', async (event, content) => {
const { filePath } = await dialog.showSaveDialog({
filters: [{ name: 'Text', extensions: ['txt'] }]
});
if (filePath) {
fs.writeFileSync(filePath, content);
return filePath;
}
return null;
});
// renderer.js(レンダラープロセス)
const result = await window.electronAPI.saveFile(content);
Tauri(Rustバックエンド + フロントエンド):
// src-tauri/src/lib.rs
use tauri_plugin_dialog::DialogExt;
use std::fs;
#[tauri::command]
async fn save_file(app: tauri::AppHandle, content: String) -> Result<Option<String>, String> {
let file_path = app.dialog()
.file()
.add_filter("Text", &["txt"])
.blocking_save_file();
if let Some(path) = file_path {
fs::write(&path, &content).map_err(|e| e.to_string())?;
Ok(Some(path.to_string()))
} else {
Ok(None)
}
}
// フロントエンド
import { invoke } from '@tauri-apps/api/core';
const result = await invoke<string | null>('save_file', { content });
パターンは似ています。ElectronのIPC (ipcMain.handle /
ipcRenderer.invoke) が、Tauriでは
#[tauri::command] / invoke
に置き換わるだけです。フロントエンド側の変更は最小限で済みます。
Rustを書く必要がありますが、この程度の定型パターンならClaude
CodeのようなAIツールに任せれば、Rust未経験でも問題なく進められます。
数字で見る移行効果
| 指標 | Electron時代 | Tauri移行後 |
|---|---|---|
| バンドルサイズ(.dmg) | 約150MB | 約8MB |
| アイドル時メモリ | 約200MB | 約45MB |
| 起動時間 | 約3秒 | 約0.8秒 |
| TestFlight配布 | 起動せず(1ヶ月半格闘) | 初回で成功 |
| App Store審査 | たどり着けず | 通過(リジェクト→修正→承認) |
バンドルサイズが約150MBから約8MBになったとき、「何か足りないのでは」と疑いました。足りないのではなく、Electronが余分なものを積みすぎていただけです。
よくある質問(FAQ)
TauriでもReactやVue.jsは使える?
はい、使えます。TauriのフロントエンドはWeb技術(HTML/CSS/JavaScript)なので、React、Vue、Svelte、Solid、Angular
など好きなフレームワークを選べます。create-tauri-app
コマンドでプロジェクト作成時にフレームワークを選択できます。
Rustを知らなくてもTauriは使える?
基本的なアプリなら問題ありません。Tauriの公式プラグインを使えば、ファイル操作・HTTP通信・通知など主要な機能はRustを一行も書かずに実装できます。
カスタムコマンド(バックエンド処理)を書く場合はRustが必要ですが、先ほどのコード例のように定型パターンがほとんどです。AI駆動開発との相性もよく、「Rustで〇〇する関数を書いて」と指示すれば生成してくれます。
既存のElectronアプリをTauriに移行すべき?
安定して動いているなら、移行する必要はありません。
移行が意味を持つのは以下のケースです。
- Apple App Store / Microsoft Storeへの申請で問題を抱えている
- バンドルサイズの大きさがユーザーから不評
- モバイル対応が将来的に必要
「Electronだから」という理由だけで移行するのはコストに見合いません。私の場合はApple審査で完全に詰まったから移行しましたが、もしTestFlightが動いていたらElectronのまま開発を続けていたと思います。
Tauri
v2のモバイル対応は実用的?
「Webアプリをそのままモバイルに載せたい」なら実用的です。
ただし、カメラ制御やBluetooth連携のようなネイティブ機能をゴリゴリ使うアプリには向きません。そういったアプリにはReact
NativeやFlutterの方が適しています。
Tauriのモバイル対応が輝くのは、「デスクトップ版と同じUIをスマホでも使いたい」というケースです。管理画面、ダッシュボード、ツール系アプリとの相性が良いです。
Electronはオワコン?
オワコンではありません。VS
Code、Slack、Discord、Notion。2026年現在も主要なアプリがElectronで動いています。
ただし、新規プロジェクトでElectronを第一候補にする理由は減ってきています。
Tauriがバンドルサイズ・メモリ・セキュリティ・モバイル対応のすべてで優位に立っており、エコシステムの差も縮まっています。
Electronは「枯れた技術」として安定運用に向いています。冒険より安定を取るならElectron、新しいプロジェクトで最大限のパフォーマンスを引き出すならTauri。そういう棲み分けになってきています。
まとめ
ElectronとTauriの選択は、プロジェクトの要件で決まります。
- Apple App Storeに出したい → Tauri
- モバイルにも展開したい → Tauri
- バンドルサイズを最小化したい → Tauri
- Node.jsエコシステムに依存している → Electron
- チーム全員がJS/TSのみ → Electron
- 既存アプリが安定稼働中 → 移行不要
私自身は個人開発のリリース構成でTauriを採用し、App
Storeまで到達できました。Electronで1ヶ月半悩んでいた問題が、Tauriでは1週間で解決した体験は、技術選定の重要さを身をもって教えてくれました。
ぶっちゃけ、フレームワーク選びで一番大事なのは「配布先で動くかどうか」です。ローカルで動くのは当たり前。TestFlightやApp
Storeで動くかどうか。そこまで含めて技術選定してください。
この記事が、これからデスクトップアプリ開発に挑戦する方の参考になれば幸いです。

