エコシステム 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 月 1 日の時点で、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
ファイルをサポートするようになりました。(追伸 Electron 28 での ESM エントリーポイントのサポートにご期待ください。) - Makers が並列実行されるようになりました: Electron Forge 6 では、Makers は ✨レガシー✨の理由で順番に実行されていました。それ以来、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 組織に組み込まれ、コアチームがメンテナンスの負担を引き受けることになりました。
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/
名前空間で公開し続けます。
⭐ この過程で、誤って electron/packager リポジトリを非公開にしてしまい、残念ながらGitHubのスター数が(削除前は9000以上)消えてしまいました。Packagerのアクティブユーザーの方は、ぜひ ⭐ スター ⭐ をいただけると幸いです!
@electron/windows-sign
のご紹介
2023年6月1日から、業界標準でWindowsコード署名証明書のキーをFIPS準拠のハードウェアに保存することが義務付けられました。
実際には、多くのElectronツールが証明書ファイルとパスワードを構成パラメータとして受け取り、そこからハードコードされたロジックを使用して署名しようとするため、CI環境でビルドと署名を行うアプリにとってコード署名が非常に難しくなりました。
この状況はElectron開発者にとって共通の悩みの種でした。そのため、私たちはmacOSで@electron/osx-sign
が行うのと同様に、Windowsコード署名をスタンドアロンのステップに分離するより良いソリューションに取り組んできました。
将来的には、このパッケージをElectron Forgeツールチェーンに完全に統合する予定ですが、現在は単独で存在しています。パッケージは現在、npm install --save-dev @electron/windows-sign
でインストール可能で、プログラムまたはCLI経由で使用できます。
ぜひ試してみて、リポジトリのIssueトラッカーでフィードバックをお寄せください!
今後の予定
来月には、毎年恒例の12月の静寂期間に入ります。その間、私たちは2024年にElectronの開発体験をさらに向上させる方法について検討します。
次に私たちが取り組むべきことについて、何かご意見はありますか?ぜひ教えてください!