ADR-009: Tauri Build Commands Cross-Platform Strategy
Context
TauriのbeforeDevCommand/beforeBuildCommandは、実行環境によって異なるディレクトリから実行される:
- CI環境(GitHub Actions):
working-directory設定により動作が変わる - ローカル環境:
cargo tauriを実行したディレクトリに依存
この差異により、CIでは成功するがローカルでは失敗する、またはその逆の問題が発生した。
発生した問題
cd ui && npm install→ CIで成功、ローカル(src-tauriから実行)で失敗cd ../ui && npm install→ ローカルで成功、CIで失敗if [ -d ui ]; then ...→ macOS/Linuxで成功、Windowsで失敗(Bash構文)
Decision
プロジェクトルートにpackage.jsonを配置し、npm scriptsでビルドコマンドを定義する。
構成
/package.json # npm scripts定義
/ui/ # フロントエンド
/src-tauri/
tauri.conf.json # npm run tauri:dev/build を呼び出す
package.json
{
"private": true,
"scripts": {
"tauri:dev": "cd ui && npm install && npm run dev",
"tauri:build": "cd ui && npm install && npm run build"
}
}
tauri.conf.json
{
"build": {
"beforeDevCommand": "npm run tauri:dev",
"beforeBuildCommand": "npm run tauri:build"
}
}
実行方法
# プロジェクトルートから実行(必須)
cd /path/to/project
cargo tauri dev
cargo tauri build
Consequences
メリット
- macOS, Windows, Linux全てで同じコマンドが動作
- CIとローカルで同じ手順
- シェル固有構文への依存を排除
npm run内のcdはクロスプラットフォームで動作
デメリット
- プロジェクトルートに
package.jsonが必要(既存のRustプロジェクトに追加ファイル) src-tauriディレクトリからの直接実行は非サポート
制約
cargo tauri dev/buildは必ずプロジェクトルートから実行すること- CI設定で
working-directoryを使用しないこと