メインコンテンツへ飛ぶ

コード署名

コード署名はセキュリティ技術のひとつで、アプリを作成したのがあなたであることを確実にするために使用します。 オペレーティングシステムのセキュリティチェックを招かぬように、アプリケーションは署名すべきです。

macOS では、その変更が誤りか悪意のあるコードによって導入されたのかにかかわらず、システムでアプリに対する変更を検出できます。

Windows では、コード署名証明書に信頼レベルが割り当てられています。そうでない場合や、信頼レベルが低いと、ユーザがアプリケーションを使用しようとしたときにセキュリティダイアログが表示されます。 信頼レベルは時間とともに上昇するので、できるだけ早くコード署名し始めることを推奨します。

未署名のアプリを配布することは可能ですが、非推奨です。 Windows と macOS の両方は、デフォルトで未署名のアプリケーションのダウンロードや実行を阻害します。 macOS Catalina (バージョン 10.15) 以降では、ユーザーが署名されていないアプリケーションを開くには、複数ある手動の手順を実行する必要があります。

macOS Catalina Gatekeeper の警告: このアプリは、開発元が未確認のため開けません

見かけ上、ユーザーには 2 つの選択肢があります。アプリをゴミ箱に直接移動するか、実行をキャンセルするかです。 ユーザーにそのダイアログを表示させたくはないでしょう。

パッケージ化して配布する予定の Electron アプリケーションを作成している場合は、コード署名されている必要があります。

macOS ビルドへの署名 & 公証

macOS アプリをリリースに向けて適切に準備するには、2 つのステップが必要です。 まず、アプリをコード署名する必要があります。 次に、公証 と呼ばれるプロセスのためにアプリを Apple にアップロードする必要があります。自動化されたシステムによって、アプリがユーザーを危険に晒すようなことをしていないかどうか、さらに確認します。

このプロセスを開始するには、以下に示すアプリへの署名と公証の要件を満たしていることを確認してください。

  1. Apple Developer Program に登録する (年会費が必要)
  2. Xcode をダウンロードしてインストールします - これは macOS を実行しているコンピュータで必要です
  3. 署名証明書 を生成、ダウンロードして、インストールします

Electron のエコシステムでは構成とその自由度を重視しているため、アプリケーションの署名と公証の取得には複数の方法が用意されています。

Electron Forge を使用する

好きな Electron のビルドツールを使用している場合、アプリケーションの署名と公証を行うにあたって、設定にいくつか追加する必要があります。 forge は、内部で electron-packager@electron/osx-sign@electron/notarize を利用している、Electron 公式のツールの集合体です。

アプリケーションの設定方法の詳細は、Electron Forge ドキュメント内の macOS アプリの署名 ガイドに記載されています。

Electron Packager を使用する

Forge のような統合されたビルドパイプラインを使用しない場合、electron-packager を使用することが多く、これは @electron/osx-sign@electron/notarize を同梱しています。

Packager の API を使用している場合、アプリケーションに署名と公証の両方を行う設定 を渡すことができます。

const packager = require('electron-packager')

packager({
dir: '/path/to/my/app',
osxSign: {},
osxNotarize: {
appleId: 'felix@felix.fun',
appleIdPassword: 'my-apple-id-password'
}
})

Mac App Store アプリケーションの署名

Mac App Store ガイド をご参照ください。

Windows ビルドの署名

Windows ビルドに署名する前に、以下のことをしなければなりません。

  1. Windows Authenticode コード署名証明書を取得します (年会費が必要です)
  2. Visual Studio をインストールして署名ユーティリティを取得します (無料の Community Edition で十分です)

多くの再販業者からコード署名証明書を入手できます。 価格はさまざまですので、選ぶのに迷うでしょう。 人気のある再販業者は次のとおりです。

  • digicert
  • Sectigo
  • 中でもぜひ、自分のニーズに合ったものを探してみてください! 😄
証明書のパスワードは秘匿しておくこと

証明書のパスワードは 秘密 でなければなりません。 公に共有したり、ソースコードにコミットしたりしないでください。

Electron Forge を使用する

Squirrel.WindowsWiX MSI のインストーラーを署名するのであれば、Electron Forge を推奨します。 アプリケーションの設定方法の詳細な手順は Electron Forge のコード署名チュートリアル にあります。

electron-winstaller (Squirrel.Windows) を使用する

electron-winstaller は、Electron アプリ向けに Squirrel.Windows のインストーラーを生成するパッケージです。 これは Electron Forge の Squirrel.Windows メーカー で内部的に使用されているツールです。 Electron Forge を使用せずに直接 electron-winstaller を使用する場合は、インストーラ作成時に certificateFilecertificatePassword の設定オプションを使用します。

const electronInstaller = require('electron-winstaller')
// 注: この構文は非同期関数内で使用してください。Node 12 の時点では Node は
// トップレベル await をサポートしていません。
try {
await electronInstaller.createWindowsInstaller({
appDirectory: '/tmp/build/my-app-64',
outputDirectory: '/tmp/build/installer64',
authors: 'My App Inc.',
exe: 'myapp.exe',
certificateFile: './cert.pfx',
certificatePassword: 'this-is-a-secret'
})
console.log('It worked!')
} catch (e) {
console.log(`No dice: ${e.message}`)
}

すべての設定オプションについては、electron-winstaller リポジトリをご確認ください!

electron-wix-msi (WiX MSI) を使用する

electron-wix-msi は、Electron アプリ向けに MSI のインストーラーを生成するパッケージです。 これは Electron Forge の MSI メーカー で内部的に使用されているツールです。

Electron Forge を使用せずに直接 electron-wix-msi を使用する場合は、certificateFilecertificatePassword の設定オプションを使用するか、signWithParams オプションで直接 SignTool.exe に引数を渡してください。

import { MSICreator } from 'electron-wix-msi'

// ステップ 1: MSICreator のインスタンス化
const msiCreator = new MSICreator({
appDirectory: '/path/to/built/app',
description: 'My amazing Kitten simulator',
exe: 'kittens',
name: 'Kittens',
manufacturer: 'Kitten Technologies',
version: '1.1.2',
outputDirectory: '/path/to/output/folder',
certificateFile: './cert.pfx',
certificatePassword: 'this-is-a-secret'
})

// ステップ 2: .wxs テンプレートファイルの作成
const supportBinaries = await msiCreator.create()

// 🆕 ステップ 2a: パッケージ化スクリプトの一部としてバイナリに署名する場合は
// 任意で補助バイナリに署名します
supportBinaries.forEach(async (binary) => {
// バイナリは、新しいスタブ実行ファイルと任意の
// Squirrel 自動アップデータです。
await signFile(binary)
})

// ステップ 3: テンプレートを .msi ファイルにコンパイルする
await msiCreator.compile()

すべての設定オプションについては、electron-wix-msi リポジトリをご確認ください!

Electron Builder を使用する

Electron Builder にはアプリケーションに署名するためのカスタムソリューションが付属しています。 そのドキュメントはこちら にあります。

Windows Store アプリケーションの署名

Windows ストアガイド をご参照ください。