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
Fork3.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
WindowsMicrosoft Edge WebView2 (Chromium ベース)
macOS / iOSWKWebView (Safari ベース)
Linuxwebkit2gtk (WebKit ベース)
AndroidAndroid 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 比較

項目ElectronTauri 2
Hello-world サイズ~85 MB~600 KB – 6 MB
実運用アプリサイズ150–300 MB10–30 MB
アイドル時メモリ150–400 MB40–90 MB
バックエンド言語JavaScript (Node.js)Rust
WebView エンジンChromium 同梱OS ネイティブ
WebView 一貫性高い (同一 Chromium)中 (OS ごとの差異あり)
モバイル対応なしiOS + Android (v2)
セキュリティモデルcontextIsolation + sandboxCapability-based
自動更新electron-updater内蔵 (Squirrel / MSIX)
学習曲線低い (JS のみ)中 (Rust 習得が必要)
GitHub Stars⭐121K⭐107K
ライセンスMITApache-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_callbackWebView API にコールバック付き JS 評価を追加
Web コンテンツプロセス終了ハンドラmacOS/iOS で WebView プロセス終了を検出
Event::Suspended / Resumedモバイルでのサスペンド・レジュームイベント伝搬
DBus テーマ検出Linux で DBus 経由のテーマ検出 (デフォルト有効)

v2.11.1 (2026年5月6日)

パッチリリース。セキュリティ監査と依存関係の更新。

エコシステムバージョン一覧 (2026年5月)

パッケージバージョン
tauriv2.11.1
@tauri-apps/apiv2.11.0
tauri-cli (Rust)v2.11.1
@tauri-apps/cli (JS)v2.11.1
tauri-bundlerv2.9.1
wryv0.55.1
taov0.35.2

セキュリティモデル: Capability-based Security

Tauri v2 の最大のアーキテクチャ変更は、Allowlist → Capability-based Security への移行です。

3 層構造

要素説明
PermissionsTauri コマンドの ON/OFF トグル。JSON で宣言的に定義
Scopesコマンド引数のバリデーター。グロブパターン、URL 許可リスト等
CapabilitiesPermission + 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ネイティブファイル選択ダイアログ
notificationOS 通知
httpHTTP クライアント (Rust reqwest ベース)
clipboard-managerクリップボード操作
global-shortcutグローバルショートカット登録
storeKey-Value ストア
stronghold暗号化ストア (IOTA Stronghold)
autostart自動起動設定
biometric生体認証
deep-linkディープリンク
logログ出力
sqlSQL データベース (SQLite)
updaterアプリ自動更新
websocketWebSocket クライアント
window-stateウィンドウ位置・サイズ保存復元
osOS 情報取得
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

テンプレート対応フロントエンド:

ReactVueSvelteSolidPreactAngular

主要採用アプリ

macOS デスクトップアプリ市場では 2.6% (63/2440 apps) のシェアを獲得しています。主な採用例:

アプリ説明
OOMOL Studioデスクトップ開発ツール
Polypaneレスポンシブデザインブラウザ
Jitsi Meet (Electron → Tauri 検討中)ビデオ会議
各種スタートアップ製品軽量性・セキュリティを評価して採用増加中

ビルド成果物とバイナリサイズ

プラットフォームパッケージ形式サイズ目安
macOS.dmg / .app3–30 MB
Windows.msi / .exe (NSIS)5–30 MB
Linux.deb / .AppImage / .rpm5–30 MB
iOS.ipa3–20 MB
Android.apk / .aab5–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
GitHubgithub.com/tauri-apps/tauri
リリース一覧v2.tauri.app/release
ドキュメントv2.tauri.app/learn
WRYgithub.com/tauri-apps/wry
TAOgithub.com/tauri-apps/tao