概要
electron-updater によるデスクトップアプリの自動アップデート機能を完成させる。
バックエンドの実装(updater.ts)とPreload APIは既に完成しているが、以下の2点が未実装のため実際に動作しない状態。
現状
実装済み
- electron-updater インストール(
package.json)
- アップデート戦略ロジック(Major/Minor/Patch の使い分け)(
src/main/updater.ts)
- IPC ハンドラ(check / download / install)(
src/main/index.ts)
- Preload API の公開(
src/preload/index.ts)
- GitHub Releases への publish 設定(
package.json, .github/workflows/release.yml)
未実装
- macOS コード署名・公証(Notarization) — Gatekeeper によって自動更新がブロックされる
- レンダラー UI の通知コンポーネント —
update-available / update-downloaded イベントをユーザーに表示するコンポーネントが存在しない
タスク
1. macOS コード署名・公証の設定
GitHub Actions の release.yml に以下の Secrets / env vars を追加する。
必要な GitHub Secrets:
| Secret 名 |
内容 |
CSC_LINK |
Developer ID Application 証明書(.p12 を base64 エンコード) |
CSC_KEY_PASSWORD |
.p12 のパスワード |
APPLE_ID |
Apple ID(公証用) |
APPLE_APP_SPECIFIC_PASSWORD |
App-specific password |
APPLE_TEAM_ID |
Apple Developer Team ID |
release.yml への追記:
- name: Build and publish Electron app
working-directory: packages/desktop
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
DIST_ARGS: ${{ matrix.dist_args }}
run: pnpm dist $DIST_ARGS --publish always
package.json の electron-builder 設定に追記:
"mac": {
"notarize": true
}
2. レンダラー UI の通知コンポーネント実装
src/renderer/components/UpdateNotification.tsx を新規作成し、App.tsx に組み込む。
表示すべき状態:
| イベント |
表示内容 |
アクション |
update-available(Minor/Patch) |
バックグラウンドでダウンロード中 |
なし(自動) |
update-available(Major) |
v{version} が利用可能 |
ダウンロードボタン |
update-downloaded(Minor/Patch) |
次回起動時に自動更新 |
なし |
update-downloaded(Major) |
今すぐ再起動して更新を適用 |
今すぐ再起動ボタン |
Preload API(実装済み):
window.electron.checkForUpdate()
window.electron.downloadUpdate()
window.electron.installUpdate()
window.electron.onUpdateAvailable(cb) // { version: string, isMajor: boolean }
window.electron.onUpdateDownloaded(cb) // { version: string, isMajor: boolean }
window.electron.onUpdateError(cb) // { message: string }
動作確認手順
packages/desktop/dev-app-update.yml を配置してローカルテスト
provider: github
owner: dashi296
repo: remocoder
pnpm dist:mac でパッケージ化してアプリを起動
- タグを切って GitHub Releases にパブリッシュし、旧バージョンからの更新を確認
参考
概要
electron-updaterによるデスクトップアプリの自動アップデート機能を完成させる。バックエンドの実装(
updater.ts)とPreload APIは既に完成しているが、以下の2点が未実装のため実際に動作しない状態。現状
実装済み
package.json)src/main/updater.ts)src/main/index.ts)src/preload/index.ts)package.json,.github/workflows/release.yml)未実装
update-available/update-downloadedイベントをユーザーに表示するコンポーネントが存在しないタスク
1. macOS コード署名・公証の設定
GitHub Actions の
release.ymlに以下の Secrets / env vars を追加する。必要な GitHub Secrets:
CSC_LINKCSC_KEY_PASSWORDAPPLE_IDAPPLE_APP_SPECIFIC_PASSWORDAPPLE_TEAM_IDrelease.ymlへの追記:package.jsonの electron-builder 設定に追記:2. レンダラー UI の通知コンポーネント実装
src/renderer/components/UpdateNotification.tsxを新規作成し、App.tsxに組み込む。表示すべき状態:
update-available(Minor/Patch)update-available(Major)update-downloaded(Minor/Patch)update-downloaded(Major)Preload API(実装済み):
動作確認手順
packages/desktop/dev-app-update.ymlを配置してローカルテストpnpm dist:macでパッケージ化してアプリを起動参考