mcpField
T
tauri-desktop

tauri-desktop

github.com/travisjneuman開発106186 回インストール1 日前に更新
リポジトリ

tauri-desktop について

tauri-desktopは、RustバックエンドとWebフロントエンドを組み合わせ、Tauri 2.0でデスクトップ・モバイルアプリを作るためのスキルです。プロジェクト構成、IPC、権限、プラグイン、更新、配布を扱います。

主な機能

  1. 01RustバックエンドとWebフロントエンドの構成
  2. 02フロントエンドからRustを呼び出すIPC
  3. 03ケイパビリティベースの権限設定
  4. 04Tauri 2.0プラグインの設定
  5. 05アップデーター設定とビルド

活用シーン

  1. 01Tauriデスクトップ・モバイルアプリの構築
  2. 02許可されたAPIのみにフロントエンドアクセスを制限
  3. 03フロントエンドとRustコマンドの接続
  4. 04アプリ更新と配布の設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/travisjneuman/.claude --skill tauri-desktop

インストール後、Claude Code で/tauri-desktopを入力して読み込まれたか確認します。

詳細

Tauri デスクトップスキル

Tauri 2.0 を使って、軽量でセキュアなデスクトップ(およびモバイル)アプリを構築します。Rust バックエンドと Web フロントエンドを使用します。


Tauri を選ぶ理由

特徴TauriElectron
バンドルサイズ2-10 MB80-150 MB
メモリ使用量30-80 MB100-300 MB
バックエンド言語RustNode.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 の柔軟性。

コメント