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 dev | tauri build |
|---|---|---|
| 先に実行 | beforeDevCommand(Vite の起動) | beforeBuildCommand(dist/ の生成) |
| 画面の読み込み元 | devUrl のサーバー | frontendDist のファイル(実行ファイルに埋め込み) |
| ページの URL | http://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 のバンドル ID | OS から別のアプリとして扱われる |
| 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.devis not allowed」:tauri buildは既定の identifier を受け付けません。 - 「The
tauridependency features on theCargo.tomlfile does not match the allowlist defined undertauri.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 でのビルドで行います(本番用にアプリをビルドする)。
