About ダイアログやバグ報告フォームに「アプリ 1.4.2 / Tauri 2.8.5 / WebView2 140.x」のような環境情報を出しておくと、問い合わせ対応が一気に楽になります。アプリ自身のバージョンは @tauri-apps/api/app の getVersion()、Tauri コアのバージョンは同じモジュールの getTauriVersion() で取れ、getName() / getIdentifier() と組み合わせて表示します。Rust 側では package_info() と tauri::VERSION 定数を使います。
前提条件
プラグインは不要です。権限は core:app:default に含まれる次の 4 つで、core:default を有効にしていれば追加設定なしで使えます。個別に絞る場合はこの識別子を書きます。
{
"permissions": [
"core:app:allow-tauri-version",
"core:app:allow-version",
"core:app:allow-name",
"core:app:allow-identifier"
]
}
1. フロントエンドから実装する (TypeScript)
import { getTauriVersion, getVersion, getName, getIdentifier } from '@tauri-apps/api/app';
export async function buildAboutText(): Promise<string> {
const [tauri, version, name, id] = await Promise.all([
getTauriVersion(), // Rust 側 tauri クレートの版 (例: "2.8.5")
getVersion(), // tauri.conf.json の version (例: "1.4.2")
getName(), // tauri.conf.json の productName
getIdentifier(), // 例: "com.example.myapp" (2.4.0 以降)
]);
return `${name} ${version} (${id})\nTauri ${tauri}`;
}
注意したいのは、getTauriVersion() が返すのは Rust クレート tauri の版 であって、package.json の @tauri-apps/api の版ではない点です。両者は独立して更新されるため、2.8.x と 2.9.x のように食い違うのは普通です。JS 側の版も併記したいなら Vite の define などでビルド時に埋め込みます。
2. バックエンドから実装する (Rust)
WebView の版は tauri::webview_version() で取れるので、環境情報は Rust で一括生成すると 1 回の invoke で済みます。
use serde::Serialize;
use tauri::Manager;
#[derive(Serialize)]
struct EnvInfo {
app_name: String,
app_version: String,
tauri_version: String,
webview_version: String,
os: String,
}
#[tauri::command]
fn env_info(app: tauri::AppHandle) -> EnvInfo {
let pkg = app.package_info(); // name / version / authors / description / crate_name
EnvInfo {
app_name: pkg.name.clone(),
app_version: pkg.version.to_string(), // semver::Version なので to_string
tauri_version: tauri::VERSION.to_string(),
webview_version: tauri::webview_version().unwrap_or_else(|_| "unknown".into()),
os: format!("{} {}", std::env::consts::OS, std::env::consts::ARCH),
}
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![env_info])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
import { invoke } from '@tauri-apps/api/core';
type EnvInfo = { app_name: string; app_version: string; tauri_version: string; webview_version: string; os: string };
const info = await invoke<EnvInfo>('env_info');
console.log(`${info.app_name} ${info.app_version} / Tauri ${info.tauri_version} / WebView ${info.webview_version}`);
tauri::VERSION は &'static str の定数で、Cargo.lock で解決された版がコンパイル時に埋め込まれます。package_info().version は tauri.conf.json の version(未設定なら Cargo.toml の version)です。
アプリのバージョン番号を 1 か所で管理する
getVersion() が返す値もビルド時に埋め込まれます。package.json や Cargo.toml と別々に書くと食い違いやすいので、tauri.conf.json の version には package.json へのパスも書けるようになっています。次のようにすると package.json の version が使われ、npm version patch だけでアプリの版が上がります。
{
"productName": "My App",
"version": "../package.json",
"identifier": "com.example.myapp"
}
productName を省略すると、getName() は Cargo のパッケージ名を返します。Rust の env!("CARGO_PKG_VERSION") は常に Cargo.toml の値なので、tauri.conf.json 側で版を管理しているなら package_info().version を使います。どちらもビルド時に決まる値なので、書き換えたら tauri dev を起動し直します。
package_info().version は semver の型で、major / minor / patch を数値として比べられます。JS で "1.10.0" > "1.9.0" のように文字列のまま比べると結果が逆になるので、「更新後の初回だけお知らせを出す」といった判定は数値に分けてから行います。
開発環境全体の版を確認する
手元の環境を調べるなら CLI が一番速いです。Rust / Node / Tauri CLI / tauri クレート / @tauri-apps/api / WebView2 ランタイムの版が一覧で出ます。バグ報告に貼るのはこの出力です。
npm run tauri info
動作確認
npm run tauri dev で起動し、コンソールに次のように出れば成功です。
MyApp 0.1.0 (com.example.myapp)
Tauri 2.8.5
src-tauri で cargo update -p tauri を実行して再起動すると getTauriVersion() の値が変わります。package.json 側だけ更新しても変わらないことを確かめると、前述の違いが体感できます。
よくあるエラーと対処法
app.tauri_version not allowed. Permissions associated with this command: core:app:allow-tauri-version, ...という趣旨のエラー:core:default(またはcore:app:default)を外して個別指定にしたときに起きます。上記 4 つの識別子を追加します。getIdentifierがエクスポートされていないという TypeScript エラー:@tauri-apps/apiが 2.4.0 より古い状態です。npm install @tauri-apps/api@latestで更新します。tauri infoが@tauri-apps/apiとtauriの版の不一致を警告する: 動作はしますが、新しい JS API を呼んだときに Rust 側にコマンドが無く実行時エラーになります。Tauri CLI を最新版にアップグレードする の手順で両方揃えます。
OS ごとの違いと注意点
- WebView の版の意味が OS ごとに違う: Windows は WebView2 ランタイム(Edge と同じ番号)、macOS は WebKit(OS のアップデートで変わる)、Linux は WebKitGTK のパッケージ版です。同じ Tauri 版でも描画の差はここに起因することが多いので、必ず併記します。
tauri::VERSIONはビルド時に固定: ユーザー環境で変わることはありません。逆に WebView の版は OS 更新で勝手に変わります。- モバイル:
getName()/getVersion()は Android / iOS でも同じ API で取得できます。 - インストーラーの版: Windows の MSI の版は
versionから作られ、メジャーとマイナーは 255、パッチは 65,535 が上限です。2026.9.12のような日付の版は MSI では通らないので、bundle.windows.wix.versionで別に指定します。macOS のビルド番号はbundle.macOS.bundleVersionでversionと別に付けられます。
