Skip to content

課題と解決策

クロスプラットフォームパッケージング

課題 — 単一のコードベースから、Windows(.msi)、Linux(.deb)、macOS(.dmg)向けのネイティブインストーラーを自動で生成する。

解決策 — Tauriが3つのプラットフォームをネイティブに処理。GitHub Actionsワークフローがランナーマトリクスを使用:

yaml
strategy:
  matrix:
    os: [ubuntu-22.04, windows-latest, macos-latest]

各ランナーがtauri-apps/tauri-actionでそのプラットフォームのインストーラーを生成し、タグがプッシュされると自動的にGitHub Releaseに公開されます。


外部サーバーなしのOBSオーバーレイ

課題 — クラウドサービスやホストされたサーバーに依存せずに、デスクトップアプリがOBSのブラウザソースと通信する。

解決策 — Tauriアプリにtokio-tungsteniteでRust実装のWebSocketサーバーを組み込む。OBSは他のWebSocketと同様にlocalhost:9876に接続。アプリを閉じると接続が切れる。すべてローカルで完結。


Stream Deckとの同期

課題 — Stream DeckプラグインはアプリのデッキConfigを知る必要があるが、両者の直接結合は避けたい。

解決策 — シンプルなハンドシェイクプロトコル:起動時にプラグインがGET_DECKS_CONFIGを送信。アプリがデッキの完全リスト(名前、タイプ、base64アイコン)で応答。設定が変更された場合、ユーザーはプラグインから再同期をトリガーできる。


オーバーレイでのローカルアルバムアートワーク

課題 — アートワークは外部URLまたはローカルファイルから来ることがある。OBSオーバーレイ(ブラウザ)はユーザーのローカルファイルシステムにアクセスできない。

解決策 — ユーザーがローカルファイルを選択すると、TauriアプリがRust側で読み込みbase64に変換。画像はWebSocketメッセージにdata URIとして直接含まれる。オーバーレイはディスクに直接アクセスしない — すべてWebSocket経由。


バージョン同期

課題package.jsontauri.conf.jsonCargo.tomlの3つのファイルに同じバージョンが必要。忘れると不整合なビルドになる。

解決策scripts/sync-version.jsスクリプトがpackage.jsonからバージョンを読み取り、他の2つのファイルを自動更新。npmのprebuildpretauriフックで各buildtauriの前に自動実行され、手動更新を忘れることが不可能。