tauri-desktop について
tauri-desktopは、RustバックエンドとWebフロントエンドを組み合わせ、Tauri 2.0でデスクトップ・モバイルアプリを作るためのスキルです。プロジェクト構成、IPC、権限、プラグイン、更新、配布を扱います。
主な機能
- 01RustバックエンドとWebフロントエンドの構成
- 02フロントエンドからRustを呼び出すIPC
- 03ケイパビリティベースの権限設定
- 04Tauri 2.0プラグインの設定
- 05アップデーター設定とビルド
活用シーン
- 01Tauriデスクトップ・モバイルアプリの構築
- 02許可されたAPIのみにフロントエンドアクセスを制限
- 03フロントエンドとRustコマンドの接続
- 04アプリ更新と配布の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ travisjneuman/ .claude --skill tauri-desktopインストール後、Claude Code で/tauri-desktopを入力して読み込まれたか確認します。
詳細
Tauri デスクトップスキル
Tauri 2.0 を使って、軽量でセキュアなデスクトップ(およびモバイル)アプリを構築します。Rust バックエンドと Web フロントエンドを使用します。
Tauri を選ぶ理由
| 特徴 | Tauri | Electron |
|---|---|---|
| バンドルサイズ | 2-10 MB | 80-150 MB |
| メモリ使用量 | 30-80 MB | 100-300 MB |
| バックエンド言語 | Rust | Node.js |
| セキュリティモデル | ケイパビリティベースの権限 | Node.js へのフルアクセス |
| モバイルサポート | あり(Tauri 2.0) | なし |
| 自動アップデーター | 組み込み | electron-updater |
プロジェクト構成
project/
├── src/ # Frontend (any web framework)
│ ├── main.ts
│ ├── App.tsx # React/Vue/Svelte/vanilla
│ └── styles.css
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs # Entry point
│ │ ├── lib.rs # Commands and setup
│ │ └── commands/ # IPC command modules
│ │ ├── mod.rs
│ │ └── files.rs
│ ├── capabilities/ # Security permissions
│ │ └── default.json
│ ├── icons/ # App icons
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── package.json
├── vite.config.ts # Frontend bundler
└── tsconfig.json
IPC コマンド
Rust 側(バックエンド)
// src-tauri/src/lib.rs
use tauri::Manager;
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}! From Rust.", name)
}
#[tauri::command]
async fn read_file(path: String) -> Result<String, String> {
std::fs::read_to_string(&path).map_err(|e| e.to_string())
}
#[tauri::command]
async fn save_settings(
app: tauri::AppHandle,
settings: serde_json::Value,
) -> Result<(), String> {
let path = app.path().app_config_dir().map_err(|e| e.to_string())?;
std::fs::create_dir_all(&path).map_err(|e| e.to_string())?;
let file = path.join("settings.json");
std::fs::write(file, settings.to_string()).map_err(|e| e.to_string())
}
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet, read_file, save_settings])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
フロントエンド側(TypeScript)
import { invoke } from '@tauri-apps/api/core';
// Call Rust commands from frontend
const greeting = await invoke<string>('greet', { name: 'World' });
const content = await invoke<string>('read_file', { path: '/tmp/test.txt' });
await invoke('save_settings', {
settings: { theme: 'dark', fontSize: 14 },
});
セキュリティモデル(ケイパビリティ)
// src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "Default app permissions",
"windows": ["main"],
"permissions": [
"core:default",
"dialog:default",
"fs:default",
{
"identifier": "fs:allow-read-text-file",
"allow": [{ "path": "$APPDATA/**" }]
},
{
"identifier": "fs:allow-write-text-file",
"allow": [{ "path": "$APPDATA/**" }]
}
]
}
主なセキュリティ原則:
- デフォルトで許可リスト方式:フロントエンドからアクセスできるのは、明示的に許可された API のみです
- スコープを限定したファイルシステムアクセス:特定のディレクトリに制限します
- 任意のシェルアクセスは禁止:コマンドは Rust で事前に定義する必要があります
- CSP を適用:Content Security Policy ヘッダーが自動的に設定されます
プラグイン(Tauri 2.0)
# src-tauri/Cargo.toml
[dependencies]
tauri = { version = "2", features = [] }
tauri-plugin-dialog = "2"
tauri-plugin-fs = "2"
tauri-plugin-shell = "2"
tauri-plugin-store = "2"
tauri-plugin-updater = "2"
tauri-plugin-notification = "2"
// Register plugins
tauri::Builder::default()
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_fs::init())
.plugin(tauri_plugin_store::Builder::new().build())
.plugin(tauri_plugin_updater::Builder::new().build())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
自動アップデーター
// src-tauri/tauri.conf.json (excerpt)
{
"plugins": {
"updater": {
"pubkey": "YOUR_PUBLIC_KEY",
"endpoints": [
"https://releases.example.com/{{target}}/{{arch}}/{{current_version}}"
]
}
}
}
// Frontend update check
import { check } from '@tauri-apps/plugin-updater';
const update = await check();
if (update) {
await update.downloadAndInstall();
await relaunch();
}
ビルドと配布
# Development
npm run tauri dev
# Build for current platform
npm run tauri build
# Build for specific target
npm run tauri build --target x86_64-pc-windows-msvc
npm run tauri build --target aarch64-apple-darwin
npm run tauri build --target x86_64-unknown-linux-gnu
# Mobile (Tauri 2.0)
npm run tauri android dev
npm run tauri ios dev
配布形式
| プラットフォーム | 形式 |
|---|---|
| macOS | .dmg、.app |
| Windows | .msi、.exe(NSIS) |
| Linux | .deb、.rpm、.AppImage |
| Android | .apk、.aab |
| iOS | .ipa |
開発のヒント
window.__TAURI__を使って、フロントエンドで Tauri 環境かどうかを検出します- 状態管理:Rust 側の状態には Tauri の
Stateを、UI の状態にはフロントエンドのストアを使用します - ファイルダイアログ:ブラウザーのファイル入力の代わりに
@tauri-apps/plugin-dialogを使用します - システムトレイ:メニュー項目とともに
tauri.conf.jsonで設定します - マルチウィンドウ:Rust から
WebviewWindow::new()を、または JS からWebviewWindow.create()を使って作成します
関連リソース
agent-rust-expertスキル — Rust 言語のパターンagent-desktop-developerスキル — デスクトップ開発のスペシャリスト~/.claude/docs/reference/stacks/rust.md— Rust スタックガイド
小さなバイナリ。強固なセキュリティ。ネイティブのパフォーマンス。Web の柔軟性。
コメント
Markdown 対応