エコシステム 2023 総括
2023 年の Electron の開発者エコシステムの改善と変化を振り返ります。
過去数ヶ月で、Electron アプリの開発者体験を強化するために、Electron エコシステム全体でいくつかの変更を醸成してきました。 Electron HQ からの最新の追加の速報はこちらです。
Electron Forge 7 とその先
Electron Forge 7、Electron アプリケーションのパッケージ化と頒布のためのオールインワンツールの最新メジャーバージョンが利用できるようになりました。
Forge 6 は v5 からの完全な書き換えでした。v7 のスコープは小さいですが、いくつかの改善点が含まれています。 今後も、破壊的変更が必要になり次第、Forge のメジャーバージョンを発行していきます。
詳細については、GitHub 上の Forge v7.0.0 変更ログ をご覧ください。
破壊的変更
- macOS の公証を
notarytool
に切り替えました: 2023-11-01 時点で、Apple は macOS の公証のためのaltool
をレガシーとしました。今回のリリースでは Electron Forge からこれを完全に削除します。 - 最小の Node.js を v16.4.0 に引き上げました: 今回のリリースでは、Node.js のバージョンの最小要件を 16.4.0 に設定しました。
electron-prebuilt
とelectron-prebuilt-compile
のサポートを終了しました:electron-prebuilt
は Electron の npm モジュールの元々の名前で, これは v1.3.1 でelectron
に置き換えられていました。electron-prebuilt-compile
はその DX 機能が強化された代替バイナリでしたが、最終的にプロジェクトとして放棄されました。
ハイライト
- Google Cloud Storage パブリッシャー: Electron Forge は静的自動更新のサポートを強化する一環として、Google Cloud Storage への直接公開をサポートしました!
- ESM の forge.config.js のサポート: Electron Forge は ESM の
forge.config.js
ファイルをサポートするようになりました。 (P.S. Electron 28 での ESM エントリポイントのサポートをご期待ください。) - Maker を並列実行するようになりました: Electron Forge 6 では、Maker は ✨ レガシー✨ な理由で直列実行していました。 それ以来、副作用のない Make ステップの並列化をテストしてきました。これで同一プラットフォーム向けに複数のターゲットをビルドするときの速度が向上しているとわかるでしょう!
🙇 Forge の設定で GCS パブリッシャーと ESM の両方のサポートに貢献していただいた mahnunchik** さんに多大な感謝を送ります!
静的ストレージの自動更新の改善
Squirrel.Windows と Squirrel.Mac は、Electron に組み込まれた autoUpdater
モジュールの土台となるプラットフォーム固有のアップデーター技術です。 両方のプロジェクトは次の 2 つの方法で自動更新をサポートしています。
- Squirrel 互換のアップデートサーバー
- 静的ストレージプロバイダ (AWS、Google Cloud Platform、Microsoft Azure など) でホストされているマニフェスト URL。
従来のアップデートサーバーの手法は Electron アプリに推奨されるアプローチ (かつ更新ロジックの追加カスタマイズを提供するもの) でしたが、これには大きな欠点があります。それは、アプリがクローズドソースの場合、独自のサーバーインスタンスをメンテナンスする必要があることです。
一方、静的ストレージの手法は常に可能でしたが、Electron 内で文書化されておらず、Electron のツールパッケージの間でサポートされていませんでした。
@MarshallOfSound
さんの素晴らしい働きにより、サーバーレス自動アプリ更新のアップデートのシナリオが大幅に能率化されました。
- Electron Forge の Zip と Squirrel.Windows メーカーは、
autoUpdater
互換の更新マニフェストを出力する設定ができるようになりました。 update-electron-app
の新しいメジャーバージョン (v2.0.0) で、これらの生成されたマニフェストを update.electronjs.org サーバーの代替として読み込めるようになりました。
メーカーとパブリッシャーが更新マニフェストをクラウドファイルストレージへアップロードするように設定すれば、以下の数行の設定で自動更新を有効化できます。
const { updateElectronApp, UpdateSourceType } = require('update-electron-app');
updateElectronApp({
updateSource: {
type: UpdateSourceType.StaticStorage,
baseUrl: `https://my-manifest.url/${process.platform}/${process.arch}`,
},
});
📦 もっと知りたいですか? 詳細なガイドにつきましては、Forge の自動更新のドキュメント をご参照ください。
@electron/
で拡張された世界
はじめに Electron が始動したとき、コミュニティは Electron アプリケーションの開発、パッケージ化、頒布の体験向上のために多くのパッケージを公開しました。 これらのパッケージの多くは Electron の GitHub Organization に組み込まれ、コアチームがそのメンテナンスを負担していました。
2022 年には、npm の @electron/
名前空間の下で、これらのファーストパーティツールをすべて統一し始めました。 この変更により、以前の electron-foo
パッケージは npm で @electron/foo
になり、かつて electron/electron-foo
という名前だったレポジトリは GitHub 上で electron/foo
となりました。 これらの変更は、ユーザーランドとファーストパーティのプロジェクトを明確に分別するのに役立ちます。 これには以下のような、一般的に使用されているパッケージが多数含まれます。
@electron/asar
@electron/fuses
@electron/get
@electron/notarize
@electron/osx-sign
@electron/packager
@electron/rebuild
@electron/remote
@electron/symbolicate-mac
@electron/universal
今後リリースされるファーストパーティパッケージも、すべて @electron/
名前空間になります。 このルールには 2 つの例外があります。
- Electron のコアは
electron
パッケージの下で引き続き公開されます。 - Electron Forge は
@electron-forge/
名前空間の下にその monorepo パッケージ全てを公開し続けます。
⭐ この過程で、私たちは誤って electron/packager リポジトリを非公開にしてしまいました。これにより、GitHub のスターの数を消えるという不幸な副作用がありました (消える前は 9000 以上でした)。 Packager をいつもご利用の方は、⭐ スター ⭐ していただけると幸いです!
@electron/windows-sign
の紹介
2023-06-01 以降、業界標準は FIPS 準拠のハードウェアに格納される Windows のコード署名証明書の鍵を要求するようになりました。
実際には、CI 環境でビルドおよびサインインを行うアプリにとってのコード署名が非常に困難になりました。 多くの Electron ツールは、設定パラメータとして証明書ファイルとパスワードを取り込み、そこからハードコードされたロジックで署名しようとします。
この状況は Electron 開発者にとって共通の苦痛となっています。だからこそ、Windows のコード署名をスタンドアローンな手順へと分離する改善策に取り組んでいるのです。この手順は macOS で @electron/osx-sign
が行うことに似ています。
将来的には、このパッケージを Electron Forge のツールチェーンに完全に統合する予定ですが、現在は独自のものになっています。 そのパッケージは現在 npm install --save-dev @electron/windows-sign
でインストールでき、プログラムからまたは CLI 経由で利用できます。
レポジトリの Issue トラッカー にてぜひご意見をお寄せください!
次は何をするのでしょうか?
私たちは来月から、毎年 12 月の安息期に入る予定です。 私たちはその間、2024 年に Electron の開発体験をさらに向上させる方法について考えていることでしょう。
次に取り組んでほしいことがおありですか? ぜひお聞かせください!