コンテンツにスキップ
Tauri

Updater(アップデート)

《訳注》

Plugin 説明内容の英語表記部分について Plugin の各章は、原文データからページ内容の一部が自動生成されているため、英語表記のままの部分があります。

更新サーバーまたは静的 JSON を使用して Tauri アプリを自動的に更新します。

This plugin requires a Rust version of at least 1.77.2

Platform Level Notes
windows
linux
macos
android
ios

はじめに、「Tauri updater」プラグインをインストールしてください。

自分のプロジェクトのパッケージ・マネージャーを使用して依存関係を追加します:

npm run tauri add updater

Tauri の「updater」プラグインでは、更新プログラム(アップデート)が信頼できるソースからのものであることを確認するために「署名」を必要としています。これは無効にできません。

更新プログラムの署名には、二つの「鍵(キー)」が必要です:

  1. 公開鍵: アーティファクト(成果物)を検証するためにインストール前に tauri.conf.json に設定される鍵です。「秘密鍵」が安全に保護されているかぎり、この「公開鍵」を安全にアップロードして共有することができます。
  2. 秘密鍵: あなたのインストーラー・ファイルの署名に使用される鍵です。この鍵は絶対に他人と共有しないでください。なお、この鍵を紛失した場合、既にそのアプリをインストールしているユーザーに対して新しいアップデートを公開できなくなります。この鍵は安全な場所に保管しておいてください。

この二つの鍵を生成するために、Tauri CLI は「signer generate」コマンドを提供しています。これを実行すると、ホーム・フォルダにその鍵が作成されます:

npm run tauri signer generate -- -w ~/.tauri/myapp.key

更新プログラムのアーティファクトをビルドする際には、上記で生成した「秘密鍵」を環境変数に含める必要があります。.env ファイルでは機能しません

export TAURI_SIGNING_PRIVATE_KEY="Path or content of your private key"
# optionally also add a password
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=""

その後、通常どおり Tauri ビルドを実行すると、Tauri によってアップデート・バンドルとその署名が生成されます。 生成されるファイルは、以下で設定される createUpdaterArtifacts の設定値によって異なります。

{
"bundle": {
"createUpdaterArtifacts": true
}
}

Linux では、Tauri は target/release/bundle/appimage/ フォルダ内に、通常の AppImage を作成します:

  • myapp.AppImage - 標準のアプリ・バンドル。アップデーターによって再利用されます。
  • myapp.AppImage.sig - アップデーター・バンドルの署名。

macOS では、Tauri は target/release/bundle/macos/ フォルダ内のアプリケーション・バンドルから .tar.gz アーカイブを作成します:

  • myapp.app - 標準のアプリ・バンドル。
  • myapp.app.tar.gz - アップデーター・バンドル。
  • myapp.app.tar.gz.sig - 更新バンドルの署名。

Windows では、Tauri は target/release/bundle/msi/ および target/release/bundle/nsis フォルダ内に通常の MSI および NSIS インストーラを作成します:

  • myapp-setup.exe - 標準のアプリ・バンドル。アップデーターによって再利用されます。
  • myapp-setup.exe.sig - 更新バンドルの署名。
  • myapp.msi - 標準のアプリ・バンドル。アップデーターによって再利用されます。
  • myapp.msi.sig - 更新バンドルの署名。

「Updater」プラグインが動作を開始するためには、以下の形式で tauri.conf.json を設定します。

項目 Keys内容説明 Description
createUpdaterArtifactsこの項目を「true」に設定すると、Tauri のアプリ・バンドラにアップデーター・アーティファクト(更新成果物)を作成するように指示します。自分のアプリを「古い Tauri バージョン」から移行する場合には、ここを true ではなく「"v1Compatible"」に設定してください。この設定項目は v3 で削除される予定です ので、あなたのアプリのユーザーが全員 v2 に移行したときには、必ず true に変更してください。
pubkeyこれは、上記の手順で「Tauri CLI から生成された公開鍵」でなければなりません。「ファイル・パス」ではありません
endpointsこの値は、「エンドポイント URL の文字列の配列」でなければなりません。本番環境では「TLS」が強制されます。Tauri は、ステータス・コード「non-2XX」(2xx以外)が返された場合にのみ、次の URL に進みます!  《訳注: TLS = Transport Layer Security トランスポート層セキュリティ》
dangerousInsecureTransportProtocolこの項目を「true」に設定すると、「Updater」プラグインが HTTPS 以外のエンドポイントを受け入れられるようになります。この設定は注意して使用してください! 

各アップデータ URL には次の動的変数を含めることができ、これにより、更新が利用可能かどうかをサーバー側で判断できます。

  • {{current_version}}: 「現行のバージョン」= アップデートを要求しているアプリのバージョン。
  • {{target}}: 「ターゲット」= オペレーティング・システム名(linuxwindowsdarwin のいずれか)。
  • {{arch}}: 「CPU アーキテクチャ」= 使用しているシステムのアーキテクチャ(x86_64i686aarch64armv7 のいずれか)
tauri.conf.json
{
"bundle": {
"createUpdaterArtifacts": true
},
"plugins": {
"updater": {
"pubkey": "CONTENT FROM PUBLICKEY.PEM",
"endpoints": [
"https://releases.myapp.com/{{target}}/{{arch}}/{{current_version}}",
// または静的な github json ファイル
"https://github.com/user/repo/releases/latest/download/latest.json"
]
}
}
}

Windows では、更新プログラムのインストール方法を変更するための「オプションの "installMode" 追加設定」があります。

tauri.conf.json
{
"plugins": {
"updater": {
"windows": {
"installMode": "passive"
}
}
}
}
  • "passive": 「おまかせモード」《原意は”受動”》。進行状況バーのついた小さなウィンドウを表示します。更新プログラム(アップデート)はユーザーの操作を必要とせずにインストールされます。一般的に推奨されるデフォルトのモードです。
  • "basicUi": 「基本 UI モード」。インストールを完了するにはユーザーの操作を必要とする基本的なユーザー・インターフェイスが表示されます。
  • "quiet": 「目隠しモード」《原意は”静謐”》。ユーザーへの進捗状況のフィードバックはありません。このモードでは、インストーラー自体が管理者権限を要求できないため、ユーザー全部を対象とした一括インストール、またはアプリ自体が既に管理者権限で実行されている場合にのみ機能します。一般的には推奨されません。

「updater」プラグインは二つの方法で使用できます。「動的更新サーバー」を使用する、または、「静的 JSON ファイル」を使用する(S3 や GitHub Gist などのサービスで使用する場合)、のいずれかです。

「静的」モードを使用する場合は、必要な情報を含んでいる JSON ファイルを返すだけです。

項目 Keys内容説明 Description
version「バージョン」。有効な SemVer(セマンティック・バージョン形式)である必要があります。先頭に v があってもなくてもかまいません。つまり、1.0.0v1.0.0 の両方が有効です。
notes「注記」。更新プログラムに関する覚書。
pub_date「発行日付」。この日付データが存在する場合、RFC 3339 形式に従って記載する必要があります。
platforms「プラットフォーム」。各プラットフォームのキー項目は OS-ARCH 形式で、「OS 部分」は linuxdarwinwindows のいずれか、「ARCH 部分」は x86_64aarch64i686armv7 のいずれかです。
signature「署名」。生成された .sig ファイルの内容は、ビルドごとに変更される可能性があります。パスまたは URL では機能しません。

必須のキー項目は "version""platforms.[target].url""platforms.[target].signature" で、その他はオプション(任意指定)です。

{
"version": "",
"notes": "",
"pub_date": "",
"platforms": {
"linux-x86_64": {
"signature": "",
"url": ""
},
"windows-x86_64": {
"signature": "",
"url": ""
},
"darwin-x86_64": {
"signature": "",
"url": ""
}
}
}

Tauri は、バージョン項目欄をチェックする前にファイル全体を検証するため、既存のすべてのプラットフォーム設定が有効かつ完全であることを確認してください。

動的更新サーバーを使用する場合、Tauri はサーバーの指示に従います。「内部バージョン・チェック」を無効にするには、このプラグインのバージョン比較を上書きします。これにより、サーバーから送信されたバージョンがインストールされます(アプリをロールバックする必要がある場合に便利です)。

サーバーは、上記の「endpoint URL」で定義された変数を使用して、更新が必要かどうかを判断できます。さらにデータが必要な場合は、必要に応じて Rust のリクエスト・ヘッダー を追加可能です。

利用可能な更新がない場合には、サーバーはステータス・コード「204 No Content」(204 該当なし)で応答するはずです。

更新が必要な場合、サーバーはステータス・コード「200 OK」と以下の形式の「JSON 応答」を返信する必要があります。

項目 Keys内容説明 Description
version「バージョン」 この項目は有効な SemVer 形式でなければなりません (先頭に v があってもなくても構いませ) 。つまり、1.0.0v1.0.0 の両方が有効です。
notes「注記」 アップデート(更新内容)に関する説明。
pub_date「発行日」 この日付が設定されている場合には、その日付は RFC 3339 の書式に従ってフォーマットする必要があります。
url「URL」 この項目は更新バンドルへの有効な URL である必要があります。
signature「署名」 生成された .sig ファイルの内容。この項目はビルドごとに変わる可能性があります。パスまたは URL では機能しません。

入力必須項目は "url""version""signature" です。その他は任意記入です。

{
"version": "",
"pub_date": "",
"url": "",
"signature": "",
"notes": ""
}

更新の有無を確認してインストールするためのデフォルト API は、設定されたエンドポイントを利用し、JavaScript コードと Rust コードの両方からアクセスできます。

import { check } from '@tauri-apps/plugin-updater';
import { relaunch } from '@tauri-apps/plugin-process';
const update = await check();
if (update) {
console.log(
`found update ${update.version} from ${update.date} with notes ${update.body}`
);
let downloaded = 0;
let contentLength = 0;
// あるいは、update.download()と update.install() を別々に呼び出すこともできます。
await update.downloadAndInstall((event) => {
switch (event.event) {
case 'Started':
contentLength = event.data.contentLength;
console.log(`started downloading ${event.data.contentLength} bytes`);
break;
case 'Progress':
downloaded += event.data.chunkLength;
console.log(`downloaded ${downloaded} from ${contentLength}`);
break;
case 'Finished':
console.log('download finished');
break;
}
});
console.log('update installed');
await relaunch();
}

詳細については、JavaScript API ドキュメント(英語版)を参照してください。

アップデートをインストールした直後にアプリを再起動させる必要はありません。 ユーザー自身が手動でアプリを再起動するのを待ったり、再起動のタイミングを選択させるような表示を行なったりすることで、アップデートの処理方法を選択できます。

更新有無を確認してダウンロードするときに、「カスタム・リクエスト・タイムアウト」(ユーザー指定の制限時間)、「プロキシ」、および「リクエスト・ヘッダー」を定義できます。

import { check } from '@tauri-apps/plugin-updater';
const update = await check({
proxy: '<proxy url>',
timeout: 30000 /* ミリ秒 */,
headers: {
Authorization: 'Bearer <token>',
},
});

「updater」API は、「updater」の設定を実行時に行なうことが可能であるという柔軟性も備えています。 セキュリティ上の理由から、一部の API は Rust でのみ使用できます。

実行時に更新有無の確認を行なう「URL」を設定すると、個別のリリース・チャネルなどといった、より動的な更新が可能になります:

use tauri_plugin_updater::UpdaterExt;
let channel = if beta { "beta" } else { "stable" };
let update_url = format!("https://{channel}.myserver.com/{{{{target}}}}-{{{{arch}}}}/{{{{current_version}}}}");
let update = app
.updater_builder()
.endpoints(vec![update_url])?
.build()?
.check()
.await?;

実行時に「公開鍵」を設定すると、「キー・ローテーション・ロジック」を実装するのに役立ちます。 これは、プラグイン・ビルダーまたは「updater」ビルダーのいずれかによって設定できます:

tauri_plugin_updater::Builder::new().pubkey("<your public key>").build()
use tauri_plugin_updater::UpdaterExt;
let update = app
.updater_builder()
.pubkey("<your public key>")
.build()?
.check()
.await?;

デフォルトでは、updater は {{target}} および {{arch}} 変数を使用して、どのアップデート・アセット(更新ファイル)を配信する必要があるのかを決定します。 自分のアップデートに関する追加の情報が必要な場合(たとえば、「ユニバーサル macOS バイナリ」オプションを配布する場合とか、「ビルド・フレーバー」を増やす場合など)には、 カスタム・ターゲットを設定できます。

import { check } from '@tauri-apps/plugin-updater';
const update = await check({
target: 'macos-universal',
});

デフォルトでは、Tauri は更新バージョンが現在のアプリ・バージョンより大きいかどうかを確認し、更新する必要があるかどうかを確認します。 ダウングレードに対応するには、「updater」ビルダーの version_comparator API(バージョン比較 API)を使用する必要があります:

use tauri_plugin_updater::UpdaterExt;
let update = app
.updater_builder()
.version_comparator(|current, update| {
// デフォルトの比較条件: `update.version > current`
update.version != current
})
.build()?
.check()
.await?;

Windows インストーラーの制限により、Tauri は Windows に更新プログラムをインストールする前にアプリケーションを自動的に終了します。 終了処理が起動する前に別のアクションを実行するには、on_before_exit 関数を使用します:

use tauri_plugin_updater::UpdaterExt;
let update = app
.updater_builder()
.on_before_exit(|| {
println!("app is about to exit on Windows!");
}) // メッセージ「Windows アプリを終了します!」
.build()?
.check()
.await?;

デフォルトでは、潜在的に危険なプラグイン・コマンドとそのスコープ(有効範囲)はすべてブロックされており、アクセスできません。これらを有効にするには、capabilities 設定でアクセス権限を変更する必要があります。

詳細については「セキュリティ・レベル Capabilities」の章を参照してください。また、プラグインのアクセス権限を設定するには「プライグン・アクセス権の使用」の章のステップ・バイ・ステップ・ガイドを参照してください。

src-tauri/capabilities/default.json
{
"permissions": [
...,
"updater:default",
]
}

Default Permission

This permission set configures which kind of updater functions are exposed to the frontend.

Granted Permissions

The full workflow from checking for updates to installing them is enabled.

This default permission set includes the following:

  • allow-check
  • allow-download
  • allow-install
  • allow-download-and-install

Permission Table

Identifier Description

updater:allow-check

Enables the check command without any pre-configured scope.

updater:deny-check

Denies the check command without any pre-configured scope.

updater:allow-download

Enables the download command without any pre-configured scope.

updater:deny-download

Denies the download command without any pre-configured scope.

updater:allow-download-and-install

Enables the download_and_install command without any pre-configured scope.

updater:deny-download-and-install

Denies the download_and_install command without any pre-configured scope.

updater:allow-install

Enables the install command without any pre-configured scope.

updater:deny-install

Denies the install command without any pre-configured scope.

【※ この日本語版は、「Nov 28, 2025 英語版」に基づいています】


© 2025 Tauri Contributors. CC-BY / MIT