0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Electron を始めるの続き

Last updated at Posted at 2026-01-19

はじめに

Windows のデスクトップアプリを作るのに、自分は Electron も使っています。使い方を整理してまとめています。

Electron を始める #JavaScript - Qiita

この続きです。

Electron アプリの「自動更新」を実装する

Electron アプリに「自動更新」の機能を実装できることは知っていました。これを試してみたいと思います。

アプリケーションの更新 | Electron

実装するのに幾つかのパターンがあるようです。

  • 標準の autoUpdater モジュールを使う
  • 上記をラップした update-electron-app モジュールを使う
  • electron-updater モジュールを使う

上記のモジュールが参照するため

  • 更新サーバを用意する
  • 静的ストレージに配布ファイルを置く

更新サーバは

  • update.electronjs.org を使う
  • その他の更新サーバを用意する

配布ファイルは使用するモジュールが要求する仕様で用意する。

  • autoUpdater あるいは update-electron-app を使うとき
  • 上記のモジュールで update.electronjs.org を参照するとき
  • electron-updater を使うとき

autoUpdater あるいは update-electron-app を使う

標準の autoUpdater モジュールを使って実装すると、更新サーバが必須です。

autoUpdater | Electron

これをラップした update-electron-app を使うと、記述しないといけないコードが少なくなり、更新サーバだけでなく静的ストレージを参照することも可能になります。

electron/update-electron-app: 🌲 A drop-in module that adds autoUpdating capabilities to Electron apps - GitHub

いずれも要求される仕様の配布ファイルを用意してサーバに配置します。

更新サーバに update.electronjs.org を使うことができます。このサーバを使うときは、配布ファイルは GitHub のパブリックなリポジトリの「リリース」 に配置します。

electron/update.electronjs.org: 📡 A free service that makes it easy for open-source Electron apps to update themselves - GitHub

公式が用意しているモジュールなので使いたいところですが、制限が多いですね。

electron-updater を使う

autoUpdater および update-electron-app でなく、electron-updater モジュールを使いたいと思います。

electron-builder/packages/electron-updater · electron-userland/electron-builder · GitHub

メリットが幾つかあります。

  • autoUpdater の仕様を真似ている
  • 更新サーバが不要
  • 独自の静的ストレージを使える。GitHub の「リリース」でもいい
  • electron-builder が生成したファイルを配置する

electron-updater を使う①

では、試してみましょう。

Electronアプリのアップデート実装はカンタンだった話|東京 AI 研究所

まず electron-updater モジュールを組込します。

$ npm install electron-updater --save

メインプロセスのプログラムに追記します。

main.js
const { autoUpdater } = require('electron-updater');

autoUpdater.autoDownload = true;    // 自動ダウンロードする指定

app.on('ready', () => {
    (中略)
    autoUpdater.checkForUpdatesAndNotify();    // アップデートの有無を確認
});

配布ファイルの参照先の指定を追記します。

package.json
    build: {
        (中略)
        publish: {
            provider: "generic",
            url: "https://(配布ファイルの参照先)"
        }
    }

electron-builder が生成したファイルのうち、以下を参照先にアップロードします。

(アプリの名前)-Setup-(バージョン).exe
(アプリの名前)-Setup-(バージョン).exe.blockmap
latest.yml
(アプリの名前)-(バージョン)-(アーキテクチャ).dmg
(アプリの名前)-(バージョン)-(アーキテクチャ).dmg.blockmap
latest-mac.yml
(プロジェクトの名前)_(バージョン)_(アーキテクチャ).deb
latest-linux.yml

package.jsonversion を変更してビルドして、新しいバージョンの実行ファイルをアップロードし直しましょう。
以前のバージョンのアプリを実行すると、最新の実行ファイルがバックグラウンドでダウンロードされます。アプリを終了するとインストールし直されます。アプリを起動し直すと新しいバージョンになっています。

electron-updater を使う②

ユーザが直ぐにアップデートしたくないかも知れません。自動ダウンロードは無効にして、確認メッセージを追加します。↓

main.js
autoUpdater.autoDownload = true;    // 自動ダウンロードを無効
autoUpdater.on('update-available', (info) => {    // アップデートが見つかった
    dialog.showMessageBox(mainWin, {
        type: 'info',
        title: 'アップデートあり',
        message: `新しいバージョン ${info.version} が利用可能です。今すぐダウンロードしますか?`,
        buttons: ['する', '後で']
    }).then((result) => {
        if (result.response === 0) {
            autoUpdater.downloadUpdate();    // ダウンロードを開始
        }
    });
});

ユーザが「する」を選択すると、最新の実行ファイルがバックグラウンドでダウンロードされます。

ダウンロードが完了した時点で確認メッセージを表示するようにします。↓

main.js
autoUpdater.on('update-downloaded', () => {    // ダウンロードが完了した
    dialog.showMessageBox(mainWin, {
        title: 'ダウンロード完了',
        message: 'アップデートの準備できました。今すぐアプリを再起動しますか?',
        buttons: ['する', '後で']
    }).then((result) => {
        if (result.response === 0) {
            autoUpdater.quitAndInstall();    // アプリを閉じてインストールを実行
        }
    });
});

ここで「後で」にしても、アプリを終了するとインストールし直されます。アプリを起動し直すと新しいバージョンになっています。

electron-builder で Electron アプリを公開する

ローカル環境で配布ファイルを作成して公開先にアップロードしますが、electron-builder の機能で配布ファイルをアップロードできるようです。

Publish - electron-builder

electron-builder で Cloud Storage にアップロードする

Google Cloud Storage にアップロードしてみます。

まず Google Cloud Storage にバケットを用意します。

Google Cloud Storage(GCS)の使い方 | Zenn

続いて S3 互換で接続できるよう準備します。

GCP(Google Cloud Platform)のStorageをS3モードでつないで操作する #GoogleCloud - Qiita

以下の設定します。

package.json
    "build": {
        (中略)
        "publish": {
            "provider": "s3",
            "endpoint": "https://storage.googleapis.com",
            "region": "auto",
            "bucket": "(用意したバケット)",
            "path": "(必要なら指定)",
            "acl": null
        }
.env
AWS_ACCESS_KEY_ID="(準備したアクセスキー)"
AWS_SECRET_ACCESS_KEY="(準備したシークレットキー)"

ビルドすると同時にアップロードします。↓

$ electron-builder --publish always

electron-publisher-gcs を使ってみる

electron-publisher-gcs が紹介されていたので使ってみました。

uihoh0/electron-publisher-gcs: electron-builder Google Cloud Storage bucket publisher (because GCS's S3-compat API doesn't support the S3 publisher) - GitHub

現行の electron-builder と整合しないようで、実行させられませんでした。

electron-builder で GitHub にアップロードする

electron-builder で GitHub の「リリース」にアップロードできます。

まず GitHub にリポジトリを用意します。

「GitHub」にリポジトリを作成してみよう | 実践で学ぶDevOpsツールの使いこなし術 | Think IT(シンクイット)

続いて GitHub のアクセストークンを準備します。

GitHubで個人アクセストークンを発行する方法 #Python - Qiita

以下の設定します。

package.json
    "build": {
        (中略)
        "publish": {
            "provider": "github",
            "owner": "(アカウント名)",
            "repo": "(リポジトリ名)",
            "releaseType": "release"
        }
.env
GH_TOKEN="(準備したトークン)"

ビルドすると同時にアップロードします。↓

$ electron-builder --publish always

GitHub の指定したリポジトリの「リリース」に追加されます。

GitHubのリリース機能を使う #GitHub - Qiita

Electron アプリを GitHub Actions で作成する

Electron を使うと同じソースコードで Windows 、macOS 、Linux のアプリを作成できるのがメリットです。
アプリを作成するのは、それぞれの OS の実機でビルドします。自分は Windows 機、macOS 機 、Linux 機があるのでいいのですが、それぞれにソースコードをコピーあるいはクローンしてビルドするのは面倒です。
GitHub の CI ツールを使うと、実機がなくてもクラウド環境で、複数の OS のアプリを作成できるようです。

CI を利用したマルチプラットフォーム・ビルド (GitHub Actions, electron-builder)

electron-builder で複数の OS のアプリを作成する

electron-builder で複数 OS のアプリを作成するよう package.json に必要な設定しておきます。

package.json
{
    name: "(プロジェクトの名前)",
    version: "(アプリのバージョン)",
    homepage: "(アプリあるいは作者のウェブサイト)",
    author: {
        name: "(作者の名前)",
        email: "(作者のメール)"
    },
    "build": {
        "appId": "(アプリの ID)",
        "productName": "(アプリの名前)",
        "win": {
            "target": "nsis",
            "icon": "(アイコン画像のパス)"
        },
        "mac": {
            "target": "dmg",
            "icon": "(アイコン画像のパス)"
        },
        "linux": {
            "target": "deb",
            "icon": "(アイコン画像のパス)"
            "category": "Utility"
        }
    }

最低必要な設定は以上でしょうか。アイコンは必須でないけれど指定しておきたいですね。

  • Windows 用は NSIS (Nullsoft Scriptable Install System) 形式のインストーラを作成する指定しています。
  • macOS 用は dmg (ディスクイメージ) ファイルで配付できるようにします
  • Linux 用は deb ファイルを作成する指定しています。ビルドするのに homepageauthoremailcategory を指定するよう要求されます

上記の設定で、以下のファイルが作成されました。

  • Windows 用は (アプリの名前)-Setup-(バージョン).exe
  • macOS 用は (アプリの名前)-(バージョン)-(アーキテクチャ).dmg
  • Linux 用は (プロジェクトの名前)_(バージョン)_(アーキテクチャ).deb

artifactName を指定するとファイル名を変更できます。

electron-builder を GitHub Actions で実行する

electron-builderGitHub Actions で実行したいと思います。

コミュニティが用意している electron-builder-action を使うとよさそうです。

github actionsを使った electron アプリインストーラの自動ビルド (action-electron-builder) - Composable Life

以下の設定を用意します。

.github/workflows/release.yml
name: release

on:
    push:

jobs:
    release:
        runs-on: ${{ matrix.os }}
        permissions:
            contents: write
        strategy:
            matrix:
                os: [windows-latest, ubuntu-latest, macos-latest]

        steps:
            # Checkout the repository
            -   uses: actions/checkout@main

            # Set up Node.js
            -   uses: actions/setup-node@main
                with:
                    node-version: '22'

            # Install dependencies
            -   run: npm install

            # Install dependencies (Linux only)
            -   if: matrix.os == 'ubuntu-latest'
                run: |
                    sudo apt-get update
                    sudo apt-get install -y libarchive-tools

            # Build & Release
            -   uses: samuelmeuli/action-electron-builder@v1 
                with:
                    github_token: ${{ secrets.GITHUB_TOKEN }}
                    release: true
package.json
    "build": {
        (中略)
        "publish": {
            "provider": "github",
            "owner": "(アカウント名)",
            "repo": "(リポジトリ名)",
            "releaseType": "release"
        }

ソースコード一式と一緒に GitHub のリポジトリにプッシュすると、クラウド環境でビルドされて「リリース」に追加されます。

以下の指定しないとリリースできませんでした。リポジトリの「設定」で指定しても構いません。

        permissions:
            contents: write

Actions permissions に GitHub Actions ワークフローに必要な最小限のパーミッションを教えてもらう | 豆蔵デベロッパーサイト

Linux 用のビルドするには以下の設定が必要でした。↓

            # Install dependencies (Linux only)
            -   if: matrix.os == 'ubuntu-latest'
                run: |
                    sudo apt-get update
                    sudo apt-get install -y libarchive-tools

上記の設定ではプッシュするたびにリリースされます。ソースコードのプッシュだけできるようにしたいときは、以下の設定を加えてタグを指定したときだけ実行されるようにできます。↓

    push:
        # バージョン指定つきタグがプッシュされた時のみ実行
        tags:
        - 'v*'
$ git tag v(バージョン)
$ git push && git push --tags
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?