実践レシピ
本番 Tauri アプリから抽出されたパターンとアーキテクチャ
実践レシピ
このセクションでは、本番環境で稼働している Tauri アプリから抽出されたアーキテクチャのウォークスルーとパターンを収録している。これらは最小限の「Hello World」サンプルではなく、日常的に使用するアプリを構築する際に遭遇する実際の複雑さをカバーしている。
レシピの意義
Tauri の公式ドキュメントは API の全体像をよくカバーしているが、完成したアプリがどのように組み合わさるかは示していない。開発サーバーの起動、プロセスライフサイクルの管理、複数のウィンドウタイプの扱い、共有コードからのアプリバリアントのビルドなどが必要になった場合、ほぼ自力で解決しなければならない。
これらのレシピは、実際に動作しているアプリケーションから得られたパターンを、各設計判断の理由と共にドキュメント化することで、そのギャップを埋めるものである。
利用可能なレシピ
ドキュメントビューアーアプリ
pnpm dev サーバーを薄くラップする軽量な Tauri アプリ。これは最もシンプルで実用的なパターンである。Rust 側が Node.js 開発サーバーを起動し、起動中はローディング画面を表示し、サーバーの準備ができたら WebView をナビゲートする。プロセスライフサイクル、ポートのクリーンアップ、ズームメニュー項目をカバーする。
最適な用途: 既存の Web アプリやドキュメントサイトをネイティブウィンドウでラップする場合。
テキストエディタアプリ
Vite + React フロントエンドと豊富な Rust IPC を持つフル機能のテキストエディタ。複数の Mutex フィールドを持つ AppState 管理、外部変更検出のためのファイルウォッチャー、スプラッシュスクリーンフロー、開発モード用の HTTP REST サーバー、macOS の長押し抑制、プラグインの使用をカバーする。
最適な用途: 豊富な Rust-JavaScript 間通信と複雑な状態管理を持つアプリ。
マルチコンフィグ
オーバーレイされた tauri.conf.json ファイルを使用して、同じコードベースから複数のアプリバリアント(異なる名前、識別子、アイコン)をビルドする方法。cargo tauri build --config フラグ1つで、まったく異なるアプリを生成できる。
最適な用途: 同じコア機能を異なるブランドや異なる用途でリリースする場合。
共通テーマ
これらのレシピを通じて、いくつかのパターンが繰り返し出現する。
- プロセスグループ — サイドカーは必ず独自のプロセスグループで起動し、クリーンに終了できるようにする
- 起動時のポートクリーンアップ — 新しいサーバーを起動する前に、ポート上の古いプロセスを終了させる
- ローディング/スプラッシュスクリーン — 即座に何かを表示する。ユーザーはローディングバーは許容するが、フリーズしたウィンドウは許容しない
cfg!(debug_assertions)— Rust で開発モードと本番モードの動作を分岐する標準的な方法- フォールバック付きのハードコードパス —
pnpmやnodeなどのシステムバイナリを見つけるために、まず既知のパスを確認し、次にwhichにフォールバックする