画像やDBファイルを配布物に同梱する

Recipe ID: build-009

アプリ実行時に必要な静的ファイル(画像、設定ファイルのテンプレート、データベースファイルなど)をインストーラーに同梱し、実行時にアクセスする方法を解説します。
Frontend の dist/ に含めるのではなく、Rust 側からパス解決を行いたい場合に有効です。

設定 (tauri.conf.json)

bundle -> resources にファイルまたはディレクトリパスを指定します。

{
  "bundle": {
    "resources": [
      "assets/images/*",
      "assets/data.db",
      "locales/**"
    ]
  }
}
  • パスは tauri.conf.json からの相対パスです。
  • ワイルドカード (*, **) が使用可能です。

アクセス方法 (Rust)

PathResolver (v2 では AppHandle::path()) を使用して、リソースディレクトリ内の実パスを取得します。

use tauri::Manager;

#[tauri::command]
fn load_resource(app: tauri::AppHandle) -> String {
    let resource_path = app.path().resolve("assets/data.db", tauri::path::BaseDirectory::Resource)
        .expect("failed to resolve resource");

    // resource_path は絶対パス (/Applications/MyApp.app/Contents/Resources/assets/data.db 等)
    // これを使って File::open などを行う
    format!("Path: {:?}", resource_path)
}

アクセス方法 (Frontend)

JavaScript から直接アクセスする場合も、まずは Rust コマンド経由でパスを取得するか、plugin-fspath API を組み合わせて使用しますが、基本的には Rust 側で処理する設計が推奨されます。