ADR-004: GUIフレームワーク選択(Tauri / Flutter)
Context
クロスプラットフォームGUIフレームワークの選択が必要。
対象プラットフォーム:
- デスクトップ: Windows / macOS / Linux
- モバイル: iOS / Android(将来)
選択肢:
- Electron: Web技術、重い(100MB+)
- Tauri 2.0: Rust + Web技術、軽量(10MB程度)
- Qt: C++/Python、成熟、ライセンス注意
- Flutter: Dart、クロスプラットフォーム、モバイル強い
- egui/iced: Rust native、軽量、機能制限
要件:
- レスポンシブデザイン、ダークモード対応
- バンドルサイズ < 50MB、メモリ使用量 < 200MB
- Rustコアとの連携
- 将来のモバイル対応
Decision
- デスクトップ: Tauri 2.0
- モバイル: Flutter + flutter_rust_bridge
Consequences
Tauri 2.0(デスクトップ)
| 項目 | 評価 |
|---|---|
| バンドルサイズ | 小(10MB程度) |
| メモリ使用量 | 少(システムWebViewを使用) |
| Rust連携 | ネイティブ |
| UI自由度 | 高(Web技術) |
| 学習コスト | 低(Web知識があれば) |
Flutter(モバイル)
| 項目 | 評価 |
|---|---|
| クロスプラットフォーム | iOS / Android |
| Rust連携 | flutter_rust_bridgeで可能 |
| UI自由度 | 高 |
| パフォーマンス | 良好(ネイティブコンパイル) |
Electronを不採用とした理由
- リソース消費: Chromiumバンドルで100MB+、メモリ使用量も大きい
- 音楽アプリとの相性: リソース競合でレイテンシに影響する可能性
コード共有戦略
+------------------+ +------------------+
| Tauri (Web) | | Flutter |
+------------------+ +------------------+
| |
v v
+------------------+ +------------------+
| tauri-commands | | flutter_rust_ |
| | | bridge |
+------------------+ +------------------+
| |
+------------------------+
|
v
+------------------+
| Rust Core |
| (Audio, Network) |
+------------------+
コアロジック(音声処理、ネットワーク)はRustで共通化し、GUI層のみをTauri/Flutterで実装する。