アプリケーションの更新
Electron アプリケーションの自動更新を行うには、いくつかの方法があります。 The easiest and officially supported one is taking advantage of the built-in Squirrel framework and Electron's autoUpdater module.
クラウドオブジェクトストレージ (サーバーレス) の使用
シンプルなサーバーレス更新フローの場合、Electron の autoUpdater モジュールは、最新リリースのメタデータを格納する静的ストレージの URL を指定すれば更新が利用可能かどうかを確認できます。
新しいリリースを利用可能にしたら、このメタデータをリリース本体と一緒にクラウドストレージに公開する必要があります。 メタデータの形式は macOS と Windows で異なります。
リリースのメタデータの公開
Electron Forge を使用する場合、macUpdateManifestBaseUrl を使用すれば ZIP Maker (macOS) から、remoteReleases を使用すれば Squirrel.Windows Maker (Windows) からメタデータのアーティファクトを公開することで、静的ファイルストレージの更新を設定できます。
エンドツーエンドの例については、Forge の S3 からの自動更新 のガイドを参照してください。
手動公開
macOS では、Squirrel.Mac は以下の JSON 形式の releases.json ファイルを読み取ることで更新を受信できます。
{
"currentRelease": "1.2.3",
"releases": [
{
"version": "1.2.1",
"updateTo": {
"version": "1.2.1",
"pub_date": "2023-09-18T12:29:53+01:00",
"notes": "These are some release notes innit",
"name": "1.2.1",
"url": "https://mycompany.example.com/myapp/releases/myrelease"
}
},
{
"version": "1.2.3",
"updateTo": {
"version": "1.2.3",
"pub_date": "2024-09-18T12:29:53+01:00",
"notes": "These are some more release notes innit",
"name": "1.2.3",
"url": "https://mycompany.example.com/myapp/releases/myrelease3"
}
}
]
}
Windows では、Squirrel.Windows はビルドの過程で生成された RELEASES ファイルを読み取ることで更新を受信できます。 このファイルには、更新する .nupkg 差分パッケージの詳細が記載されています。
B0892F3C7AC91D72A6271FF36905FEF8FE993520 electron-fiddle-0.36.3-full.nupkg 103298365
これらのファイルは、アプリのプラットフォームとアーキテクチャを考慮したフォルダー構造の配下の、リリースと同じディレクトリに配置する必要があります。
以下がその例です。
my-app-updates/
├─ darwin/
│ ├─ x64/
│ │ ├─ my-app-1.0.0-darwin-x64.zip
│ │ ├─ my-app-1.1.0-darwin-x64.zip
│ │ ├─ RELEASES.json
│ ├─ arm64/
│ │ ├─ my-app-1.0.0-darwin-arm64.zip
│ │ ├─ my-app-1.1.0-darwin-arm64.zip
│ │ ├─ RELEASES.json
├─ win32/
│ ├─ x64/
│ │ ├─ my-app-1.0.0-win32-x64.exe
│ │ ├─ my-app-1.0.0-win32-x64.nupkg
│ │ ├─ my-app-1.1.0-win32-x64.exe
│ │ ├─ my-app-1.1.0-win32-x64.nupkg
│ │ ├─ RELEASES
リリースのメタデータの読み取り
最も簡単なメタデータの利用方法は、autoUpdater を設定し、ドロップインの Node.js モジュールである update-electron-app をインストールすることです。これはネイティブのダイアログでユーザーにプロンプトを表示します。
静的ストレージの更新の場合は、updateSource.baseUrl 引数にリリースのメタデータファイルを格納するディレクトリを指定します。
const { updateElectronApp, UpdateSourceType } = require('update-electron-app')
updateElectronApp({
updateSource: {
type: UpdateSourceType.StaticStorage,
baseUrl: `https://my-bucket.s3.amazonaws.com/my-app-updates/${process.platform}/${process.arch}`
}
})
update.electronjs.org の利用
Electron チームは update.electronjs.org をメンテナンスしています。これは、Electron を自己更新するためのオープンソースウェブサービスです。 このサービスは次の条件を満すElectronアプリ用に設計されています。
- macOSまたはWindowsで動作するアプリである。
- アプリはGitHubのパブリックなリポジトリである。
- ビルドが GitHub の Releases で公開されている
- ビルドが コード署名 されている (macOS のみ)
このサービスを使う最も簡単な方法はupdate-electron-appをインストールすることで、update.electronjs.orgをつかって、事前調整されたNode.js モジュールを使う方法です。
Node.js パッケージマネージャを使用して、このモジュールをインストールします。
- npm
- Yarn
npm install update-electron-app
yarn add update-electron-app
そして、アプリのメインプロセスファイルから以下のようにアップデータを呼び出します。
require('update-electron-app')()
デフォルト設定で、このモジュールはアプリの起動時に更新をチェックします。または10分毎にチェックします。 アップデートがみつかったとき、自動的にバックグラウンドでダウンロードします。 そのダウンロードが完了したときに、ダイアログを表示してユーザにアプリの再起動許可を取ります。
設定をカスタマイズしたい場合、update-electron-app にオプションを渡す か、アップデートサービスを直接使用 できます。