メインコンテンツまでスキップ

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を不採用とした理由

  1. リソース消費: Chromiumバンドルで100MB+、メモリ使用量も大きい
  2. 音楽アプリとの相性: リソース競合でレイテンシに影響する可能性

コード共有戦略

+------------------+     +------------------+
| Tauri (Web) | | Flutter |
+------------------+ +------------------+
| |
v v
+------------------+ +------------------+
| tauri-commands | | flutter_rust_ |
| | | bridge |
+------------------+ +------------------+
| |
+------------------------+
|
v
+------------------+
| Rust Core |
| (Audio, Network) |
+------------------+

コアロジック(音声処理、ネットワーク)はRustで共通化し、GUI層のみをTauri/Flutterで実装する。