[OSS紹介#39] electron-builder:Electronアプリのパッケージングを効率化するツールを解説

この記事について

この記事では、オープンソースソフトウェア(OSS)を紹介するブログシリーズの一環として、前回に引き続き「electron-builder」を取り上げます。このツールは、Electronベースのアプリケーションを容易にパッケージングし、配布可能な形式にビルドするための包括的なソリューションです。

ソフトウェア開発の現場においては、クロスプラットフォームアプリケーションの需要が高まっており、その開発と配布のプロセスがスムーズであることが求められています。「electron-builder」は、macOS、Windows、Linuxに対応しており、自動更新機能があらかじめ組み込まれているため、開発者にとって非常に便利なツールです。このツールを使用することで、アプリの展開やメンテナンスを効率化し、ユーザーへの提供がよりスムーズに行えるようになります。

本記事では、electron-builderの主な機能や利点、そしてその設定方法について詳しく解説し、開発者の皆様がこの強力なツールを活用して、より生産的な開発環境を築けることを目指します。

リンク:https://github.com/electron-userland/electron-builder


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. electron-builderでできること

electron-builderは、ElectronやProton NativeアプリケーションをmacOS、Windows、Linux向けにパッケージングし、配布可能な形式にビルドするための包括的なソリューションです。このツールは、以下の機能を提供します。

1.1 自動更新機能

ビルドされたアプリケーションには、デフォルトで「自動更新」機能が組み込まれており、ユーザーは常に最新のバージョンを利用できます。

1.2 多様なターゲット形式

electron-builderは、次のような多様なターゲット形式をサポートしています。

  • macOS: dmg, pkg, mas
  • Windows: nsis, msi, AppX, portable
  • Linux: AppImage, snap, deb, rpm

1.3 コード署名とアーティファクトの公開

CIサーバーまたは開発マシン上でのコード署名をサポートしており、GitHub ReleasesやAmazon S3などへのアーティファクトの公開も可能です。

1.4 高度なビルドオプション

アプリケーションを分配可能な形式でビルドするための高度なオプションを提供します。これには、Dockerイメージを使用してLinuxまたはWindows向けのElectronアプリをビルドする機能も含まれます。

2. セットアップ手順

electron-builderをセットアップする手順は以下の通りです。

2.1 必要な環境

electron-builderはNode.jsが必要です。推奨されるパッケージ管理ツールはYarnです。

2.2 Yarnを使用したインストール

Yarnを使用することで、次のコマンドでelectron-builderを開発依存関係として追加できます。

yarn add electron-builder --dev

Yarn 3を使用している場合は、PnPを無効にし、node-modulesを使用する設定を.yarnrc.yamlに追加する必要があります。

nodeLinker: "node-modules"

2.3 アプリケーションの基本設定

新しいElectronアプリケーションを作成するためには、package.jsonに以下の標準フィールドを指定します。

  • name
  • description
  • version
  • author

また、build設定を以下のように追加します。

"build": {
  "appId": "your.id",
  "mac": {
    "category": "your.app.category.type"
  }
}

2.4 スクリプトの設定

開発用のpackage.jsonに以下のスクリプトを追加します。

"scripts": {
  "app:dir": "electron-builder --dir",
  "app:dist": "electron-builder"
}

これにより、yarn app:distコマンドで配布可能な形式にパッケージングできます。

3. 簡単な使い方

electron-builderを使用する基本的な使い方について説明します。

3.1 コマンドラインインターフェース (CLI)

electron-builderはCLIを通じて操作できます。主なコマンドは以下の通りです。

基本コマンド:

  • electron-builder build – アプリケーションをビルドします(デフォルト)
  • electron-builder install-app-deps – アプリの依存関係をインストールします
  • electron-builder node-gyp-rebuild – ネイティブコードを再ビルドします
  • electron-builder create-self-signed-cert – Windows アプリ用の自己署名証明書を作成します
  • electron-builder start – electron-webpackを使用して開発モードでアプリケーションを実行します
  • electron-builder publish – 設定に基づいてファイルを公開します

ビルドオプション:

  • --mac, -m, -o, --macos – macOS向けビルド
  • --linux, -l – Linux向けビルド
  • --win, -w, --windows – Windows向けビルド
  • --x64 – x64アーキテクチャ向けビルド
  • --ia32 – ia32アーキテクチャ向けビルド
  • --armv7l – armv7lアーキテクチャ向けビルド
  • --arm64 – arm64アーキテクチャ向けビルド
  • --universal – universal(macOSのみ)向けビルド
  • --dir – 配布形式ではなく展開したディレクトリとしてビルド(テスト用)

使用例:

# macOS、Windows、Linux向けに同時ビルド
electron-builder -mwl

# Linux向けにdebとtar.xzファイルを生成
electron-builder --linux deb tar.xz

# Windows向けに32ビットNSISインストーラーを生成
electron-builder --windows nsis:ia32

# package.jsonプロパティを動的に設定
electron-builder -c.extraMetadata.foo=bar

# NSISのunicodeオプションを設定
electron-builder -c.nsis.unicode=false

公開オプション:

  • --publish, -p – アーティファクトをGitHub Releasesなどに公開
    • 選択肢: "onTag", "onTagOrDraft", "always", "never"

3.2 ターゲット設定

electron-builderは、設定なしでは現在のプラットフォームと現在のアーキテクチャ向けにデフォルトターゲットでビルドします。

デフォルトターゲット:

  • macOS: DMGとZIP(Squirrel.Mac用)
  • Windows: NSIS
  • Linux:
    • WindowsまたはmacOSでビルドする場合: x64向けSnapとAppImage
    • Linuxでビルドする場合: 現在のアーキテクチャ向けSnapとAppImage

設定例(package.json):

"build": {
  "win": {
    "target": [
      {
        "target": "nsis",
        "arch": ["x64", "ia32"]
      }
    ]
  },
  "mac": {
    "target": [
      {
        "target": "dmg",
        "arch": ["universal"]
      }
    ]
  }
}

3.3 プログラムmatic使用例

以下は、プログラムからelectron-builderを使用する際の基本的なコード例です。

"use strict"
const builder = require("electron-builder")
const Platform = builder.Platform

const options = {
  protocols: {
    name: "Deeplink Example",
    schemes: ["deeplink"]
  },
  compression: "normal",
  removePackageScripts: true,
  afterSign: async (context) => {
    // Mac用のハードニング+公証が必要
    if (!isDebug && context.electronPlatformName === "darwin") {
      await notarizeMac(context)
    }
  },
  directories: {
    output: "dist/artifacts/local",
    buildResources: "installer/resources"
  },
  files: ["out"],
  win: {
    target: 'nsis'
  },
  mac: {
    target: 'dmg',
    hardenedRuntime: true,
    gatekeeperAssess: true
  },
  linux: {
    target: ["AppImage", "rpm", "deb", "pacman"]
  }
}

// Promiseが返される
builder.build({
  targets: Platform.MAC.createTarget(),
  config: options
})
.then((result) => {
  console.log(JSON.stringify(result))
})
.catch((error) => {
  console.error(error)
})

4. 結論

electron-builderは、Electronアプリケーションのパッケージングとビルドを非常に効率的に行うための強力なツールです。自動更新機能や多様なターゲット形式のサポート、高度なビルドオプションを提供することで、開発者は手間をかけずにアプリケーションを配布できます。Yarnを使用した簡単なセットアップ手順と、CLIを通じたスムーズな操作性により、開発プロセスが大幅に改善されることでしょう。