Electron Forge 6 の紹介
待望の Electron Forge v6.0.0 がリリースされましたことをお知らせします! このリリースは 2018 年以来の Forge のメジャーリリースとなり、GitHub 上のこのプロジェクトは electron-userland
からメインのelectron
Organization に移動されました。
ここでは Electron Forge の新機能と、あなたのアプリでの利用方法についてご紹介します。
Electron Forge とは何ですか?
Electron Forge は、Electron アプリケーションをパッケージ化および頒布するツールです。 これは Electron のビルドツールエコシステムを単一の拡張可能なインターフェイスに統一し、誰でもすぐに Electron アプリを作れるようにします。
主な機能は次のとおりです。
- 📦 アプリケーションのパッケージ化とコード署名
- 🚚 Windows、macOS、Linux のカスタマイズ可能なインストーラー (DMG、deb、MSI、PKG、AppX など)。
- ☁️ クラウドプロバイダ (GitHub、S3、Bitbucket など) 向けの自動公開フロー。
- ⚡️ webpack や TypeScript 向けの使いやすい定型テンプレート
- ⚙️ ネイティブ Node.js モジュールのサポート
- 🔌 拡張可能な JavaScript プラグイン API
Forge の理念やアーキテクチャについては、Why Electron Forge 解説ドキュメントをご覧ください。
v6 の新機能はなんですか?
完全な書き直し
Electron Forge は v1 から v5 まで、現在では廃止されている electron-compile
プロジェクトをベースにしていました。 Forge 6 は、Electron アプリケーションのニーズに合わせて拡張可能な新しいモジュール式アーキテクチャを採用し、プロジェクトを完全に書き直しました。
過去数年間で、Forge v6.0.0-beta
は v5 と同等の機能を達成し、コードの乱れが減り、一般的に採用できるツールになりました。
バージョン 5 以前では、Electron Forge は npm 上に electron-forge
パッケージとして公開していました。 v6 での書き換えから、Forge は代わりに多くの小さなプロジェクトを持つ monorepo プロジェクトとして構成されるようになりました。
公式サポート
これまで Electron のメンテナはビルドツールに関して無関心で、様々なコミュニティパッケージに仕事を任せてきました。 しかし、Electron がプロジェクトとして成熟するにつれ、Electron の新規開発者がアプリを構築し頒布するために必要なツールの理解が難しくなってきました。
Electron 開発者の頒布プロセスを支援するために、私たちは Forge を Electron の公式ですぐに使えるビルドパイプラインとする ことを決めました。
この 1 年間で、私たちは徐々に Forge を Electron の公式ドキュメントに統合してきました。そして最近になって、Forge をかつての electron-userland/electron-forge
から electron/forge レポジトリに移動させました。 これで、いよいよ Electron Forge を一般公開する準備ができました!
はじめましょう
新規 Forge プロジェクトの初期化
新しい Electron Forge プロジェクトの準備は create-electron-app
CLI スクリプトでできます。
- Yarn
- npm
yarn create electron-app my-app --template=webpack
cd my-app
yarn start
npm init electron-app@latest my-app -- --template=webpack
cd my-app
npm start
このスクリプトは、完全な JavaScript のバンドルと、あらかじめ構成されたビルドパイプラインを、my-app
フォルダの Electron プロジェクトに作成します。
詳細については、Forge ドキュメント内の Getting Started ガイドをご参照ください。
上記のスニペットは Forge の Webpack Template を使用するもので、新規 Electron プロジェクトのスタート地点として推奨しています。 このテンプレートは @electron-forge/plugin-webpack
プラグインを中心に構築されており、webpack と Electron Forge を以下の方法で統合しています。
- webpack-dev-server によるローカル開発フローの強化、レンダラーにおける HMR のサポートも含む。
- アプリケーションのパッケージ化の前に webpack バンドル用のビルドロジックの処理。
- webpack のバンドル処理におけるネイティブ Node モジュールのサポートの追加。
TypeScript のサポートが必要な場合は、代わりに Webpack + TypeScript Template の利用を検討してください。
既存のプロジェクトをインポートする
Electron Forge CLI には、既存の Electron プロジェクト用のインポートコマンドも用意されています。
- Yarn
- npm
cd my-app
yarn add --dev @electron-forge/cli
yarn electron-forge import
cd my-app
npm install --save-dev @electron-forge/cli
npm exec --package=@electron-forge/cli -c "electron-forge import"
import
コマンドを使用すると、Electron Forge はいくつかのコアの依存関係を追加し、新しい forge.config.js
設定を作成します。 既存のビルドツール (Electron Packager、Electron Builder、Forge 5 など) がある場合、できるだけ多くの設定を移行しようと試みます。 既存の設定の一部は、手動で移行する必要があります。
手動による移行の詳細は、Forge の import ドキュメント に記載されています。 もし助けが必要でしたら、私たちの Discord サーバー をお訪ねください!
なぜ Forge に切り替えるのでしょうか?
Electron アプリのパッケージ化や公開を行うツールをすでにお持ちの場合でも、Electron Forge の導入により初期導入コストを上回るメリットを得ることができます。
Forge を使うメリットは、大きく分けて 2 つあると考えています。
-
Forge は Electron がサポートしているので、アプリケーション構築のための新機能が提供されてもすぐに享受できます。 こうすれば、新しいツールのサポートを自分で対応したり、アップグレードがあっても他のパッケージがサポートするまで実装を待つ必要はありません。 最近の例としては、macOS ユニバーサルバイナリ や ASAR 整合性検査 をご覧ください。
-
Forge はマルチパッケージアーキテクチャを採用しているため、理解しやすく拡張も容易です。 Forge は責任の所在が明確なたくさんの小さなパッケージで構成されているため、コードの流れを追いやすくなっています。 さらに、Forge の拡張可能な API 設計は、高度なユースケースのために、提供された設定オプションとは別に独自の追加ビルドロジックを書けるのです。 カスタム Forge プラグイン、メーカー、パブリッシャーの作成に関する詳細は、ドキュメントの Extending Electron Forge のセクションを参照してください。
破壊的変更
Forge 6 はベータ版として長い時間を過ごしており、そのリリース間隔は徐々に遅くなっています。 しかし 2022 年後半に開発を加速させ、v6.0.0 の安定版リリース前に最後の破壊的変更を押し進めるために、直近で何回かのリリースがありました。
Electron Forge 6 のベータ版の利用者の方は、v6.0.0 GitHub リリースノート に最新のベータ版 (>=6.0.0-beta.65
) で行われた変更点のリストがありますので、そちらをご覧ください。
変更とコミットの完全なリストは、リポジトリの CHANGELOG.md で閲覧できます。
フィードバックをお送りください!
欲しいものを教えてください! Electron Forge チームは、常にユーザーにとってより良いプロジェクトを構築することを目指しています。
機能リクエストの提出、Issue の投稿、またはご意見を寄せていただければ、Electron Forge の改善に役立ちます。 また、公式 Electron Discordサーバー では、Electron Forge のディスカッション用チャンネルが用意されていますので、そちらからもご参加できます。
https://electronforge.io の Forge ドキュメントにフィードバックをしたい方は、GitBook インスタンスを electron-forge/electron-forge-docs レポジトリに同期していますのでそちらにお願いします。