Tauri 完全ガイド — 2026年版 アーキテクチャ・最新情報・エコシステム
はじめに
Tauri は、Rust をバックエンドに OS ネイティブの WebView をフロントエンドとして使用するクロスプラットフォームアプリケーションフレームワークです。Electron のように Chromium 全体をバンドルせず、OS 標準の WebView を利用するため、バイナリサイズが極めて小さくなります。
| 項目 | 内容 |
|---|---|
| 開発元 | Tauri Contributors (Open Collective) |
| 初版 | 2022年6月 (v1.0) / 2024年10月 (v2.0) |
| 最新安定版 | v2.11.1 (2026年5月6日) |
| GitHub Stars | ⭐107K |
| Fork | 3.3K |
| macOS シェア | 2.6% (63/2440 apps) |
| 最小バイナリサイズ | 約 600KB |
| ライセンス | Apache-2.0 OR MIT |
| 公式サイト | v2.tauri.app |
アーキテクチャ
Tauri の最大の特徴は Core Process (Rust) + WebView Process (OS ネイティブ) の 2 層構造です。
┌──────────────────────────────────────────┐
│ Core Process (Rust) │
│ ─────────────────────── │
│ ・アプリケーションエントリポイント │
│ ・IPC ルーティング / フィルタリング │
│ ・グローバル状態管理 (DB, 設定など) │
│ ・ネイティブAPI (ファイルシステム, etc.) │
│ ・プラグインホスト │
└─────────────┬────────────────────────────┘
│ IPC (カスタムプロトコル)
▼
┌──────────────────────────────────────────┐
│ WebView Process (OS ネイティブ) │
│ ─────────────────────── │
│ ・HTML / CSS / JS をレンダリング │
│ ・任意のフロントエンドフレームワーク │
│ (React, Vue, Svelte, Solid など) │
│ ・OS 標準 WebView を動的リンク │
└──────────────────────────────────────────┘
Core Process
- Rust で実装されたアプリケーションの中核
- メモリ安全かつゼロコスト抽象化を提供
- IPC を一元管理し、すべてのメッセージを中央で傍受・フィルタリング可能
- グローバル状態 (データベース接続、設定等) を保持し、複数ウィンドウ間で共有
WebView Process
各プラットフォームで OS 標準の WebView を使用します:
| プラットフォーム | WebView |
|---|---|
| Windows | Microsoft Edge WebView2 (Chromium ベース) |
| macOS / iOS | WKWebView (Safari ベース) |
| Linux | webkit2gtk (WebKit ベース) |
| Android | Android System WebView |
重要: これらの WebView は実行ファイルにバンドルされず、実行時に OS から動的リンクされます。これが Tauri のバイナリサイズが小さい根本的な理由です。
コアクレート構成
tauri (メインクレート)
├── tauri-runtime → 低レベル WebView ライブラリとの接着層
├── tauri-runtime-wry → WRY 固有の実装 (印刷, モニター検出等)
├── tauri-build → ビルド時アセット処理 (アイコン埋め込み, config 解析)
├── tauri-codegen → コード生成
├── tauri-macros → マクロ (例: #[tauri::command])
├── tauri-utils → ユーティリティ
├── tauri-cli → CLI ツール (cargo tauri dev/build)
└── tauri-bundler → パッケージング (.dmg, .msi, .AppImage 等)
外部クレート:
├── WRY → クロスプラットフォーム WebView レンダリング抽象化
└── TAO → クロスプラットフォームウィンドウ作成 (winit の fork)
Tauri vs Electron 比較
| 項目 | Electron | Tauri 2 |
|---|---|---|
| Hello-world サイズ | ~85 MB | ~600 KB – 6 MB |
| 実運用アプリサイズ | 150–300 MB | 10–30 MB |
| アイドル時メモリ | 150–400 MB | 40–90 MB |
| バックエンド言語 | JavaScript (Node.js) | Rust |
| WebView エンジン | Chromium 同梱 | OS ネイティブ |
| WebView 一貫性 | 高い (同一 Chromium) | 中 (OS ごとの差異あり) |
| モバイル対応 | なし | iOS + Android (v2) |
| セキュリティモデル | contextIsolation + sandbox | Capability-based |
| 自動更新 | electron-updater | 内蔵 (Squirrel / MSIX) |
| 学習曲線 | 低い (JS のみ) | 中 (Rust 習得が必要) |
| GitHub Stars | ⭐121K | ⭐107K |
| ライセンス | MIT | Apache-2.0 OR MIT |
Tauri の強み:
- 桁違いに小さいバイナリサイズ (600KB から)
- 低メモリ消費 (Electron の約 1/4)
- Rust のメモリ安全性とパフォーマンス
- Capability-based セキュリティ
- 5 プラットフォーム同時対応 (Desktop + Mobile)
- オートアップデーター内蔵
Tauri の課題:
- Rust の学習コスト (バックエンド)
- WebView のプラットフォーム間差異 (CSS の微妙な違い等)
- Electron 比でエコシステム・コミュニティプラグインは小さい
- コンパイル時間 (Rust のビルド)
v2.11 シリーズ (2026年4月〜5月)
2026年5月6日リリースの Tauri v2.11.1 が最新安定版です。
v2.11.0 新機能 (2026年4月30日)
| 機能 | 説明 |
|---|---|
| ファイルアソシエーション (Android/iOS) | Android と iOS でファイル拡張子とアプリの関連付けを実装 |
| マルチウィンドウ (Android/iOS) | Android (Activity Embedding) / iOS (Scenes) で複数ウィンドウ作成対応 |
| Bring All to Front (macOS) | メニュー項目タイプに “Bring All to Front” を追加 (macOS 標準動作) |
rename attribute for commands | #[tauri::command(rename = "newName")] で関数名≠コマンド名に |
data-tauri-drag-region="deep" | 子要素のクリックもドラッグとして扱う deep drag region |
| Autofill 制御 | WebView オプションでブラウザの自動補完 UI を無効化可能 (Windows) |
eval_with_callback | WebView API にコールバック付き JS 評価を追加 |
| Web コンテンツプロセス終了ハンドラ | macOS/iOS で WebView プロセス終了を検出 |
Event::Suspended / Resumed | モバイルでのサスペンド・レジュームイベント伝搬 |
| DBus テーマ検出 | Linux で DBus 経由のテーマ検出 (デフォルト有効) |
v2.11.1 (2026年5月6日)
パッチリリース。セキュリティ監査と依存関係の更新。
エコシステムバージョン一覧 (2026年5月)
| パッケージ | バージョン |
|---|---|
| tauri | v2.11.1 |
| @tauri-apps/api | v2.11.0 |
| tauri-cli (Rust) | v2.11.1 |
| @tauri-apps/cli (JS) | v2.11.1 |
| tauri-bundler | v2.9.1 |
| wry | v0.55.1 |
| tao | v0.35.2 |
セキュリティモデル: Capability-based Security
Tauri v2 の最大のアーキテクチャ変更は、Allowlist → Capability-based Security への移行です。
3 層構造
| 要素 | 説明 |
|---|---|
| Permissions | Tauri コマンドの ON/OFF トグル。JSON で宣言的に定義 |
| Scopes | コマンド引数のバリデーター。グロブパターン、URL 許可リスト等 |
| Capabilities | Permission + Scope を特定の Window/WebView にアタッチ |
{
"identifier": "default",
"description": "Default capability",
"windows": ["main"],
"permissions": [
"core:default",
"shell:allow-open",
{
"identifier": "fs:allow-read",
"allow": [{ "path": "$HOME/**" }]
}
]
}
設定ウィンドウには filesystem write 権限を与え、ヘルプウィンドウには与えない、といった粒度の制御が同一 JS バンドルでも可能です。
IPC (Inter-Process Communication)
Tauri v2 の IPC は v1 から大幅に改善されました。
Command System
// Rust 側
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error");
}
// JS 側 (フロントエンド)
import { invoke } from '@tauri-apps/api/core'
const greeting = await invoke('greet', { name: 'World' })
console.log(greeting) // "Hello, World!"
Raw Request Payloads (v2)
v1 では全メッセージが JSON シリアライズ必須でしたが、v2 ではカスタムプロトコルを使用し、生バイト列を直接転送可能になりました。
v1: 50MB の画像送信 → JSON エンコード → 転送 → JSON デコード
v2: 50MB の画像送信 → 生バイト転送 (BSON, Protobuf, Avro 等)
画像エディタや動画ツールなど、データ量の多いアプリで顕著な性能差が出ます。
Event System
双方向イベント通信も可能です。
// Rust → JS
app_handle.emit("event-name", payload)?;
// Rust でリスナー
webview.listen("event-name", |event| {
let data = event.data;
});
// JS → Rust (イベント)
import { listen } from '@tauri-apps/api/event'
const unlisten = await listen('event-name', (event) => {
console.log(event.payload)
})
Channels (高スループット)
大量データのストリーミングには Channels を使用:
let (tx, rx) = tauri::ipc::channel::<Vec<u8>>();
tx.send(chunk_data)?;
// ダウンロード進捗、子プロセス出力、WebSocket メッセージ等に最適
プラグインエコシステム
v2 ではほとんどのコア機能がプラグインとして分離されました。各プラグインは独立したバージョン管理と監査が可能です。
公式プラグイン一覧
| プラグイン | 機能 |
|---|---|
fs | ファイルシステム操作 |
shell | シェルコマンド実行 |
dialog | ネイティブファイル選択ダイアログ |
notification | OS 通知 |
http | HTTP クライアント (Rust reqwest ベース) |
clipboard-manager | クリップボード操作 |
global-shortcut | グローバルショートカット登録 |
store | Key-Value ストア |
stronghold | 暗号化ストア (IOTA Stronghold) |
autostart | 自動起動設定 |
biometric | 生体認証 |
deep-link | ディープリンク |
log | ログ出力 |
sql | SQL データベース (SQLite) |
updater | アプリ自動更新 |
websocket | WebSocket クライアント |
window-state | ウィンドウ位置・サイズ保存復元 |
os | OS 情報取得 |
process | プロセス管理 |
positioner | ウィンドウ位置調整 |
カスタムプラグイン
Swift (iOS) / Kotlin (Android) のネイティブコードもプラグインから呼び出せます。
// Rust プラグイン + iOS Swift / Android Kotlin 連携
#[tauri::plugin]
fn my_plugin() -> TauriPlugin {
Builder::new("my-plugin")
.invoke_handler(tauri::generate_handler![my_command])
.build()
}
モバイルサポート
Tauri v2 の最大の目玉のひとつが iOS / Android 対応 です。単一のコードベースで 5 プラットフォーム (Windows / macOS / Linux / iOS / Android) をターゲットにできます。
# Android プレビュー
cargo tauri android dev
# iOS プレビュー (macOS のみ)
cargo tauri ios dev
# HMR (Hot Module Replacement) がエミュレータ/実機で動作
モバイルでは Swift (iOS) と Kotlin (Android) のネイティブコードをプラグイン経由で記述可能です。
プロジェクト作成
# create-tauri-app でスキャフォールディング
sh <(curl https://create.tauri.app/sh)
# または npm 経由
npm create tauri-app@latest
テンプレート対応フロントエンド:
| React | Vue | Svelte | Solid | Preact | Angular |
|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
主要採用アプリ
macOS デスクトップアプリ市場では 2.6% (63/2440 apps) のシェアを獲得しています。主な採用例:
| アプリ | 説明 |
|---|---|
| OOMOL Studio | デスクトップ開発ツール |
| Polypane | レスポンシブデザインブラウザ |
| Jitsi Meet (Electron → Tauri 検討中) | ビデオ会議 |
| 各種スタートアップ製品 | 軽量性・セキュリティを評価して採用増加中 |
ビルド成果物とバイナリサイズ
| プラットフォーム | パッケージ形式 | サイズ目安 |
|---|---|---|
| macOS | .dmg / .app | 3–30 MB |
| Windows | .msi / .exe (NSIS) | 5–30 MB |
| Linux | .deb / .AppImage / .rpm | 5–30 MB |
| iOS | .ipa | 3–20 MB |
| Android | .apk / .aab | 5–25 MB |
最小構成の Hello World: 約 600KB 〜 6MB (Electron の 1/10 以下)。
まとめ
Tauri は 2024年10月の v2.0 安定版リリース以降、急速にエコシステムを拡大しています。Electron と比較して:
- サイズ: 1/10 以下
- メモリ: 1/3 〜 1/4
- セキュリティ: Capability-based でより細粒度
- プラットフォーム: デスクトップ + モバイルの 5 つ
GitHub ⭐107K、npm ダウンロード数は前年比で大きく成長しており、2026年現在「Electron の軽量代替」から「本格的なクロスプラットフォームフレームワーク」へと進化を遂げています。
Rust の学習曲線はあるものの、パフォーマンス・セキュリティ・バイナリサイズを重視するプロジェクトでは最有力の選択肢になりつつあります。
参考リンク
| リソース | URL |
|---|---|
| 公式サイト (v2) | v2.tauri.app |
| GitHub | github.com/tauri-apps/tauri |
| リリース一覧 | v2.tauri.app/release |
| ドキュメント | v2.tauri.app/learn |
| WRY | github.com/tauri-apps/wry |
| TAO | github.com/tauri-apps/tao |