Tauri 2 は 2.x 系の中でも数週間おきにパッチやマイナーが出ます。押さえておきたいのは、「CLI を上げる」だけでは終わらないことです。Tauri プロジェクトには JavaScript 側と Rust 側に対になるパッケージがあり、片方だけ新しくすると「新しい JS API が呼ぶコマンドを古い Rust 側が知らない」という形で壊れます。
| 役割 | JavaScript (package.json) | Rust (src-tauri/Cargo.toml) |
|---|---|---|
| CLI | @tauri-apps/cli | (cargo install tauri-cli を使う場合のみ) |
| コア API | @tauri-apps/api | tauri, tauri-build |
| プラグイン | @tauri-apps/plugin-fs など | tauri-plugin-fs など |
この 3 段をまとめて更新するのが本レシピの手順です。
1. 現在の状態を確認する
npm run tauri info
出力は Environment / Packages / Plugins / App の 4 ブロックです。
[✔] Environment
- OS: Windows 10.0.26200 x86_64 (X64)
✔ WebView2: 1xx.0.xxxx.xx
✔ rustc: 1.8x.0 (...)
✔ Rust toolchain: stable-x86_64-pc-windows-msvc (default)
- node: 22.x.x
- npm: 10.x.x
[-] Packages
- tauri 🦀: 2.x.x
- tauri-build 🦀: 2.x.x
- @tauri-apps/api : 2.x.x
- @tauri-apps/cli : 2.x.x
[-] Plugins
- tauri-plugin-opener 🦀: 2.x.x
- @tauri-apps/plugin-opener : 2.x.x
[-] App
- frontendDist: ../dist
- devUrl: http://localhost:1420/
見るべきは Packages と Plugins で、🦀 (Rust) 行と JS 行の組が同じマイナーバージョンかです。tauri と @tauri-apps/api、tauri-plugin-xxx と @tauri-apps/plugin-xxx がそれぞれペアです。パッチ番号までは一致しなくても動きますが、マイナーがずれていると後述のエラーの原因になります。tauri info は Cargo.lock / package-lock.json に解決済みの実バージョンを表示するので、Cargo.toml に "2" と書いてあっても実際に何が使われているかが分かります。
2. JavaScript 側を更新する
npm install -D @tauri-apps/cli@latest
npm install @tauri-apps/api@latest
# 使っているプラグインをすべて列挙する
npm install @tauri-apps/plugin-opener@latest @tauri-apps/plugin-fs@latest
npm outdated | grep tauri で @tauri-apps/ 配下の古いものだけを一覧できます。
3. Rust 側を更新する
Cargo.toml の指定が tauri = { version = "2", ... } のようなメジャーだけの書き方なら、cargo update で 2.x 系の最新に上がります。
cd src-tauri
cargo update
# 特定クレートだけ上げたい場合
cargo update -p tauri -p tauri-build
cd ..
cargo update は Cargo.toml を書き換えず Cargo.lock だけを更新します。Cargo.toml に "2.3.1" のように細かく固定しているときは、先に Cargo.toml 側の数字を書き換えてから実行してください。
Cargo 版の CLI (cargo tauri) をグローバルに入れている場合は再インストールで更新します。
cargo install tauri-cli --version "^2.0.0" --locked
4. 再確認とビルド
npm run tauri info
npm run tauri dev
Cargo.lock と package-lock.json の差分をコミットに含めます。CI で同じバージョンが再現されるのは、この 2 つのロックファイルがあるからです。
動作確認
npm run tauri info の Packages / Plugins で 🦀 行と JS 行のマイナーが揃っていれば完了です。npm run tauri dev が通り、アプリ内で getTauriVersion() (Tauri のバージョン情報を取得する) を呼ぶと新しいバージョン文字列が返ります。
よくあるエラーと対処法
tauri build が CLI と tauri クレートのバージョン不一致を指摘して止まる
CLI は Cargo.lock の tauri クレートと自分のバージョンを照合し、互換性のない組み合わせだと「version mismatch」という趣旨のエラーで停止します。手順 2 と 3 を両方やり直すのが正解です。一時的に通したいときだけ npm run tauri build -- --ignore-version-mismatches があります。
JS 側で新しい関数を呼ぶと Command ... not found / ... not allowed という趣旨のエラー
@tauri-apps/plugin-xxx だけ新しくなり、Rust 側の tauri-plugin-xxx が古いケースです。新バージョンで追加されたコマンドが Rust 側に存在しないため invoke が失敗します。cargo update -p tauri-plugin-xxx で揃えます。新コマンド用の権限識別子を capabilities/default.json に足す必要がある場合もあります。
cargo update しても tauri が上がらない
Cargo.toml の指定が "=2.3.1" のように固定されているか、親ディレクトリに Cargo.lock を持つワークスペースがあって src-tauri/Cargo.lock が使われていない可能性があります。cargo update --dry-run で更新対象を先に確認します。
error: failed to select a version for the requirement ...
複数のクレートが矛盾するバージョンを要求しています。多くはサードパーティのプラグインが古い tauri に依存しているケースで、そのプラグインの更新を待つか、tauri の指定を一段古いマイナーに戻します。
Tauri v1 からの移行
v1 プロジェクトは cargo update では v2 になりません。CLI の migrate サブコマンドが、tauri.conf.json の構造変更、allowlist から capabilities への変換、@tauri-apps/api の import パス変更などを自動で書き換えます。
npm install -D @tauri-apps/cli@latest
npm run tauri migrate
自動変換は補助にすぎず、公式のアップグレードガイドを全部読んで手作業で仕上げる必要があります。特にプラグインへ切り出された API (fs, dialog, shell, http など) は npm run tauri add <plugin> で個別に追加し直します。
注意点
- 2.x 系のマイナー更新でも、プラグインの権限識別子や既定の権限セットが変わることがあります。更新後は
capabilities/とsrc-tauri/gen/schemas/に生成されるスキーマを見比べてください。 - 更新の粒度は「CLI + api + 全プラグインを同じ日に上げる」が最も安全です。1 つずつ上げると不一致状態が長く続きます。
