tauri.conf.json の基本設定

tauri.conf.json の主要キーの意味、identifier を変えたときの影響と移行方法、devUrl と frontendDist の違い、tauri.macos.conf.json など OS 別ファイルの合成規則を示す。

環境構築 対象: Tauri 2.x 更新日: 読了目安: 約8分 env-009
目次
  1. 前提条件
  2. 1. 生成直後の設定を読む
  3. 2. devUrl と frontendDist
  4. 3. identifier を決める・変える
  5. 4. OS 別の設定ファイル
  6. 動作確認
  7. よくあるエラーと対処法
  8. OS ごとの違いと注意点
  9. 関連レシピ

src-tauri/tauri.conf.json は、CLI とアプリ本体の両方が読む設定ファイルです。CLI はここから開発サーバーの起動方法やインストーラーの作り方を知り、アプリはコンパイル時に埋め込まれた内容でウィンドウを作ります。最初に押さえるべきトップレベルと build 節のキー、あとから変えると困る identifier、OS ごとに設定を変えるファイルの書き方をまとめます。

前提条件

create-tauri-app で作ったプロジェクトを想定します(ファイルの位置づけは Tauri プロジェクトのディレクトリ構成)。JSON なのでコメントは書けず、キーは大文字小文字を区別します。先頭の "$schema" を残すと VS Code で補完が効きます。コメントを書くなら config-json5 feature で tauri.conf.json5 にします(Cargo.toml で Rust のパッケージを管理する)。

1. 生成直後の設定を読む

{
  "$schema": "https://schema.tauri.app/config/2",
  "productName": "my-app",
  "version": "0.1.0",
  "identifier": "com.example.myapp",
  "build": {
    "beforeDevCommand": "npm run dev",
    "devUrl": "http://localhost:1420",
    "beforeBuildCommand": "npm run build",
    "frontendDist": "../dist"
  },
  "app": {
    "withGlobalTauri": true,
    "windows": [{ "title": "my-app", "width": 800, "height": 600 }],
    "security": { "csp": null }
  },
  "bundle": {
    "active": true,
    "targets": "all",
    "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"]
  }
}
キー意味
productNameアプリの名前。インストーラーや macOS の .app の名前になる
version"../package.json" と書くと package.json の値を使える。省略すると Cargo.toml の値
identifierアプリを区別する ID(3 章)
build開発・ビルドの前に実行するコマンドと、画面の読み込み元(2 章)
app起動時に作るウィンドウ(windows)、CSP などのセキュリティ(security)
bundleインストーラーの種類、アイコン、同梱ファイル(resources)
pluginsプラグインごとの設定。プラグイン名をキーにする

ウィンドウは label を省略すると "main" になり、capabilities/default.json の "windows": ["main"] はこれを指しています。ラベルを変えたら権限側も合わせます。withGlobalTauri は window.__TAURI__ に API を載せる設定で、import で @tauri-apps/api を使うなら不要です。

2. devUrl と frontendDist

項目tauri devtauri build
先に実行beforeDevCommand(Vite の起動)beforeBuildCommand(dist/ の生成)
画面の読み込み元devUrl のサーバーfrontendDist のファイル(実行ファイルに埋め込み)
ページの URLhttp://localhost:1420/Windows は http://tauri.localhost/、macOS / Linux は tauri://localhost/
  • frontendDist は tauri.conf.json から見た相対パス です。Vite の出力先を変えたら合わせます。
  • devUrl のポートは Vite の server.port と一致させます(開発サーバーの起動とデバッグ)。
  • devUrl を書かないと、CLI が frontendDist を内蔵のサーバー(既定はポート 1430)で配信します。バンドラーなしの素の HTML ならこれで足ります。
  • 開発と本番でオリジンが違うため、tauri dev で localStorage や IndexedDB に保存したデータはリリースビルドからは見えません。

3. identifier を決める・変える

使える文字は英数字・ハイフン・ピリオドだけです(決め方は Tauri プロジェクトを作成する)。問題は変えたときで、次のものが identifier から決まります。

identifier から決まるもの変えると
アプリデータの保存先(appDataDir() など)設定ファイルや DB が空の新しいフォルダに作られる
WebView のデータ(localStorage・Cookie など)ログイン状態などが消える
macOS のバンドル IDOS から別のアプリとして扱われる
Android のパッケージ名gen/android を消して tauri android init で作り直す

どうしても変えるなら、起動時に旧 identifier のフォルダからファイルをコピーします。WebView のデータ(localStorage など)はこの方法では移せません。

use std::path::PathBuf;
use tauri::Manager;

/// 旧 identifier のフォルダにあるファイルを、新しいアプリデータフォルダへ 1 回だけコピーする
fn copy_from_old_identifier(app: &tauri::App, old_identifier: &str, files: &[&str]) -> tauri::Result<()> {
    let new_dir = app.path().app_data_dir()?; // <data_dir>/<新しい identifier>
    let old_dir = app.path().data_dir()?.join(old_identifier);
    for name in files {
        let (from, to): (PathBuf, PathBuf) = (old_dir.join(name), new_dir.join(name));
        if from.exists() && !to.exists() {
            std::fs::create_dir_all(&new_dir)?;
            std::fs::copy(&from, &to)?; // 移動ではなくコピーにして旧データを残す
        }
    }
    Ok(())
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .setup(|app| {
            copy_from_old_identifier(app, "com.example.oldname", &["settings.json"])?;
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

productName も変えにくい値です。Windows の MSI は productName から作るアップグレードコードで同じアプリかを判断するため、名前を変えると二重にインストールされます。変える前に npm run tauri inspect wix-upgrade-code の値を bundle.windows.wix.upgradeCode に書いて固定します。

4. OS 別の設定ファイル

同じフォルダに tauri.windows.conf.json・tauri.macos.conf.json・tauri.linux.conf.json(モバイルは tauri.android.conf.json など)を置くと、その OS 向けのビルドでだけ上書きとして合成されます。規則は「オブジェクトはキーごとに合成、配列は丸ごと置き換え」です。app.windows は配列なので、macOS だけタイトルバーを変える場合もウィンドウの設定を全部書きます。

{
  "app": {
    "windows": [
      {
        "title": "my-app",
        "width": 800,
        "height": 600,
        "titleBarStyle": "Overlay",
        "hiddenTitle": true
      }
    ]
  }
}

titleBarStyle だけを書くと、タイトルや大きさは省略時の値(「Tauri App」、800 x 600)に戻ります。同じ形のファイルは CLI の --config にも渡せ、productName と identifier を変えたファイルで正式版と共存できるベータ版を作れます。

npm run tauri build -- --config src-tauri/tauri.beta.conf.json

動作確認

設定を保存すると tauri dev が再ビルドします(build 節の変更は起動し直すのが確実です)。identifier で決まる保存先は次のように確かめます。

import { appDataDir } from '@tauri-apps/api/path';

// 例: C:\Users\me\AppData\Roaming\com.example.myapp
console.log(await appDataDir());

よくあるエラーと対処法

  • 「unable to parse JSON Tauri config file at …」という趣旨のエラー: JSON の構文エラーです。末尾のカンマやコメントが典型です。
  • キーの綴り違いを指摘する検証エラー: 綴り違いか Tauri 1 の書き方です。v1 の devPath・distDir・tauri は、v2 では devUrl・frontendDist・app です(npm run tauri migrate で移行できます)。
  • 「The default value com.tauri.dev is not allowed」: tauri build は既定の identifier を受け付けません。
  • 「The tauri dependency features on the Cargo.toml file does not match the allowlist defined under tauri.conf.json.」: app.security.assetProtocol.enable や app.macOSPrivateApi を変えた後に cargo build で直接ビルドしました。tauri dev / tauri build 経由なら CLI が Cargo.toml の features を合わせます。

OS ごとの違いと注意点

  • Windows: appDataDir() は %APPDATA%\<identifier>、WebView のデータは %LOCALAPPDATA%\<identifier> です。
  • macOS: appDataDir() は ~/Library/Application Support/<identifier> です。
  • Linux: appDataDir() は ~/.local/share/<identifier> です。
  • 共通: OS 別ファイルはビルド対象の OS のものだけが読まれるので、Windows で tauri.macos.conf.json を変えても何も変わりません。確認はその OS でのビルドで行います(本番用にアプリをビルドする)。

関連レシピ

参考リンク(公式ドキュメント)

Web Ninja

この記事を書いた人

Web Ninja ウェブエンジニア (Web Engineer)

会社員ネットワークエンジニアから独立してかれこれ 25 年以上 Web エンジニアとして活動中。普段は JavaScript と Node.js を自在に操り、時には C++ や Perl といった古流の技も嗜みます。近年は Tauri × Rust という新たな武器を手に、デスクトップアプリ開発の最前線を駆け抜けています。「作りたい」を「作れる」に変えるための、実践的な「技」をお届けします。

お問い合わせ: tauri.ninja@gmail.com

内容の誤り・動かないコードを報告する