Tauri 1.0 からのアップグレード
ここでは、Tauri 1.0 アプリケーションを Tauri 2.0 にアップグレードする手順を説明します。
Tauri のモバイル・インターフェイスは、そのプロジェクトが共有ライブラリを出力するようにしなければなりません。既存のアプリケーションをモバイル向けに変更する場合には、デスクトップ実行可能ファイルとともにそのようなライブラリ・ファイルを生成するようにクレートを変更する必要があります。
- ライブラリを生成するために 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 migratemigrate コマンドの詳細については、コマンドライン・インターフェース・リファレンス を参照してください。
Tauri 1.0 から Tauri 2.0 への変更内容の概要は以下のとおりです:
package > productNameとpackage > versionをトップレベル・オブジェクトへ移動。- バイナリ名が自動的には
productNameと一致するように変更されなくなったため、productNameと一致するトップレベル・オブジェクトにmainBinaryName文字列を追加する必要があります。 packageを削除。taurikey をappに改称。tauri > allowlistを削除。許可の移行 を参照。tauri > allowlist > protocol > assetScopeをapp > security > assetProtocol > scopeへ移動。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に改称。
- 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::Command、tauri::api::shellおよびtauri::Manager::shell_scopeの各 API は削除されました。代わりにtauri-plugin-shellを使用してください。 [移行先](#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 は削除されました。移行先
@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 として入手可能だったものです。
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
「イベント・システム」は、より使いやすくなるように再設計されました。イベント・ソースにではなく、イベント・ターゲットに依拠する、より簡潔な実装になっています。
emit機能は、すべてのイベント・リスナーにイベントを発するようになりました。- 特定のターゲットにイベントを発生させる、新しい
emit_to機能を追加しました。 emit_filterは、ウィンドウではなく、EventTargetに基づいてフィルタリングするようになりました。listen_globalをlisten_anyに改称。フィルターやターゲットに関係なく、すべてのイベントの応答を待機するようになりました。
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 および 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(()) })}Rust の App::clipboard_manager と AppHandle::clipboard_manager、および 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(()) })Rust の tauri::api::dialog および 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| { // do something with the optional file path here // the file path is `None` if the user closed the dialog });
app.dialog().message("Tauri is Awesome!").show(); Ok(()) })Rust の App::get_cli_matches および @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 関数を使用して下さい。
Rust の App::global_shortcut_manager と AppHandle::global_shortcut_manager および 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| { // register a global shortcut // on macOS, the Cmd key is used // on Windows and Linux, the Ctrl key is used app.global_shortcut().register("CmdOrCtrl+Y")?; Ok(()) })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」のドキュメントを確認して下さい。
Rust の tauri::api::notification および 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(()) })}Rust の Menu API は tauri::menu モジュールに移動され、muda クレート を使用するようにリファクタリング(最適化)されました。
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::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 インスタンスが必要であるため、クロージャを受け取るようになりました。詳しくは、ドキュメント(関連文書) を参照して下さい。
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 および 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(()) })}Rust の tauri::api::process および 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| { // exit the app with a status code app.handle().exit(1); // restart the app app.handle().restart(); Ok(()) })}Rust の tauri::api::shell および 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(()) })}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 および JavaScript API を使用し、更新のチェックおよびインストールを行なってください。
Rust の tauri::updater および 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(); // requires the `process` plugin 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())}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 でメニューを作成するとメニュー・イベントを捕捉できます。
JavaScript 関連では、File System プラグインの移行 を実行することを忘れないでください。 さらに、許可の移行 の項で、「バージョン 1」許可リストに加えられた変更の内容にも注意してください。
Rust 関連では、Path to Tauri Manger の移行 の説明内容を必ず実行してください。
Tauri バージョン 1(v1)では、外部バイナリとその引数は許可リストで定義されていました。バージョン 2(v2)では、新しい許可システムを使用します。詳細については、許可の移行 を参照してください。
JavaScript 関連では、Shell プラグインの移行 の内容を必ず実行して下さい。
Rust 関連では、tauri::api::process API が削除されています。代わりに tauri_plugin_shell::ShellExt および 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 許可リストを自動的に解析し、関連する機能ファイルを生成します。
許可と機能の詳細については、セキュリティ関連文書を参照してください。
【※ この日本語版は、「Nov 13, 2024 英語版」に基づいています】
Doc-JP 2.00.00
© 2025 Tauri Contributors. CC-BY / MIT