メインコンテンツへスキップ

公開とアップデート

チュートリアルに従ってください

学習目標

これまでのチュートリアルに従ってきた場合、これは最後のステップです!このパートでは、アプリをGitHubリリースに公開し、アプリコードに自動アップデートを統合します。

update.electronjs.orgの使用

Electronメンテナーは、オープンソースアプリ向けにhttps://update.electronjs.orgで無料の自動アップデートサービスを提供しています。その要件は次のとおりです。

  • あなたのアプリはmacOSまたはWindowsで動作します
  • あなたのアプリは公開GitHubリポジトリを持っています
  • ビルドはGitHubリリースに公開されます
  • ビルドはコード署名されています (macOSのみ)

この時点で、すでにすべてのコードを公開GitHubリポジトリにプッシュしたと仮定します。

代替アップデートサービス

別のリポジトリホスト(例:GitLabまたはBitbucket)を使用している場合、またはコードリポジトリを非公開にする必要がある場合は、独自のElectronアップデートサーバーのホスティングに関するステップバイステップガイドを参照してください。

GitHubリリースの公開

Electron Forgeには、パッケージ化されたアプリケーションをさまざまなソースに自動的に配布できるPublisherプラグインがあります。このチュートリアルでは、GitHub Publisherを使用します。これにより、コードをGitHubリリースに公開できます。

個人アクセストークンの生成

Forgeは、許可なしにGitHub上の任意のリポジトリに公開できません。ForgeにGitHubリリースへのアクセス権を与える認証済みトークンを渡す必要があります。これを行う最も簡単な方法は、新しい個人アクセストークン(PAT)public_repoスコープで作成することです。これにより、公開リポジトリへの書き込みアクセス権が付与されます。**このトークンを秘密にしておくようにしてください。**

GitHub Publisherの設定

モジュールのインストール

ForgeのGitHub Publisherは、プロジェクトのdevDependenciesにインストールする必要があるプラグインです。

npm install --save-dev @electron-forge/publisher-github

Forgeでのパブリッシャーの設定

インストールしたら、Forgeの設定で設定する必要があります。オプションの完全なリストは、ForgeのPublisherGitHubConfigAPIドキュメントに記載されています。

forge.config.js
module.exports = {
publishers: [
{
name: '@electron-forge/publisher-github',
config: {
repository: {
owner: 'github-user-name',
name: 'github-repo-name'
},
prerelease: false,
draft: true
}
}
]
}
公開前のリリースの下書き

Forgeがリリースをドラフトとして公開するように設定されていることに注意してください。これにより、実際にエンドユーザーに公開することなく、生成された成果物を含むリリースを確認できます。リリースノートを作成し、配布ファイルが機能することを再確認した後、GitHubを介して手動でリリースを公開できます。

認証トークンの設定

パブリッシャーに認証トークンを認識させる必要もあります。デフォルトでは、GITHUB_TOKEN環境変数に格納されている値を使用します。

publishコマンドの実行

Forgeのpublishコマンドをnpmスクリプトに追加します。

package.json
  //...
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish"
},
//...

このコマンドは、構成されたメーカーを実行し、出力配布ファイルを新しいGitHubリリースに公開します。

npm run publish

デフォルトでは、ホストオペレーティングシステムとアーキテクチャの単一の配布ファイルのみが公開されます。Forgeコマンドに--archフラグを渡すことで、異なるアーキテクチャに対して公開できます。

このリリースの名前は、プロジェクトのpackage.jsonファイルのversionフィールドに対応します。

リリースのタグ付け

必要に応じて、Gitでリリースにタグ付けすることもできます。これにより、リリースがコード履歴内のラベル付きポイントに関連付けられます。npmには便利なnpm versionコマンドがあり、バージョン更新とタグ付けを処理できます。

ボーナス:GitHub Actionsでの公開

ローカルでの公開は、特にホストオペレーティングシステムの配布ファイルのみを作成できるため(つまり、macOSからWindowsの.exeファイルは公開できません)、困難な場合があります。

これに対する解決策は、GitHub Actionsなどの自動化ワークフローを介してアプリを公開することです。これは、Ubuntu、macOS、Windowsでクラウドでタスクを実行できます。Electron Fiddleで採用されている方法です。詳細については、FiddleのビルドとリリースパイプラインおよびForgeの設定を参照してください。

アップデートコードのインストルメンテーション

GitHubリリースを介して機能するリリースシステムができたので、新しいリリースがあるたびにElectronアプリにアップデートをダウンロードするように指示する必要があります。Electronアプリは、アップデートサーバーフィードから読み取って、ダウンロード可能な新しいバージョンがあるかどうかを確認するautoUpdaterモジュールを介してこれを行います。

update.electronjs.org サービスは、Updaterと互換性のあるフィードを提供します。例えば、Electron Fiddle v0.28.0 は、https://update.electronjs.org/electron/fiddle/darwin/v0.28.0 のエンドポイントを確認して、新しいGitHubリリースが利用可能かどうかをチェックします。

リリースがGitHubに公開された後、update.electronjs.org サービスはあなたのアプリケーションで動作するはずです。残りの手順は、autoUpdater モジュールでフィードを設定することだけです。

このプロセスを容易にするために、Electronチームはupdate-electron-app モジュールをメンテナンスしています。これは、1つの関数呼び出しでupdate.electronjs.org のautoUpdaterボイラープレートを設定します。設定は不要です。このモジュールは、プロジェクトのpackage.jsonの"repository"フィールドに一致するupdate.electronjs.orgフィードを検索します。

まず、モジュールをランタイム依存関係としてインストールします。

npm install update-electron-app

次に、モジュールをインポートし、メインプロセスで即座に呼び出します。

main.js
require('update-electron-app')()

これで全てです!アプリケーションがパッケージ化されると、公開する新しいGitHubリリースごとに自動的に更新されます。

概要

このチュートリアルでは、Electron ForgeのGitHub Publisherを使用して、アプリの配布物をGitHubリリースにアップロードしました。配布物はプラットフォーム間で常に生成できるとは限らないため、マシンにアクセスできない場合は、継続的インテグレーションパイプラインでビルドと公開フローを設定することをお勧めします。

Electronアプリケーションは、autoUpdaterモジュールをアップデートサーバーフィードにポイントすることで自己更新できます。update.electronjs.orgは、GitHubリリースで公開されているオープンソースアプリケーションのためにElectronによって提供される無料のアップデートサーバーです。このサービスを使用するようにElectronアプリを設定するのは、update-electron-appモジュールをインストールしてインポートするだけなので簡単です。

アプリケーションがupdate.electronjs.orgの対象外の場合は、代わりに独自のアップデートサーバーをデプロイし、autoUpdaterモジュールを自分で設定する必要があります。

🌟 完了です!

これで、Electronのチュートリアルを正式に完了しました。ドキュメントの残りの部分を探求して、開発を楽しんでください!ご質問がある場合は、コミュニティのDiscordサーバーにお越しください。