Tauri 1.0 からのアップグレード
ここでは、Tauri 1.0 アプリケーションを Tauri 2.0 にアップグレードする手順を説明します。
モバイル向けの準備
Section titled “モバイル向けの準備”Tauri のモバイル・インターフェイスでは、あなたのプロジェクトが共有ライブラリを出力する必要があります。既にあるアプリケーションをモバイル向けにする場合には、デスクトップ用実行可能ファイルとともに同様のアーティファクト(ファイル)を生成するようにクレートを変更しなければなりません。
アーティファクト artifact。 プログラム開発過程で生み出される「成果物」を指す言葉。ソースコードやプログラム関連文書。
- ライブラリを生成するために Cargo マニフェストを変更します。以下のブロックを追加します:
[lib]name = "app_lib"crate-type = ["staticlib", "cdylib", "rlib"]-
src-tauri/src/main.rsの部分をsrc-tauri/src/lib.rsに変更します。このファイルは、デスクトップ版とモバイル版の両方で共有されます。 -
lib.rsにあるmain関数ヘッダーの名前を次のように変更します:
#[cfg_attr(mobile, tauri::mobile_entry_point)]pub fn run() { // ここに、あなたのコードを書きます}tauri::mobile_entry_point マクロは、あなたが作成した関数をモバイルで実行できるように準備するものです。
- 共用実行関数を呼び出す
main.rsファイルを再作成します。
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() { app_lib::run();}Tauri v2 CLI には、移行作業の大部分を自動化する「migrate コマンド」が含まれており、移行作業を完了するのに役立ちます。
npm install @tauri-apps/cli@latestnpm run tauri migrateyarn upgrade @tauri-apps/cli@latestyarn tauri migratepnpm update @tauri-apps/cli@latestpnpm tauri migratecargo install tauri-cli --version "^2.0.0" --lockedcargo tauri migrate「migrate コマンド」の詳細については、「コマンドライン・インターフェース・リファレンス」の章を参照してください。
Tauri 1.0 から Tauri 2.0 への変更内容の概要は以下のとおりです:
Tauri の設定
Section titled “Tauri の設定”package > productNameとpackage > versionをトップレベル・オブジェクトへ移動。- バイナリ名の
productNameに合わせた自動的な名前変更が行なわれなくなったため、productNameと一致するトップレベル・オブジェクトにmainBinaryName文字列を追加する必要があります。 packageを削除。taurikey を「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」に設定してください。詳しくは「アップデーター・ガイド」の章を参照してください。
- すでに配布されている v1 アプリをアップグレードする場合は、この項目を「
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 レファレンス」の章を参照してください。
Cargo の新機能
Section titled “Cargo の新機能”- linux-protocol-body: カスタム・プロトコル・リクエストのボディ部解析を有効化し、IPC(プロセス間通信)での利用を許可します。「webkit2gtk 2.40」が必要です。
削除された Cargo 機能
Section titled “削除された Cargo 機能”- 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」に改称。
Rust クレートの変更点
Section titled “Rust クレートの変更点”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::Command、tauri::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::FsScope、scope::GlobPatternおよびscope::FsScopeEventは削除されました。それぞれ、「scope::fs::Scope」、「scope::fs::Pattern」 および 「scope::fs::Event」 を使用して下さい。updaterモジュールは削除されました。代わりにtauri-plugin-updaterを使用して下さい。《移行処置の説明はこちら》Env.argsフィールドは削除されました。代わりに「Env.args_os」フィールドを使用して下さい。Menu、MenuEvent、CustomMenuItem、Submenu、WindowMenuEvent、MenuItemおよびBuilder::on_menu_eventの各 API は削除されました。《移行処置の説明はこちら》SystemTray、SystemTrayHandle、SystemTrayMenu、SystemTrayMenuItemHandle、SystemTraySubmenu、MenuEntryおよびSystemTrayMenuItemの各 API は削除されました。《移行処置の説明はこちら》
JavaScript API の変更点
Section titled “JavaScript API の変更点”@tauri-apps/api パッケージは、コア以外のモジュールを提供しなくなりました。これまでの tauri (現行では core)、path、event、window の各モジュールのみがエクスポートされます。その他はすべてプラグインに移動されました。
@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 として入手可能だったものです。
環境変数の変更点
Section titled “環境変数の変更点”Tauri CLI によって読み書きされる環境変数のほとんどは、整合性と間違い防止のために名称が変更されました:
TAURI_PRIVATE_KEY->TAURI_SIGNING_PRIVATE_KEYTAURI_KEY_PASSWORD->TAURI_SIGNING_PRIVATE_KEY_PASSWORDTAURI_SKIP_DEVSERVER_CHECK->TAURI_CLI_NO_DEV_SERVER_WAITTAURI_DEV_SERVER_PORT->TAURI_CLI_PORTTAURI_PATH_DEPTH->TAURI_CLI_CONFIG_DEPTHTAURI_FIPS_COMPLIANT->TAURI_BUNDLER_WIX_FIPS_COMPLIANTTAURI_DEV_WATCHER_IGNORE_FILE->TAURI_CLI_WATCHER_IGNORE_FILENAMETAURI_TRAY->TAURI_LINUX_AYATANA_APPINDICATORTAURI_APPLE_DEVELOPMENT_TEAM->APPLE_DEVELOPMENT_TEAMTAURI_PLATFORM->TAURI_ENV_PLATFORMTAURI_ARCH->TAURI_ENV_ARCHTAURI_FAMILY->TAURI_ENV_FAMILYTAURI_PLATFORM_VERSION->TAURI_ENV_PLATFORM_VERSIONTAURI_PLATFORM_TYPE->TAURI_ENV_PLATFORM_TYPETAURI_DEBUG->TAURI_ENV_DEBUG
イベント・システム
Section titled “イベント・システム”「イベント・システム」は、より使いやすくなるように再設計されました。イベント・ソースにではなく、イベント・ターゲットに依拠する、より簡潔な実装になっています。
- 「
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 での新しい配信元 URL
Section titled “Windows での新しい配信元 URL”Windows では、本番公開アプリのフロントエンド・ファイルは、https://tauri.localhost ではなく「http://tauri.localhost」でホストされるようになりました。このため、バージョン 1 で dangerousUseHttpScheme が使用されていない限り、「IndexedDB」、「LocalStorage」、および 「Cookies」はリセットされます。これを防ぐには、app > windows > useHttpsScheme を「true に設定」するか、WebviewWindowBuilder::use_https_scheme を使用して https 方式を引き続き使用してください。
移行手順の詳細
Section titled “移行手順の詳細”Tauri 1.0 アプリを Tauri 2.0 に移行する場合に発生する可能性のある一般的な移行処理の流れです。
コア・モジュールへの移行
Section titled “コア・モジュールへの移行”@tauri-apps/api/tauri モジュールは、 「@tauri-apps/api/core」に改称されています。
ここでの作業は、モジュール・インポート文を変更するだけです:
import { invoke } from "@tauri-apps/api/tauri"import { invoke } from "@tauri-apps/api/core"CLI プラグインへの移行
Section titled “CLI プラグインへの移行”Rust の App::get_cli_matches API と JavaScript の @tauri-apps/api/cli API は削除されました。代わりに「@tauri-apps/plugin-cli プラグイン」を使用して下さい:
- Cargo に依存関係を追加します:
[dependencies]tauri-plugin-cli = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_cli::init())}{ "dependencies": { "@tauri-apps/plugin-cli": "^2.0.0" }}import { getMatches } from '@tauri-apps/plugin-cli';const matches = await getMatches();fn main() { use tauri_plugin_cli::CliExt; tauri::Builder::default() .plugin(tauri_plugin_cli::init()) .setup(|app| { let cli_matches = app.cli().matches()?; Ok(()) })}Clipboard プラグインへの移行
Section titled “Clipboard プラグインへの移行”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())}{ "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!');use tauri_plugin_clipboard::{ClipboardExt, ClipKind};tauri::Builder::default() .plugin(tauri_plugin_clipboard::init()) .setup(|app| { app.clipboard().write(ClipKind::PlainText { label: None, text: "Tauri is awesome!".into(), })?; Ok(()) })Dialog プラグインへの移行
Section titled “Dialog プラグインへの移行”Rust の tauri::api::dialog API と JavaScript の @tauri-apps/api/dialog API は削除されました。代わりに「@tauri-apps/plugin-dialog プラグイン」を使用してください:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-dialog = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_dialog::init())}{ "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'], }, ],});use tauri_plugin_dialog::DialogExt;tauri::Builder::default() .plugin(tauri_plugin_dialog::init()) .setup(|app| { app.dialog().file().pick_file(|file_path| { // ここにオプションのファイルパスを使った処理を記述 // ユーザーがダイアログを閉じた場合、ファイルパスは「None」になります });
app.dialog().message("Tauri is Awesome!").show(); Ok(()) })File System プラグインへの移行
Section titled “File System プラグインへの移行”Rust の App::get_cli_matches API と JavaScript の @tauri-apps/api/fs API は削除されました。代わりに、Rust には「std::fs」を、JavaScript には「@tauri-apps/plugin-fs プラグイン」を使用してください:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-fs = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_fs::init())}{ "dependencies": { "@tauri-apps/plugin-fs": "^2.0.0" }}import { mkdir, BaseDirectory } from '@tauri-apps/plugin-fs';await mkdir('db', { baseDir: BaseDirectory.AppLocalData });いくつかの関数と型が改称または削除されています:
Direnum エイリアス(列挙型・別名)は削除されました。「BaseDirectory」を使用して下さい。FileEntry、FsBinaryFileOption、FsDirOptions、FsOptions、FsTextFileOption、およびBinaryFileContentsのインターフェースと型エイリアスは削除され、各関数に適した新しいインターフェースに置き換えられました。createDirは「mkdir」に改称されました。readBinaryFileは「readFile」に改称されました。removeDirは削除され、「remove」に置き換えられました。removeFileは削除され、「remove」に置き換えられました。renameFileは削除され、「rename」に置き換えられました。writeBinaryFileは「writeFile」に改称されました。
Rust では std::fs 関数を使用して下さい。
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」プラグインを使用して下さい:
- Cargo へ依存関係を追加:
[dependencies][target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]tauri-plugin-global-shortcut = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_global_shortcut::Builder::default().build())}{ "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');});use tauri_plugin_global_shortcut::GlobalShortcutExt;
tauri::Builder::default() .plugin( tauri_plugin_global_shortcut::Builder::new().with_handler(|app, shortcut| { println!("Shortcut triggered: {:?}", shortcut); }) .build(), ) .setup(|app| { // グローバルショートカットを登録 // macOS では、Cmd キーが用いられます // Windows と Linux では、 Ctrl キーが用いられます app.global_shortcut().register("CmdOrCtrl+Y")?; Ok(()) })HTTP プラグインへの移行
Section titled “HTTP プラグインへの移行”Rust の tauri::api::http および JavaScript の @tauri-apps/api/http API は削除されました。代わりに「@tauri-apps/plugin-http プラグイン」を使用して下さい。
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-http = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_http::init())}{ "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');use tauri_plugin_http::reqwest;
tauri::Builder::default() .plugin(tauri_plugin_http::init()) .setup(|app| { let response_data = tauri::async_runtime::block_on(async { let response = reqwest::get( "https://raw.githubusercontent.com/tauri-apps/tauri/dev/package.json", ) .await .unwrap(); response.text().await })?; Ok(()) })HTTP プラグインは「reqwest」を再エクスポートします。詳細については reqwest のドキュメント《英語版》を確認して下さい。
Notification プラグインへの移行
Section titled “Notification プラグインへの移行”Rust の tauri::api::notification API および JavaScript の @tauri-apps/api/notification API は削除されました。代わりに「@tauri-apps/plugin-notification プラグイン」を使用して下さい:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-notification = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_notification::init())}{ "dependencies": { "@tauri-apps/plugin-notification": "^2.0.0" }}import { sendNotification } from '@tauri-apps/plugin-notification';sendNotification('Tauri is awesome!');use tauri_plugin_notification::NotificationExt;use tauri::plugin::PermissionState;
fn main() { tauri::Builder::default() .plugin(tauri_plugin_notification::init()) .setup(|app| { if app.notification().permission_state()? == PermissionState::Unknown { app.notification().request_permission()?; } if app.notification().permission_state()? == PermissionState::Granted { app.notification() .builder() .body("Tauri is awesome!") .show()?; } Ok(()) })}Menu モジュールへの移行
Section titled “Menu モジュールへの移行”Rust の Menu API は tauri::menu モジュールに移動され、muda クレート を使用するようにリファクタリング(最適化)されました。
tauri::menu::MenuBuilder の使用
Section titled “tauri::menu::MenuBuilder の使用”tauri::Menu ではなく、「tauri::menu::MenuBuilder」を使用して下さい。このコンストラクターは、引数として Manager インスタンス(App、AppHandle、WebviewWindow のいずれか)を受け取ることに注意してください。
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::menu::PredefinedMenuItem の使用
Section titled “tauri::menu::PredefinedMenuItem の使用”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::menu::MenuItemBuilder の使用
Section titled “tauri::menu::MenuItemBuilder の使用”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::menu::SubmenuBuilder の使用
Section titled “tauri::menu::SubmenuBuilder の使用”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」を受け取ります。詳しくは、ドキュメント(関連文書)《英語版》 を参照して下さい。
Menu Events(メニュー・イベント)
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 文字列を用いて比較するやりかたです。
OS プラグインへの移行
Section titled “OS プラグインへの移行”Rust の tauri::api::os API と JavaScript の @tauri-apps/api/os API は削除されました。代わりに「@tauri-apps/plugin-os プラグイン」を使用して下さい:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-os = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_os::init())}{ "dependencies": { "@tauri-apps/plugin-os": "^2.0.0" }}import { arch } from '@tauri-apps/plugin-os';const architecture = await arch();fn main() { tauri::Builder::default() .plugin(tauri_plugin_os::init()) .setup(|app| { let os_arch = tauri_plugin_os::arch(); Ok(()) })}Process プラグインへの移行
Section titled “Process プラグインへの移行”Rust の tauri::api::process API および JavaScript の @tauri-apps/api/process API は削除されました。代わりに「@tauri-apps/plugin-process プラグイン」を使用して下さい:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-process = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_process::init())}{ "dependencies": { "@tauri-apps/plugin-process": "^2.0.0" }}import { exit, relaunch } from '@tauri-apps/plugin-process';await exit(0);await relaunch();fn main() { tauri::Builder::default() .plugin(tauri_plugin_process::init()) .setup(|app| { // ステータス・コードを表示してアプリを終了 app.handle().exit(1); // アプリを再起動 app.handle().restart(); Ok(()) })}Shell プラグインへの移行
Section titled “Shell プラグインへの移行”Rust の tauri::api::shell API および JavaScript の @tauri-apps/api/shell API は削除されました。代わりに「@tauri-apps/plugin-shell プラグイン」を使用して下さい:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-shell = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_shell::init())}{ "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');- URL を開きます。
use tauri_plugin_shell::ShellExt;
fn main() { tauri::Builder::default() .plugin(tauri_plugin_shell::init()) .setup(|app| { app.shell().open("https://github.com/tauri-apps/tauri", None)?; Ok(()) })}- 子プロセスを生成し、ステータス・コードを取得します。
use tauri_plugin_shell::ShellExt;
fn main() { tauri::Builder::default() .plugin(tauri_plugin_shell::init()) .setup(|app| { let status = tauri::async_runtime::block_on(async move { app.shell().command("which").args(["ls"]).status().await.unwrap() }); println!("`which` finished with status: {:?}", status.code()); Ok(()) })}- 子プロセスを生成し、その出力をキャプチャーします。
use tauri_plugin_shell::ShellExt;
fn main() { tauri::Builder::default() .plugin(tauri_plugin_shell::init()) .setup(|app| { let output = tauri::async_runtime::block_on(async move { app.shell().command("echo").args(["TAURI"]).output().await.unwrap() }); assert!(output.status.success()); assert_eq!(String::from_utf8(output.stdout).unwrap(), "TAURI"); Ok(()) })}- 子プロセスを生成し、そのイベントを非同期的に読み取ります。
use tauri_plugin_shell::{ShellExt, process::CommandEvent};
fn main() { tauri::Builder::default() .plugin(tauri_plugin_shell::init()) .setup(|app| { let handle = app.handle().clone(); tauri::async_runtime::spawn(async move { let (mut rx, mut child) = handle.shell().command("cargo") .args(["tauri", "dev"]) .spawn() .expect("Failed to spawn cargo");
let mut i = 0; while let Some(event) = rx.recv().await { if let CommandEvent::Stdout(line) = event { println!("got: {}", String::from_utf8(line).unwrap()); i += 1; if i == 4 { child.write("message from Rust\n".as_bytes()).unwrap(); i = 0; } } } }); Ok(()) })}Tray Icon モジュールへの移行
Section titled “Tray Icon モジュールへの移行”Rust の SystemTray API は表記の一貫性確保のために TrayIcon に改称されています。新しい API は、Rust の「tray モジュール」で参照できます。
tauri::tray::TrayIconBuilder の使用
Section titled “tauri::tray::TrayIconBuilder の使用”tauri::SystemTray の代わりに「tauri::tray::TrayIconBuilder」を使用して下さい。
let tray = tauri::tray::TrayIconBuilder::with_id("my-tray").build(app)?;詳しくは TrayIconBuilder《英語版文書》 の項を参照して下さい。
Menu への移行
Section titled “Menu への移行”tauri::SystemTrayMenu ではなく「tauri::menu::Menu」を、tauri::SystemTraySubmenu ではなく「tauri::menu::Submenu」を、そして tauri::SystemTrayMenuItem の代わりには「tauri::menu::PredefinedMenuItem」を使用して下さい。
Tray Events(トレイ・イベント)
Section titled “Tray Events(トレイ・イベント)”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(()) })Updater プラグインへの移行
Section titled “Updater プラグインへの移行”Rust の tauri::updater API および JavaScript の @tauri-apps/api-updater API は削除されました。「@tauri-apps/plugin-updater」を使用してカスタム・アップデーター・ターゲットを設定するには:
- Cargo へ依存関係を追加:
[dependencies]tauri-plugin-updater = "2"- JavaScript または Rust のプロジェクトでの使用:
fn main() { tauri::Builder::default() .plugin(tauri_plugin_updater::Builder::new().build())}{ "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();}アップデートを確認するには:
use tauri_plugin_updater::UpdaterExt;
fn main() { tauri::Builder::default() .plugin(tauri_plugin_updater::Builder::new().build()) .setup(|app| { let handle = app.handle(); tauri::async_runtime::spawn(async move { let response = handle.updater().check().await; }); Ok(()) })}カスタム・アップデーター・ターゲットを設定するには:
fn main() { let mut updater = tauri_plugin_updater::Builder::new(); #[cfg(target_os = "macos")] { updater = updater.target("darwin-universal"); } tauri::Builder::default() .plugin(updater.build())}Tauri Manager への Path の移行
Section titled “Tauri Manager への Path の移行”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(()) })新しい Window API への移行
Section titled “新しい Window API への移行”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 設定で定義しておく必要がなくなりました。
アクセス権の移行
Section titled “アクセス権の移行”バージョン 1 のアクセス許可リスト(「v1 許可リスト」)は、全く新しいアクセス許可システムに書き直されました。これにより、個々のプラグインで機能し、「マルチウィンドウ」と「リモート URL サポート」で、より柔軟な設定が可能になりました。 この新しいアクセス許可システムは「アクセス制御リスト(ACL)」のように機能し、コマンドの許可/拒否、特定のウィンドウやドメインの組合せに対する許可割り当て、アクセス範囲の定義などが行なえます。
自分のアプリへのアクセス権を設定するには、src-tauri/capabilities フォルダ内に「機能設定ファイル(capability file)」を作成します。すると、Tauri があなたに代わって他のすべてを自動的に設定します。
migrate CLI コマンドは、「v1 許可リスト」を自動的に解析し、関連する機能設定ファイルを生成します。
アクセス許可と機能の詳細については、「セキュリティ関連文書」を参照してください。
【※ この日本語版は、「Jun 15, 2026 英語版」に基づいています】
© 2026 Tauri Contributors. CC-BY / MIT