rust-desktop-applications について
Rust デスクトップアプリ開発向けのスキルで、フレームワーク選定から設計、プラットフォーム連携、配布までを扱います。Tauri の Web フロントエンドと Rust バックエンドの構成に加え、egui、iced、slint などのネイティブ GUI フレームワークも解説します。
主な機能
- 01Tauri とネイティブ GUI の比較
- 02フロントエンド・バックエンド・IPC の設計
- 03状態管理と Tokio の統合
- 04システム API とプラットフォーム差異への対応
- 05テスト、ビルド、配布の手引き
活用シーン
- 01Web 技術を使うチームで Rust デスクトップの方式を選ぶ
- 02Tauri コマンドと型安全な IPC を設計する
- 03OS 連携が必要なデスクトップツールを開発する
- 04クロスプラットフォームのビルドとリリースを計画する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bobmatnyc/ claude-mpm-skills --skill rust-desktop-applicationsインストール後、Claude Code で/rust-desktop-applicationsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonreferences/architecture-patterns.mdnative-gui-frameworks.mdplatform-integration.mdstate-management.mdtauri-framework.mdtesting-deployment.md詳細
Rust デスクトップアプリケーション
概要
Rust は、ネイティブのパフォーマンスとメモリ安全性を兼ね備えたデスクトップアプリケーションを構築するための主要な言語として台頭しています。エコシステムには、主に 2 つのアプローチがあります。Tauri はハイブリッド型の Web UI + Rust バックエンドアプリ(Electron と比べて 10 倍小さく高速なものをイメージしてください)向けで、egui、iced、slint などのネイティブ GUI フレームワークは純粋な Rust インターフェース向けです。
Tauri は、開発者がフロントエンドに Web 技術(React、Vue、Svelte)を使いながら、システムレベルの操作には Rust のパフォーマンスと安全性を活用できるようにすることで、デスクトップ開発に変革をもたらしました。バンドルサイズが 5MB 未満で、メモリ使用量が Electron の 10 分の 1 の Tauri アプリは、デスクトップアプリにふさわしいパフォーマンスを発揮します。ネイティブフレームワークは、専門的な用途で力を発揮します。即時モードのツールやゲームエディターには egui、Elm スタイルのリアクティブアプリには iced、組み込みシステムや宣言的 UI には slint が適しています。
このスキルでは、フレームワークの選定からアーキテクチャ、状態管理、プラットフォーム統合、デプロイまで、Rust デスクトップ開発のライフサイクル全体を扱います。適切な IPC パターン、非同期ランタイムの統合、ネイティブシステムへのアクセス、クロスプラットフォーム配布を備えた、本番環境で使えるアプリケーションを構築できます。
このスキルを使う場面
ネイティブのパフォーマンス、小さなバンドルサイズ、システム統合、またはメモリ安全性の保証が必要なデスクトップアプリケーションを構築するときに有効にしてください。特に、次の場合に使用します。
- Web UI + Rust バックエンドを備えた Electron の代替アプリを構築するとき(Tauri)
- 高性能な開発者向けツールや生産性アプリを作成するとき
- ネイティブ OS との統合が必要なシステムユーティリティを開発するとき
- Windows、macOS、Linux 向けのクロスプラットフォームアプリを構築するとき
- 100MB 以上の Electron アプリと比べ、10MB 未満のバンドルサイズが必要なとき
- リアルタイムアプリケーション(音声/動画処理、ゲーム)を実装するとき
- 組み込み GUI アプリケーション(キオスク端末、IoT デバイス)を作成するとき
使用しない場面
- シンプルな Web アプリ — Next.js、Vite、または Web フレームワークを使用してください
- モバイルファーストのアプリケーション — Flutter、React Native、または Kotlin Multiplatform を使用してください
- CLI 専用ツール — コマンドラインアプリには clap/structopt を使用してください
- ブラウザー拡張機能 — WebExtensions API を使用してください
- 簡単なプロトタイプ — ネイティブ開発にはセットアップの手間がかかります
- チームに Rust の経験がない場合 — システムプログラミングには急峻な学習曲線があります
鉄則
Web UI + Rust バックエンドには TAURI | 純粋な Rust にはネイティブ GUI | フロントエンドにビジネスロジックを混在させない
フロントエンドとバックエンドでロジックを重複させたり、IPC を迂回して直接アクセスしたりすると、アーキテクチャに違反します。
基本原則
- フレームワークの選定:Web 技術に精通したチームには Tauri、Rust を中心とするプロジェクトにはネイティブ GUI
- 明確な分離:フロントエンドは UI を担当し、Rust バックエンドはビジネスロジックとシステムアクセスを担当します
- 型安全な IPC:コマンドとイベントには、serde によるシリアライズを用いて強い型付けを行います
- 非同期ランタイム:バックエンドの並行処理には Tokio を使い、メインスレッドのブロックを防ぎます
- セキュリティを最優先:すべての IPC 入力を検証し、公開するコマンドを最小限に抑え、CSP ポリシーを設定します
- プラットフォームの抽象化:一度記述すれば、プラットフォームごとの差異に柔軟に対応できます
クイックスタート
-
フレームワークを選択する
- Tauri:Web のスキル(React/Vue/Svelte)がありますか?UI を迅速に開発したいですか?→
cargo install tauri-cli - ネイティブ GUI:純粋な Rust プロジェクトですか?即時モードまたはリアクティブパターンを使いますか?→ egui/iced/slint を選択します
- Tauri:Web のスキル(React/Vue/Svelte)がありますか?UI を迅速に開発したいですか?→
-
プロジェクトを初期化する
# Tauri cargo create-tauri-app my-app # Select: npm, React/Vue/Svelte, TypeScript # Native (egui example) cargo new my-app cargo add eframe egui -
アーキテクチャをセットアップする
- Tauri:
src-tauri/src/main.rsでコマンドを定義し、IPC を処理します - ネイティブ:アプリの状態、イベントループ、UI の更新ロジックを実装します
- 構成:
src/(バックエンド)、ui/またはsrc-ui/(Tauri の場合はフロントエンド)
- Tauri:
-
コア機能を実装する
#[tauri::command]で Tauri コマンドを定義します- 状態管理(Arc<Mutex> またはチャネル)をセットアップします
- 非同期処理に Tokio を統合します
Result<T, E>でエラー処理を追加します
-
プラットフォーム統合を追加する
- ファイルシステムへのアクセス(ダイアログ、読み取り/書き込み)
- システムトレイ、通知、自動更新
- ディープリンク、カスタム URL スキーム
- OS 固有の機能(Windows レジストリ、macOS サンドボックス化)
-
ビルドして配布する
# Development cargo tauri dev # or cargo run # Production build cargo tauri build # Creates installers for current platform # Cross-platform: Use GitHub Actions with matrix builds
フレームワークの選択フロー
Need desktop app?
├─ Have web frontend skills (React/Vue/Svelte)?
│ └─ YES → Use Tauri
│ ├─ Need <5MB bundles? ✓
│ ├─ System integration? ✓
│ ├─ Cross-platform? ✓
│ └─ Rapid UI development? ✓
│
└─ Pure Rust, no web frontend?
├─ Game editor or immediate mode tools? → egui
├─ Elm-style reactive architecture? → iced
├─ Declarative UI, embedded devices? → slint
└─ Data-first reactive? → druid
Tauri を選ぶ場合:Web UI の専門知識があり、最新のフロントエンドフレームワークを使いたい、迅速に反復開発したい ネイティブを選ぶ場合:最大限のパフォーマンスが必要で、Web への依存を避け、特殊な UI パターンを使いたい
ナビゲーション
詳しいガイドはこちらです:
- Tauri フレームワーク:Tauri のアーキテクチャ、プロジェクトのセットアップ、IPC 通信パターン、ネイティブ API へのアクセス、設定、セキュリティモデル、実例を含むビルドプロセスの完全ガイド
- ネイティブ GUI フレームワーク:egui、iced、druid、slint を詳しく解説します。アーキテクチャパターン、それぞれの使いどころ、比較表、本番環境向けコード例を紹介します
- アーキテクチャパターン:MVC/MVVM、コマンドパターン、イベント駆動型アーキテクチャ、プラグインシステム、リソース管理、エラー処理戦略など、デスクトップアプリ向けのパターン
- 状態管理:状態管理戦略、Tokio を使った非同期ランタイムの統合、メッセージパッシング、リアクティブパターン、永続化(設定/データベース)、複数ウィンドウ間での状態共有
- プラットフォーム統合:ファイルシステムへのアクセス、システムトレイ、通知、自動更新、ディープリンク、OS 固有の機能(Windows/macOS/Linux)、権限、セキュリティ
- テストとデプロイ:統合テスト、UI テストの手法、クロスコンパイル、プラットフォーム固有のビルド、配布(インストーラー/バンドル/ストア)、署名、公証、CI/CD パイプライン
主要なパターン
正しい Tauri パターン:
✅ Commands in Rust backend
✅ Type-safe IPC with serde
✅ Async operations with Tokio
✅ State management with Arc<Mutex<T>>
✅ Error propagation with Result<T, E>
✅ Frontend calls backend via invoke()
正しいネイティブ GUI パターン:
✅ Immediate mode (egui) or retained mode (iced)
✅ State updates trigger redraws
✅ Event handling in Rust
✅ Platform-agnostic rendering
✅ Resource cleanup on drop
誤ったパターン:
❌ Business logic in frontend JavaScript
❌ Exposing unsafe commands without validation
❌ Blocking operations on main thread
❌ Direct filesystem access from frontend
❌ Missing error handling on IPC
❌ Hardcoded platform-specific paths
危険信号 — 中止
- メインスレッドをブロックする — 長時間の処理には Tokio spawn を使用します
- 機密性の高いコマンドを公開する — 検証、レート制限、公開範囲の最小化を行います
- Tauri で CSP がない — コンテンツセキュリティポリシーを設定します
- 入力検証がない — IPC コマンドの引数は必ず検証します
- フロントエンドからファイルへ直接アクセスする — Tauri のファイルシステム API を使用します
- プラットフォーム間の違いを無視する — 対象となるすべてのプラットフォームでテストします
- バンドルサイズが大きい — プロファイリングを行い、依存関係を最適化します
- 自動更新の戦略がない — ユーザーが手動で更新することはありません
他のスキルとの統合
- vite-local-dev:Vite を Tauri と統合し、ホットモジュールリプレースメントと高速なフロントエンドビルドを実現します
- async-testing:Tauri コマンドやバックグラウンドタスク内の非同期 Tokio コードをテストします
- performance-profiling:Criterion で Rust バックエンドをプロファイリングし、最適化にはフレームグラフを使用します
- test-driven-development:コマンド、状態管理、ビジネスロジックのテストを作成します
- verification-before-completion:リリース前にクロスプラットフォームビルドをテストします
- systematic-debugging:Tauri の IPC の問題をデバッグし、コンソールログを調べ、Rust デバッガーを使用します
実社会での効果
パフォーマンス指標:
- バンドルサイズ:3〜5MB(Tauri)対 100〜200MB(Electron)
- メモリ使用量:50〜100MB(Tauri)対 500MB〜1GB(Electron)
- 起動時間:1秒未満(Tauri)対 3〜5秒(Electron)
- ビルド時間:1〜2分(Tauri)対 5〜10分(Electron)
本番環境での例:
- Warp Terminal:Rust(egui/カスタム)で構築された高性能ターミナル
- Lapce:Druid(後にカスタムフレームワーク)を使用した高速コードエディター
- Zed:ネイティブのRust UIを備えた共同作業向けコードエディター
- Notionのようなアプリ:デスクトップ版にTauriを使用
- システムユーティリティ:ファイルマネージャー、タスクマネージャー、監視ツール
要点
Rustによるデスクトップ開発は、メモリ安全性を備えた比類のないパフォーマンスを実現します。
Web UIとRustバックエンドを小さなバンドルで実現するならTauriを選びましょう。純粋なRustで特化したパターンを使うなら、ネイティブGUIを選びましょう。フロントエンドとバックエンドを明確に分離して設計しましょう。型安全なIPCを使用しましょう。非同期処理にはTokioを統合しましょう。プラットフォームごとの差異に対応しましょう。クロスプラットフォームのテストは早い段階で実施しましょう。
これがRustデスクトップ開発の流儀です。