コンテンツにスキップ

Tauri 1.0 からのアップグレード

ここでは、Tauri 1.0 アプリケーションを Tauri 2.0 にアップグレードする手順を説明します。

Tauri のモバイル・インターフェイスでは、あなたのプロジェクトが共有ライブラリを出力する必要があります。既にあるアプリケーションをモバイル向けにする場合には、デスクトップ用実行可能ファイルとともに同様のアーティファクト(ファイル)を生成するようにクレートを変更しなければなりません。

《訳注》

アーティファクト artifact。 プログラム開発過程で生み出される「成果物」を指す言葉。ソースコードやプログラム関連文書。

  1. ライブラリを生成するために Cargo マニフェストを変更します。以下のブロックを追加します:
src-tauri/Cargo.toml
[lib]
name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
  1. src-tauri/src/main.rs の部分を src-tauri/src/lib.rs に変更します。このファイルは、デスクトップ版とモバイル版の両方で共有されます。

  2. lib.rs にある main 関数ヘッダーの名前を次のように変更します:

src-tauri/src/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
// ここに、あなたのコードを書きます
}

tauri::mobile_entry_point マクロは、あなたが作成した関数をモバイルで実行できるように準備するものです。

  1. 共用実行関数を呼び出す main.rs ファイルを再作成します。
src-tauri/src/main.rs
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
app_lib::run();
}

Tauri v2 CLI には、移行作業の大部分を自動化する「migrate コマンド」が含まれており、移行作業を完了するのに役立ちます。

npm install @tauri-apps/cli@latest
npm run tauri migrate

migrate コマンド」の詳細については、「コマンドライン・インターフェース・リファレンス」の章を参照してください。

Tauri 1.0 から Tauri 2.0 への変更内容の概要は以下のとおりです:

  • package > productNamepackage > version をトップレベル・オブジェクトへ移動。
  • バイナリ名の productName に合わせた自動的な名前変更が行なわれなくなったため、productName と一致するトップレベル・オブジェクトに mainBinaryName 文字列を追加する必要があります。
  • package を削除。
  • tauri key を「app」に改称。
  • tauri > allowlist を削除。下記「アクセス権の移行」を参照。
  • tauri > allowlist > protocol > assetScope を「app > security > assetProtocol > scope」へ移動。「enable」、「グロブ・パターン」、「requireLiteralLeadingDot」、「ダイナミック・パス」については「アセット・プロトコル・スコープ」の章を参照。
  • tauri > cli を「plugins > cli」へ移動。
  • tauri > windows > fileDropEnabled を「app > windows > dragDropEnabled」に改称。
  • tauri > updater > active を削除。
  • tauri > updater > dialog を削除。
  • tauri > updater を「plugins > updater」へ移動。
  • bundle > createUpdaterArtifacts」を追加。アプリ・アップデーターを使用する場合には設定する必要があります。
    • すでに配布されている v1 アプリをアップグレードする場合は、この項目を「v1compatible」に設定してください。詳しくは「アップデーター・ガイド」の章を参照してください。
  • tauri > systemTray を「app > trayIcon」に改称。
  • tauri > pattern を「app > security > pattern」へ移動。
  • tauri > bundle をトップレベルへ移動。
  • tauri > bundle > identifier をトップレベル・オブジェクトへ移動。
  • tauri > bundle > dmg を「bundle > macOS > dmg」へ移動。
  • tauri > bundle > deb を「bundle > linux > deb」へ移動。
  • tauri > bundle > appimage を「bundle > linux > appimage」へ移動。
  • tauri > bundle > macOS > license を削除。代わりに「bundle > licenseFile」を使用して下さい。
  • tauri > bundle > windows > wix > license を削除。代わりに「bundle > licenseFile」を使用して下さい。
  • tauri > bundle > windows > nsis > license を削除。代わりに「bundle > licenseFile」を使用して下さい。
  • tauri > bundle > windows > webviewFixedRuntimePath を削除。代わりに「bundle > windows > webviewInstallMode」を使用して下さい。
  • build > withGlobalTauri を「app > withGlobalTauri」へ移動。
  • build > distDir を「frontendDist」に改称。
  • build > devPath を「devUrl」に改称。

詳しくは「Tauri 2.0 設定 API レファレンス」の章を参照してください。

  • linux-protocol-body: カスタム・プロトコル・リクエストのボディ部解析を有効化し、IPC(プロセス間通信)での利用を許可します。「webkit2gtk 2.40」が必要です。
  • reqwest-client: 現時点で「reqwest」のみが有効なクライアントです。
  • reqwest-native-tls-vendored: 代わりに「native-tls-vendored」を使用して下さい。
  • process-command-api: 代わりに「shell プラグイン」を使用して下さい(使用方法は 下記の項目 で確認してください)。
  • shell-open-api: 代わりに「shell プラグイン」を使用して下さい(使用方法は 下記の項目 で確認してください)。
  • windows7-compat: 「notification プラグイン」へ移動。
  • updater: 「Updater(アップデーター)」は現在プラグインになっています。
  • linux-protocol-headers: 「webkit2gtk」最小化版がアップグレードされたので、デフォルトで有効化されるようになりました。
  • system-tray: 「tray-icon」に改称。
  • api モジュールは削除されました。各 API モジュールは、「Tauri プラグイン」を参照してください。
  • api::dialog モジュールは削除されました。代わりに「tauri-plugin-dialog」を使用して下さい。《移行処置の説明はこちら
  • api::file モジュールは削除されました。代わりに、Rust の「std::fs」を使用して下さい。
  • api::http モジュールは削除されました。代わりに「tauri-plugin-http」を使用して下さい。《移行処置の説明はこちら
  • api::ip モジュールは書き直され、「tauri::ipc」に移動しました。新しい API群、特に tauri::ipc::Channel を確認してください。
  • api::path モジュール機能と tauri::PathResolved は 「tauri::Manager::path」へ移動しました。《移行処置の説明はこちら
  • api::process::Commandtauri::api::shell および tauri::Manager::shell_scope の各 API は削除されました。代わりに 「tauri-plugin-shell」を使用してください。《移行処置の説明はこちら
  • api::process::current_binary および tauri::api::process::restart は 「tauri::process」へ移動しました。
  • api::version モジュールは削除されました。代わりに「semver crate」《英語サイト》 を使用して下さい。
  • App::clipboard_manager および AppHandle::clipboard_manager は削除されました。代わりに「tauri-plugin-clipboard」を使用してください。《移行処置の説明はこちら
  • App::get_cli_matches は削除されました。代わりに「tauri-plugin-cli」を使用して下さい。《移行処置の説明はこちら
  • App::global_shortcut_manager および AppHandle::global_shortcut_manager は削除されました。代わりに「tauri-plugin-global-shortcut」を使用して下さい。《移行処置の説明はこちら
  • Manager::fs_scope は削除されました。「ファイル・システム・スコープ」は tauri_plugin_fs::FsExt 経由でアクセス可能です。
  • Plugin::PluginApi は、プラグイン設定を2番目の引数として受け取るようになりました。
  • Plugin::setup_with_config は削除されました。代わりに最新の 「tauri::Plugin::PluginApi」を使用して下さい。
  • scope::ipc::RemoteDomainAccessScope::enable_tauri_api および scope::ipc::RemoteDomainAccessScope::enables_tauri_api は削除されました。代わりに scope::ipc::RemoteDomainAccessScope::add_plugin 経由で各コア・プラグインをそれぞれ個別に有効化してください。
  • scope::IpcScope は削除されました。代わりに「scope::ipc::Scope」を使用してください。
  • scope::FsScopescope::GlobPattern および scope::FsScopeEvent は削除されました。それぞれ、「scope::fs::Scope」、「scope::fs::Pattern」 および 「scope::fs::Event」 を使用して下さい。
  • updater モジュールは削除されました。代わりに tauri-plugin-updater を使用して下さい。《移行処置の説明はこちら
  • Env.args フィールドは削除されました。代わりに「Env.args_os」フィールドを使用して下さい。
  • MenuMenuEventCustomMenuItemSubmenuWindowMenuEventMenuItem および Builder::on_menu_event の各 API は削除されました。《移行処置の説明はこちら
  • SystemTraySystemTrayHandleSystemTrayMenuSystemTrayMenuItemHandleSystemTraySubmenuMenuEntry および SystemTrayMenuItem の各 API は削除されました。《移行処置の説明はこちら

@tauri-apps/api パッケージは、コア以外のモジュールを提供しなくなりました。これまでの tauri (現行では core)、patheventwindow の各モジュールのみがエクスポートされます。その他はすべてプラグインに移動されました。

  • @tauri-apps/api/tauri モジュールは「@tauri-apps/api/core」に改称されました。《移行処置の説明はこちら
  • @tauri-apps/api/cli モジュールは削除されました。代わりに「@tauri-apps/plugin-cli」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/clipboard モジュールは削除されました。代わりに「@tauri-apps/plugin-clipboard」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/dialog モジュールは削除されました。代わりに「@tauri-apps/plugin-dialog」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/fs モジュールは削除されました。代わりに「@tauri-apps/plugin-fs」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/global-shortcut モジュールは削除されました。代わりに「@tauri-apps/plugin-global-shortcut」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/http モジュールは削除されました。代わりに「@tauri-apps/plugin-http」を使用してください。《移行処置の説明はこちら
  • @tauri-apps/api/os モジュールは削除されました。代わりに「@tauri-apps/plugin-os」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/notification モジュールは削除されました。代わりに「@tauri-apps/plugin-notification」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/process モジュールは削除されました。代わりに「@tauri-apps/plugin-process」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/shell モジュールは削除されました。代わりに「@tauri-apps/plugin-shell」を使用して下さい。《移行処置の説明はこちら
  • @tauri-apps/api/updater モジュールは削除されました。代わりに「@tauri-apps/plugin-updater」を使用してください。《移行処置の説明はこちら
  • @tauri-apps/api/window モジュールは「@tauri-apps/api/webviewWindow」に改称されました。《移行処置の説明はこちら

バージョン 1 のプラグインは、@tauri-apps/plugin-<plugin-name> として公開されています。これは、以前には git から tauri-plugin-<plugin-name>-api として入手可能だったものです。

Tauri CLI によって読み書きされる環境変数のほとんどは、整合性と間違い防止のために名称が変更されました:

  • TAURI_PRIVATE_KEY -> TAURI_SIGNING_PRIVATE_KEY
  • TAURI_KEY_PASSWORD -> TAURI_SIGNING_PRIVATE_KEY_PASSWORD
  • TAURI_SKIP_DEVSERVER_CHECK -> TAURI_CLI_NO_DEV_SERVER_WAIT
  • TAURI_DEV_SERVER_PORT -> TAURI_CLI_PORT
  • TAURI_PATH_DEPTH -> TAURI_CLI_CONFIG_DEPTH
  • TAURI_FIPS_COMPLIANT -> TAURI_BUNDLER_WIX_FIPS_COMPLIANT
  • TAURI_DEV_WATCHER_IGNORE_FILE -> TAURI_CLI_WATCHER_IGNORE_FILENAME
  • TAURI_TRAY -> TAURI_LINUX_AYATANA_APPINDICATOR
  • TAURI_APPLE_DEVELOPMENT_TEAM -> APPLE_DEVELOPMENT_TEAM
  • TAURI_PLATFORM -> TAURI_ENV_PLATFORM
  • TAURI_ARCH -> TAURI_ENV_ARCH
  • TAURI_FAMILY -> TAURI_ENV_FAMILY
  • TAURI_PLATFORM_VERSION -> TAURI_ENV_PLATFORM_VERSION
  • TAURI_PLATFORM_TYPE -> TAURI_ENV_PLATFORM_TYPE
  • TAURI_DEBUG -> TAURI_ENV_DEBUG

「イベント・システム」は、より使いやすくなるように再設計されました。イベント・ソースにではなく、イベント・ターゲットに依拠する、より簡潔な実装になっています。

  • emit 機能」は、すべてのイベント・リスナーにイベントを発するようになりました。
  • 特定のターゲットにイベントを発生させる、新しい「emit_to/emitTo 機能」が追加されました。
  • emit_filter」は、ウィンドウではなく、「EventTarget」に基づいてフィルタリングするようになりました。
  • listen_global を「listen_any」に改称。フィルターやターゲットに関係なく、すべてのイベントの応答を待機(リッスン)するようになりました。
  • JavaScript: event.listen()listen_any と同様の動作をします。Options でターゲットが設定されていない限り、フィルターやターゲットに関係なくすべてのイベントを応答待機(リッスン)します。
  • JavaScript: WebviewWindow.listenなどは、それぞれのEventTargetに発信されたイベントのみ応答待機(リッスン)します。

マルチウェブビューのサポート

Section titled “マルチウェブビューのサポート”

Tauri バージョン 2 では、現在、unstable 機能フラグの下に置かれている「マルチウェブビュー multiwebview」へのサポートが導入されました。 この機能を導入するため、Rust の Window 型は「WebviewWindow」に、Manager の get_window 機能は「get_webview_window」に、それぞれ改称されました。

WebviewWindow JS API タイプは、@tauri-apps/api/window ではなく、「@tauri-apps/api/webviewWindow」から再エクスポートされるようになりました。

Windows では、本番公開アプリのフロントエンド・ファイルは、https://tauri.localhost ではなく「http://tauri.localhost」でホストされるようになりました。このため、バージョン 1 で dangerousUseHttpScheme が使用されていない限り、「IndexedDB」、「LocalStorage」、および 「Cookies」はリセットされます。これを防ぐには、app > windows > useHttpsScheme を「true に設定」するか、WebviewWindowBuilder::use_https_scheme を使用して https 方式を引き続き使用してください。

Tauri 1.0 アプリを Tauri 2.0 に移行する場合に発生する可能性のある一般的な移行処理の流れです。

@tauri-apps/api/tauri モジュールは、 「@tauri-apps/api/core」に改称されています。 ここでの作業は、モジュール・インポート文を変更するだけです:

import { invoke } from "@tauri-apps/api/tauri"
import { invoke } from "@tauri-apps/api/core"

Rust の App::get_cli_matches API と JavaScript の @tauri-apps/api/cli API は削除されました。代わりに「@tauri-apps/plugin-cli プラグイン」を使用して下さい:

  1. Cargo に依存関係を追加します:
Cargo.toml
[dependencies]
tauri-plugin-cli = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_cli::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-cli": "^2.0.0"
}
}
import { getMatches } from '@tauri-apps/plugin-cli';
const matches = await getMatches();

Rust の App::clipboard_manager API と AppHandle::clipboard_manager API、および JavaScript の @tauri-apps/api/clipboard API は削除されました。代わりに「@tauri-apps/plugin-clipboard-manager プラグイン」を使用して下さい:

[dependencies]
tauri-plugin-clipboard-manager = "2"
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_clipboard_manager::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-clipboard-manager": "^2.0.0"
}
}
import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager';
await writeText('Tauri is awesome!');
assert(await readText(), 'Tauri is awesome!');

Rust の tauri::api::dialog API と JavaScript の @tauri-apps/api/dialog API は削除されました。代わりに「@tauri-apps/plugin-dialog プラグイン」を使用してください:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-dialog = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_dialog::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-dialog": "^2.0.0"
}
}
import { save } from '@tauri-apps/plugin-dialog';
const filePath = await save({
filters: [
{
name: 'Image',
extensions: ['png', 'jpeg'],
},
],
});

Rust の App::get_cli_matches API と JavaScript の @tauri-apps/api/fs API は削除されました。代わりに、Rust には「std::fs」を、JavaScript には「@tauri-apps/plugin-fs プラグイン」を使用してください:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-fs = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_fs::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-fs": "^2.0.0"
}
}
import { mkdir, BaseDirectory } from '@tauri-apps/plugin-fs';
await mkdir('db', { baseDir: BaseDirectory.AppLocalData });

いくつかの関数と型が改称または削除されています:

  • Dir enum エイリアス(列挙型・別名)は削除されました。「BaseDirectory」を使用して下さい。
  • FileEntryFsBinaryFileOptionFsDirOptionsFsOptionsFsTextFileOption、および BinaryFileContents のインターフェースと型エイリアスは削除され、各関数に適した新しいインターフェースに置き換えられました。
  • createDir は「mkdir」に改称されました。
  • readBinaryFile は「readFile」に改称されました。
  • removeDir は削除され、「remove」に置き換えられました。
  • removeFile は削除され、「remove」に置き換えられました。
  • renameFile は削除され、「rename」に置き換えられました。
  • writeBinaryFile は「writeFile」に改称されました。

Global Shortcut プラグインへの移行

Section titled “Global Shortcut プラグインへの移行”

Rust の App::global_shortcut_manager API と AppHandle::global_shortcut_manager API、および JavaScript の @tauri-apps/api/global-shortcut API は削除されました。代わりに「@tauri-apps/plugin-global-shortcut」プラグインを使用して下さい:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
tauri-plugin-global-shortcut = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_global_shortcut::Builder::default().build())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-global-shortcut": "^2.0.0"
}
}
import { register } from '@tauri-apps/plugin-global-shortcut';
await register('CommandOrControl+Shift+C', () => {
console.log('Shortcut triggered');
});

Rust の tauri::api::http および JavaScript の @tauri-apps/api/http API は削除されました。代わりに「@tauri-apps/plugin-http プラグイン」を使用して下さい。

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-http = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_http::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-http": "^2.0.0"
}
}
import { fetch } from '@tauri-apps/plugin-http';
const response = await fetch(
'https://raw.githubusercontent.com/tauri-apps/tauri/dev/package.json'
);

Rust の tauri::api::notification API および JavaScript の @tauri-apps/api/notification API は削除されました。代わりに「@tauri-apps/plugin-notification プラグイン」を使用して下さい:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-notification = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_notification::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-notification": "^2.0.0"
}
}
import { sendNotification } from '@tauri-apps/plugin-notification';
sendNotification('Tauri is awesome!');

Rust の Menu API は tauri::menu モジュールに移動され、muda クレート を使用するようにリファクタリング(最適化)されました。

tauri::Menu ではなく、「tauri::menu::MenuBuilder」を使用して下さい。このコンストラクターは、引数として Manager インスタンス(AppAppHandleWebviewWindow のいずれか)を受け取ることに注意してください。

use tauri::menu::MenuBuilder;
tauri::Builder::default()
.setup(|app| {
let menu = MenuBuilder::new(app)
.copy()
.paste()
.separator()
.undo()
.redo()
.text("open-url", "Open URL")
.check("toggle", "Toggle")
.icon("show-app", "Show App", app.default_window_icon().cloned().unwrap())
.build()?;
Ok(())
})

tauri::MenuItem ではなく、「tauri::menu::PredefinedMenuItem」を使用して下さい。

use tauri::menu::{MenuBuilder, PredefinedMenuItem};
tauri::Builder::default()
.setup(|app| {
let menu = MenuBuilder::new(app).item(&PredefinedMenuItem::copy(app)?).build()?;
Ok(())
})

tauri::CustomMenuItem の代わりに「tauri::menu::MenuItemBuilder」を使用します:

use tauri::menu::MenuItemBuilder;
tauri::Builder::default()
.setup(|app| {
let toggle = MenuItemBuilder::new("Toggle").accelerator("Ctrl+Shift+T").build(app)?;
Ok(())
})

tauri::Submenu の代わりに「tauri::menu::SubmenuBuilder」を使用します:

use tauri::menu::{MenuBuilder, SubmenuBuilder};
tauri::Builder::default()
.setup(|app| {
let submenu = SubmenuBuilder::new(app, "Sub")
.text("Tauri")
.separator()
.check("Is Awesome")
.build()?;
let menu = MenuBuilder::new(app).item(&submenu).build()?;
Ok(())
})

tauri::Builder::menu は、メニュー処理に Manager インスタンスの構築を必要とするため、「クロージャ closure」を受け取ります。詳しくは、ドキュメント(関連文書)《英語版》 を参照して下さい。

Section titled “Menu Events(メニュー・イベント)”

Rust の tauri::Builder::on_menu_event API は削除されました。代わりに「tauri::App::on_menu_event」または「tauri::AppHandle::on_menu_event」を使用して下さい:

use tauri::menu::{CheckMenuItemBuilder, MenuBuilder, MenuItemBuilder};
tauri::Builder::default()
.setup(|app| {
let toggle = MenuItemBuilder::with_id("toggle", "Toggle").build(app)?;
let check = CheckMenuItemBuilder::new("Mark").build(app)?;
let menu = MenuBuilder::new(app).items(&[&toggle, &check]).build()?;
app.set_menu(menu)?;
app.on_menu_event(move |app, event| {
if event.id() == check.id() {
println!("`check` triggered, do something! is checked? {}", check.is_checked().unwrap());
} else if event.id() == "toggle" {
println!("toggle triggered!");
}
});
Ok(())
})

注意: どのメニュー項目が選択されたのかを確認する方法には二通りあることに注意してください。ひとつは「項目」をイベント・ハンドラー・クロージャーに移動して ID を比較するやりかた、もうひとつは「項目」を with_id コンストラクターを通してカスタム ID を定義し、その ID 文字列を用いて比較するやりかたです。

Rust の tauri::api::os API と JavaScript の @tauri-apps/api/os API は削除されました。代わりに「@tauri-apps/plugin-os プラグイン」を使用して下さい:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-os = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_os::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-os": "^2.0.0"
}
}
import { arch } from '@tauri-apps/plugin-os';
const architecture = await arch();

Rust の tauri::api::process API および JavaScript の @tauri-apps/api/process API は削除されました。代わりに「@tauri-apps/plugin-process プラグイン」を使用して下さい:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-process = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_process::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-process": "^2.0.0"
}
}
import { exit, relaunch } from '@tauri-apps/plugin-process';
await exit(0);
await relaunch();

Rust の tauri::api::shell API および JavaScript の @tauri-apps/api/shell API は削除されました。代わりに「@tauri-apps/plugin-shell プラグイン」を使用して下さい:

  1. Cargo へ依存関係を追加:
Cargo.toml
[dependencies]
tauri-plugin-shell = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_shell::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-shell": "^2.0.0"
}
}
import { Command, open } from '@tauri-apps/plugin-shell';
const output = await Command.create('echo', 'message').execute();
await open('https://github.com/tauri-apps/tauri');

Rust の SystemTray API は表記の一貫性確保のために TrayIcon に改称されています。新しい API は、Rust の「tray モジュール」で参照できます。

tauri::SystemTray の代わりに「tauri::tray::TrayIconBuilder」を使用して下さい。

let tray = tauri::tray::TrayIconBuilder::with_id("my-tray").build(app)?;

詳しくは TrayIconBuilder《英語版文書》 の項を参照して下さい。

tauri::SystemTrayMenu ではなく「tauri::menu::Menu」を、tauri::SystemTraySubmenu ではなく「tauri::menu::Submenu」を、そして tauri::SystemTrayMenuItem の代わりには「tauri::menu::PredefinedMenuItem」を使用して下さい。

tauri::SystemTray::on_event は「tauri::tray::TrayIconBuilder::on_menu_event」と「tauri::tray::TrayIconBuilder::on_tray_icon_event」とに分割されました:

use tauri::{
menu::{MenuBuilder, MenuItemBuilder},
tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent},
};
tauri::Builder::default()
.setup(|app| {
let toggle = MenuItemBuilder::with_id("toggle", "Toggle").build(app)?;
let menu = MenuBuilder::new(app).items(&[&toggle]).build()?;
let tray = TrayIconBuilder::new()
.menu(&menu)
.on_menu_event(move |app, event| match event.id().as_ref() {
"toggle" => {
println!("toggle clicked");
}
_ => (),
})
.on_tray_icon_event(|tray, event| {
if let TrayIconEvent::Click {
button: MouseButton::Left,
button_state: MouseButtonState::Up,
..
} = event
{
let app = tray.app_handle();
if let Some(webview_window) = app.get_webview_window("main") {
let _ = webview_window.unminimize();
let _ = webview_window.show();
let _ = webview_window.set_focus();
}
}
})
.build(app)?;
Ok(())
})

Rust の tauri::updater API および JavaScript の @tauri-apps/api-updater API は削除されました。「@tauri-apps/plugin-updater」を使用してカスタム・アップデーター・ターゲットを設定するには:

  1. Cargo へ依存関係を追加:
[dependencies]
tauri-plugin-updater = "2"
  1. JavaScript または Rust のプロジェクトでの使用:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_updater::Builder::new().build())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-updater": "^2.0.0"
}
}
import { check } from '@tauri-apps/plugin-updater';
import { relaunch } from '@tauri-apps/plugin-process';
const update = await check();
if (update?.available) {
console.log(`Update to ${update.version} available! Date: ${update.date}`);
console.log(`Release notes: ${update.body}`);
await update.downloadAndInstall();
// `process`プラグインが必要です
await relaunch();
}

Rust の tauri::api::path モジュール機能および tauri::PathResolver は「tauri::Manager::path」に移動されました:

use tauri::{path::BaseDirectory, Manager};
tauri::Builder::default()
.setup(|app| {
let home_dir_path = app.path().home_dir().expect("failed to get home dir");
let path = app.path().resolve("path/to/something", BaseDirectory::Config)?;
Ok(())
})

Rust 関連では、Window の名称が「WebviewWindow」に、そのビルダー名 WindowBuilder が「WebviewWindowBuilder」に、WindowUrl の名称が「WebviewUrl」に変更されました。

さらには、上位の「ウィンドウ 親 API」をサポートするために、Manager::get_window 関数は「get_webview_window」に、ウィンドウズの parent_window API が「parent_raw」に改称されています。

JavaScript 関連では、WebviewWindow クラスが @tauri-apps/api/webviewWindow パスにエクスポートされるようになりました。

onMenuClicked 関数は削除されましたが、代わりに JavaScript でメニューを作成するとメニュー・イベントを捕捉できます。

埋め込み追加ファイルの移行(リソース)

Section titled “埋め込み追加ファイルの移行(リソース)”

JavaScript 関連では、File System プラグインへの移行 を忘れずに実施してください。 さらに、下記の アクセス権の移行 の項で、「バージョン 1」許可リストに加えられた変更内容にも注意してください。

Rust 関連では、Tauri Manger への Path の移行 を必ず実行してください。

埋め込み外部バイナリの移行(サイドカー・コンテナ)

Section titled “埋め込み外部バイナリの移行(サイドカー・コンテナ)”

Tauri バージョン 1(v1)では、外部バイナリとその引数はアクセス許可リストで定義されていました。バージョン 2(v2)では、新しいアクセス許可システムを使用します。詳細については、アクセス権の移行 の項を参照してください。

JavaScript 関連では、Shell プラグインへの移行 を必ず実行して下さい。

Rust 関連では、tauri::api::process API が削除されています。代わりに「 tauri_plugin_shell::ShellExt API」および「tauri_plugin_shell::process::CommandEvent API」を使用してください。使用法については、「外部バイナリの埋め込み」ガイドの章を参照して下さい。

「process-command-api」機能フラグは バージョン 2(v2)で削除されましたので、外部バイナリの実行に際して、この機能を Tauri 設定で定義しておく必要がなくなりました。

バージョン 1 のアクセス許可リスト(「v1 許可リスト」)は、全く新しいアクセス許可システムに書き直されました。これにより、個々のプラグインで機能し、「マルチウィンドウ」と「リモート URL サポート」で、より柔軟な設定が可能になりました。 この新しいアクセス許可システムは「アクセス制御リスト(ACL)」のように機能し、コマンドの許可/拒否、特定のウィンドウやドメインの組合せに対する許可割り当て、アクセス範囲の定義などが行なえます。

自分のアプリへのアクセス権を設定するには、src-tauri/capabilities フォルダ内に「機能設定ファイル(capability file)」を作成します。すると、Tauri があなたに代わって他のすべてを自動的に設定します。

migrate CLI コマンドは、「v1 許可リスト」を自動的に解析し、関連する機能設定ファイルを生成します。

アクセス許可と機能の詳細については、「セキュリティ関連文書」を参照してください。

【※ この日本語版は、「Jun 15, 2026 英語版」に基づいています】


© 2026 Tauri Contributors. CC-BY / MIT