Skip to main content

ADR-001: Rust採用

Context

jamjamはリアルタイム音声通信アプリケーションであり、以下の要件がある:

  • アプリケーション起因の遅延 10ms以下
  • クロスプラットフォーム(Windows / macOS / Linux)
  • メモリ安全性
  • 長時間動作での安定性

言語選択肢:

  • C++: 高パフォーマンス、メモリ安全性の保証なし
  • Rust: 高パフォーマンス、メモリ安全性保証、モダンなツールチェーン
  • Go: GCによるレイテンシスパイクの懸念
  • C: 高パフォーマンス、メモリ安全性の保証なし、開発効率低

Decision

Rustを採用する。

Consequences

メリット

  • メモリ安全性: コンパイル時にメモリ関連バグを検出
  • パフォーマンス: C/C++同等のパフォーマンス
  • クロスプラットフォーム: 単一コードベースで全プラットフォーム対応
  • エコシステム: cpal(オーディオI/O)、tokio(非同期)等の成熟したライブラリ
  • ツールチェーン: Cargo、rustfmt、clippyによる開発効率向上
  • FFI: Flutter(flutter_rust_bridge)との連携が容易

デメリット

  • 学習コスト: 所有権システムの理解が必要
  • コンパイル時間: C++より長い場合がある
  • エコシステム: C++ほど音声系ライブラリが豊富ではない

リスク軽減

  • 音声系で必要なライブラリ(cpal、opus-rs)は十分に成熟している
  • Rustコミュニティは活発であり、問題解決のリソースが豊富