zudo-tauri-wisdom

Type to search...

to open search from anywhere

アプリバンドルのビルド

作成2026年3月29日更新2026年4月16日Takeshi Takatsudo

cargo tauri build による .app バンドルのビルド、ターゲット設定、アイコン、インストール

アプリバンドルのビルド

cargo tauri build コマンドは、Rust バックエンドをコンパイルし、フロントエンドアセットをバンドルし、macOS 向けの配布可能な .app バンドルを生成する。

基本的なビルド

cargo tauri build

これにより、以下のパイプライン全体が実行される。

  1. tauri.conf.jsonbeforeBuildCommand を実行(フロントエンドビルド)
  2. Rust コードをリリースモードでコンパイル
  3. frontendDist ディレクトリをバイナリに埋め込み
  4. .app バンドルを作成

⚠️ Warning

beforeBuildCommand の設定が必須。フロントエンド(Vite 等)を埋め込む自己完結型アプリでは、tauri.conf.jsonbeforeBuildCommand を設定する必要がある。設定がない場合、cargo tauri buildfrontendDist にある古いファイルをリビルドせずにそのままバンドルしてしまう。ビルドはエラーなく成功するが、古いフロントエンドコードが含まれる。

{
  "build": {
    "beforeBuildCommand": "pnpm build",
    "frontendDist": "../dist"
  }
}

beforeBuildCommand が未設定の場合、ビルドが不自然に高速(30 秒以上かかるべきところが数秒)で完了することがある。これは Cargo がコンパイルすべきものがないと判断したためである。

出力は以下の場所に生成される。

target/release/bundle/macos/YourApp.app

バンドル設定

tauri.conf.json でバンドルを設定する。

{
  "bundle": {
    "active": true,
    "targets": "all",
    "category": "DeveloperTool",
    "macOS": {
      "minimumSystemVersion": "10.15"
    }
  }
}

バンドルターゲット

targets フィールドで、作成するバンドル形式を制御する。

出力
"all"利用可能なすべての形式(.app.dmg
["app"].app バンドルのみ
["dmg"].dmg ディスクイメージのみ

開発のイテレーションでは、.app のみをビルドする方が .dmg 作成をスキップできるため高速である。

カテゴリ

category フィールドは macOS のアプリケーションカテゴリを設定する。Finder や App Store に表示される。一般的な値は以下の通りである。

  • "DeveloperTool" — 開発者ツール向け
  • "Productivity" — 生産性アプリ向け
  • "Utility" — 一般的なユーティリティ向け

最小システムバージョン

{
  "macOS": {
    "minimumSystemVersion": "10.15"
  }
}

サポートする最も古い macOS バージョンを設定する。ほとんどのアプリでは 10.15(Catalina)が妥当な最小値である。これより低く設定すると、新しい API との互換性の問題が生じる可能性がある。

アイコン設定

Tauri は bundle.icon 配列で指定されたアイコンを参照する。

{
  "bundle": {
    "icon": ["icons/icon.png"]
  }
}

配列が空または省略された場合、Tauri はデフォルトのアイコンを使用する。本番アプリでは、少なくとも1つの高解像度 PNG(1024x1024 を推奨)を提供すること。Tauri は必要な .icns ファイルを自動的に生成する。

💡 Tip

アイコンのパスは tauri.conf.json からの相対パスである。アイコンのソースファイルは設定ファイルの隣に icons/ ディレクトリを作成して配置するとよい。

/Applications へのインストール

ビルド後、.app バンドルを /Applications にインストールする。

# 1. 実行中のアプリを終了(もしあれば)
killall YourApp 2>/dev/null || true
sleep 1

# 2. 古いバンドルを退避(mv はアトミック -- macOS Pitfalls 参照)
mv /Applications/YourApp.app /tmp/YourApp-old-$$.app 2>/dev/null || true

# 3. 新しいバンドルをコピー
cp -R target/release/bundle/macos/YourApp.app /Applications/

# 4. 検疫フラグをクリア(対象を限定: 検疫属性のみ削除)
xattr -dr com.apple.quarantine /Applications/YourApp.app

⚠️ Warning

既存の .app バンドルに cp -rf で上書きしてはならない。 Contents/MacOS/ 内のバイナリが更新されない場合がある。必ず古いバンドルを先に削除(または移動)すること。詳細は macOS デプロイの注意点 を参照。

代替設定でのビルド

異なる tauri.conf.json ファイルでビルドする場合:

cargo tauri build --config tauri.conf.ztoffice.json

代替設定はベース設定の上にマージされるため、異なるフィールドのみを含めればよい。詳細はマルチコンフィグを参照。

ビルドの検証

ビルド後、バイナリが最新であることを確認する。

# Check the binary modification time
stat -f "%Sm" target/release/bundle/macos/YourApp.app/Contents/MacOS/YourApp

# Verify frontend assets are embedded (if applicable)
# Search for a known string in the built JS
grep -l "some-unique-string" target/release/bundle/macos/YourApp.app/Contents/Resources/*

タイムスタンプが古い場合や期待する文字列が見つからない場合は、Cargo キャッシュ無効化を参照。