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

Google Summer of Code 2022

·2 分で読めます

Electron チームは、今年初めて Google Summer of Code に参加することをお知らせします!


Google Summer of Code とは何ですか?

Google Summer of Code (GSoC) は、オープンソースソフトウェアプロジェクトと将来の貢献者をつなぐ、年に一度のメンターシッププログラムです。以前は学生のみに公開されていましたが、現在では 18 歳以上であれば誰でも GSoC に登録できます。

詳細については、Summer of Code のホームページをご覧ください。

サインアップ方法

Electron とのコラボレーションに興味がありますか? オープンソースの貢献者として初心者の方も大歓迎です!

Google Summer of Code の Electron コントリビューターとして選ばれるには、申請書を提出する必要があります。申請期間は、2022年4月4日に開始し、2022年4月19日に終了します。Google の更新された Summer of Code 申請ガイドラインはこちらで確認できます

申請を希望されますか? まず、準備した5 つのプロジェクトアイデアの草案を確認してください。記載されているアイデアはすべて現在提案を受け付けています。提案されたプロジェクトリストにない新しいアイデアも受け付けています。

申請書には以下を含める必要があります

  • あなたの提案。これは、夏の間で何を達成する予定かを詳細に記述した書面です。
  • 開発者としてのあなたのバックグラウンド。履歴書をお持ちの場合はコピーを添付してください。それ以外の場合は、関連する技術的な経験に重点を置いて、これまでの経験について説明してください。

Electron アプリケーションの一部として提出するものに関する詳細なガイドはこちらにあります。

提案を準備するための重要なヒントについては、公式 GSoC 学生/貢献者ガイドを読むこともできます。

プロジェクト提案について議論したい場合や質問がある場合は、#gsoc-general Discord チャンネルで交流しましょう!

参考文献

Electron 17.0.0

·3 分で読めます

Electron 17.0.0 がリリースされました! Chromium 98、V8 9.8、Node.js 16.13.0 へのアップグレードが含まれています。詳細については以下をお読みください!


Electron チームは、Electron 17.0.0 のリリースを発表できることを嬉しく思います! npm を使用して npm install electron@latest でインストールするか、リリース Web サイトからダウンロードできます。このリリースに関する詳細については読み進めてください。フィードバックがあれば共有してください!

注目すべき変更点

Electron リリースカデンスの変更

Electron 15 以降、Electron は 8 週間ごとに新しいメジャー安定バージョンをリリースします。詳細はこちらをご覧ください。

また、Electron は 2022 年 5 月までサポート対象バージョンを最新の 3 つのバージョンから最新の 4 つのバージョンに変更しました。Electron のバージョニングに関する詳細については、バージョニングに関するドキュメントを参照してください。2022 年 5 月以降は、最新の 3 つのバージョンのサポートに戻ります。

スタックの変更

ハイライト機能

  • webContents.getMediaSourceId() を追加しました。これは getUserMedia と組み合わせて使用して、WebContents のストリームを取得できます。#31204
  • webContents.getPrinters() を非推奨にし、webContents.getPrintersAsync() を導入しました。#31023
  • desktopCapturer.getSources は、メインプロセスでのみ使用できるようになりました。#30720

新機能と変更の完全なリストについては、17.0.0 のリリースノートを参照してください。

互換性を破る変更

以下は、Electron 17 で導入された互換性を破る変更です。これらの変更と今後の変更の詳細については、計画されている互換性を破る変更ページをご覧ください。

レンダラーの desktopCapturer.getSources

desktopCapturer.getSources API は、メインプロセスでのみ使用できるようになりました。これは、Electron アプリのデフォルトのセキュリティを向上させるために変更されました。

API の変更

Electron 17 での API の変更はありません。

削除/非推奨の変更

  • レンダラーでの desktopCapturer.getSources API の使用が削除されました。アプリでこの API を置き換える方法の詳細については、こちらを参照してください。

13.x.y のサポート終了

Electron 13.x.y は、プロジェクトのサポートポリシーに基づき、サポートが終了しました。開発者とアプリケーションは、より新しいバージョンのElectronにアップグレードすることを推奨します。

Electron 15 から、サポート対象バージョンを最新3バージョンから、2022年5月のElectron 19まで最新4バージョンに変更しました。Electron 19 以降は、最新3バージョンのサポートに戻ります。このバージョンサポートの変更は、新しいケイデンスの変更の一部です。詳細については、こちらのブログ記事をご覧ください。

E15 (2021年9月)E16 (2021年11月)E17 (2022年2月)E18 (2022年3月)E19 (2022年5月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

今後の予定

短期的には、Chromium、Node、V8を含む、Electronを構成する主要コンポーネントの開発を継続的に追っていくことに注力します。リリース日については確約できませんが、これらのコンポーネントの新しいバージョンを含むElectronの新しいメジャーバージョンを、約2ヶ月ごとにリリースする予定です。

Electronの公開タイムラインはこちらで確認できます。

今後の変更に関する詳細は、計画された破壊的変更ページをご覧ください。

Spectron 非推奨のお知らせ

·2 分で読めます

Spectronは2022年2月1日に非推奨になります。


2022年2月から、SpectronはElectronチームによって正式に非推奨になります。

Spectronを非推奨にする理由

Spectronは、Electronの新しいバージョンごとに新しいリリースを継続的に行ってきましたが、プロジェクトは1年以上メンテナンスと改善がほとんど行われておらず、現在、フルタイムのメンテナーがいません。リモートモジュールがElectronコアの外に出て、Electron 14の外部モジュールに移行したため、Spectronは確実に動作し続けるために大幅な書き換えが必要になります。

Spectronの継続的なメンテナンスのためにいくつかの利用可能なオプションを検討した結果、Electronチームは2022年にSpectronを非推奨にすることを決定しました。

非推奨タイムライン

以下は、計画されている非推奨タイムラインです。

  • 2021年11月~2022年1月:Electronチームは、コミュニティからのプルリクエストを引き続き受け付けます。
  • 2022年1月:Spectronの非推奨に関する最終警告アナウンスがリリースされます。
  • 2022年2月1日:Spectronのリポジトリが「アーカイブ済み」としてマークされます。プルリクエストはこれ以上受け付けられなくなります。

2022年2月1日以降、ElectronはSpectronリポジトリを無期限に公開し続けるため、他の人がプロジェクトのために既存のコードをフォークまたは使用することを歓迎します。これにより、Spectronにまだ依存しているプロジェクトへの移行をより長く提供できることを願っています。

Spectronの代替

現在プロジェクトでSpectronを使用しており、代替のテストソリューションに移行したい場合は、こちらで自動テストのガイドを読むことができます。

現在、PlaywrightやWebDriverIOなど、Spectronに推奨されるいくつかの代替案があります。各オプションの公式チュートリアルは、自動テストのドキュメントに記載されています。

今後の予定

Electronチーム一同、SpectronとElectronをご利用いただきありがとうございます。多くのユーザーがアプリのテストにSpectronを依存していることを理解しており、この移行をできるだけ痛みのないものにしたいと考えています。Electronをお選びいただきありがとうございます!

Electron 16.0.0

·4分で読めます

Electron 16.0.0 がリリースされました!Chromium 96、V8 9.6、Node.js 16.9.1へのアップグレードが含まれています。詳細については以下をお読みください!


Electronチームは、Electron 16.0.0のリリースを発表できることを嬉しく思います!npm install electron@latest で npm を使用してインストールするか、リリースウェブサイトからダウンロードできます。このリリースに関する詳細を読み進め、フィードバックがあれば共有してください!

注目すべき変更点

Electron リリースカデンスの変更

Electron 15 以降、Electron は 8 週間ごとに新しいメジャー安定バージョンをリリースします。詳細はこちらをご覧ください。

また、Electron は 2022 年 5 月までサポート対象バージョンを最新の 3 つのバージョンから最新の 4 つのバージョンに変更しました。Electron のバージョニングに関する詳細については、バージョニングに関するドキュメントを参照してください。2022 年 5 月以降は、最新の 3 つのバージョンのサポートに戻ります。

スタックの変更

ハイライト機能

  • WebHID API をサポートするようになりました。#30213
  • インスタンス間でデータを共有するために、app.requestSingleInstanceLock に data パラメータを追加しました。#30891
  • メディア権限リクエストハンドラに securityOrigin を渡します。#31357
  • commandLine.removeSwitch を追加します。#30933

新機能と変更の完全なリストについては、16.0.0 リリースノートを参照してください。

互換性を破る変更

以下は、Electron 16 で導入された破壊的変更です。これらの変更と今後の変更に関する詳細については、計画された破壊的変更ページをご覧ください。

ネイティブモジュールの構築

プロジェクトで node-gyp を使用してネイティブモジュールを構築する場合は、プロジェクトのセットアップと Electron のバージョンに応じて、--force-process-config を付けて呼び出す必要がある場合があります。この変更に関する詳細については、#2497 を参照してください。

動作変更: Linux での crashReporter 実装を Crashpad に切り替えました

Linux での crashReporter API の基盤となる実装が、Breakpad から Crashpad に変更され、Windows および Mac と同様になりました。この結果、子プロセスが自動的に監視されるようになり、Node 子プロセスで process.crashReporter.start を呼び出す必要がなくなりました(また、Crashpad レポーターの2番目のインスタンスが開始されるため、推奨されません)。

Linux でのアノテーションのレポート方法にも微妙な変更があり、長い値が __1__2 などが付加されたアノテーション間で分割されなくなり、(新しく、より長い)アノテーション値の制限で切り捨てられるようになります。

API の変更

Electron 16 には、API の変更はありませんでした。

削除/非推奨の変更

  • レンダラーでの desktopCapturer.getSources API の使用は非推奨になり、削除されます。この変更により、Electron アプリのデフォルトのセキュリティが向上します。アプリでこの API を置き換える方法の詳細については、こちらを参照してください。

12.x.y のサポート終了

Electron 12.x.y は、プロジェクトのサポートポリシーに従い、サポートが終了しました。開発者とアプリケーションは、より新しいバージョンのElectronにアップグレードすることを推奨します。

Electron 15 から、サポート対象バージョンを最新3バージョンから、2022年5月のElectron 19まで最新4バージョンに変更しました。Electron 19 以降は、最新3バージョンのサポートに戻ります。このバージョンサポートの変更は、新しいケイデンスの変更の一部です。詳細については、こちらのブログ記事をご覧ください。

E15 (2021年9月)E16 (2021年11月)E17 (2022年2月)E18 (2022年3月)E19 (2022年5月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

今後の予定

短期的には、Chromium、Node、V8を含む、Electronを構成する主要コンポーネントの開発を継続的に追っていくことに注力します。リリース日については確約できませんが、これらのコンポーネントの新しいバージョンを含むElectronの新しいメジャーバージョンを、約2ヶ月ごとにリリースする予定です。

Electronの公開タイムラインはこちらで確認できます。

今後の変更に関する詳細は、計画された破壊的変更ページをご覧ください。

静かな場所 (2021年12月)

·2 分で読めます

Electronプロジェクトは2021年12月は一時停止し、2022年1月にフルスピードで再開します。

via GIPHY


12月に変わらないこと

  1. ゼロデイおよびその他の主要なセキュリティ関連のリリースは、必要に応じて公開されます。セキュリティインシデントは、SECURITY.md経由で報告してください。
  2. 行動規範レポートとモデレーションは継続されます。

12月に変わること

  1. 12月には、新しいベータ版または安定版のリリースはありません。12月の最後の2週間はナイトリーリリースはありません。
  2. いくつかの例外を除いて、プルリクエストのレビューまたはマージはありません。
  3. どのリポジトリでもイシュートラッカーの更新はありません。
  4. メンテナーからのDiscordデバッグヘルプはありません。
  5. ソーシャルメディアコンテンツの更新はありません。

なぜこれが起こっているのですか?

簡単に言うと、メンテナーはプロジェクトに満足し、積極的に関わっていますが、世界は疲れています。12月はほとんどの企業にとって静かな月であるため、メンテナーに充電の機会を与えたいと考えています。他のプロジェクトも同様の対策を検討することをお勧めします。

Electronの将来について心配する必要がありますか?

いいえ。プロジェクトが順調に進んでいるため、このステップを踏むことができます。誰もが2022年を楽しみにしていますし、良いことが起こると期待しています!

Electron 15.0.0

·4分で読めます

Electron 15.0.0 がリリースされました!Chromium 94、V8 9.4、Node.js 16.5.0 へのアップグレードが含まれています。window.openへのAPI更新、バグ修正、一般的な改善が行われました。詳細は以下をご覧ください!


Electronチームは、Electron 15.0.0のリリースを発表できることを嬉しく思います!npmでnpm install electron@latestを使用してインストールするか、リリースウェブサイトからダウンロードできます。このリリースに関する詳細を引き続き読み、フィードバックをお寄せください!

注目すべき変更点

Electron リリースカデンスの変更

Electron 15から、Electronは8週間ごとに新しいメジャー安定版をリリースします。詳細については、こちらをご覧ください。

さらに、Electronはサポート対象バージョンを、最新の3バージョンから2022年5月まで最新の4バージョンに変更します。Electronのバージョン管理に関する詳細については、バージョン管理ドキュメントを参照してください。

スタックの変更

ハイライト機能

  • nativeWindowOpen: trueは実験段階ではなくなり、デフォルトになりました。
  • safeStorage文字列暗号化APIを追加しました。#30430
  • ページ内でフレームが作成されたときに発生する'frame-created'イベントをWebContentsに追加しました。#30801
  • BrowserWindowwill-resizeイベントにリサイズedge情報を追加しました。#29199

新機能と変更の完全なリストについては、15.0.0のリリースノートをご覧ください。

互換性を破る変更

以下は、Electron 15で導入された破壊的な変更点です。これらの変更点と今後の変更点の詳細については、計画された破壊的な変更ページをご覧ください。

デフォルトの変更:nativeWindowOpenがデフォルトでtrueになりました

Electron 15より前は、window.openはデフォルトでBrowserWindowProxyを使用するようにシムされていました。これは、window.open('about:blank')が、他の非互換性の中でも特に、同期的にスクリプト可能な子ウィンドウを開くことができなかったことを意味します。nativeWindowOpen: trueは実験段階ではなくなり、デフォルトになりました。

詳細については、Electronのwindow.openのドキュメントをご覧ください。

API の変更

  • ページ内でフレームが作成されたときに発生する'frame-created'イベントをWebContentsに追加しました。#30801
  • safeStorage文字列暗号化APIを追加しました。#30430
  • dialog.showMessageBoxsignalオプションを追加しました。#26102
  • アプリケーションがロードするapp.asarファイルでコード署名を強制するためのElectron Fuseを追加しました。最新のasarモジュール(v3.1.0以上)が必要です。#30900
  • パッケージ化されたアプリでNODE_OPTIONS--inspectデバッグ引数を無効にするためのフューズを追加しました。#30420
  • ユーザーが割り当てたmacOSアクセラレータのオーバーライドを読み取るための新しいMenuItem.userAcceleratorプロパティを追加しました。#26682
  • Apple SiliconでRosetta、またはARM用WindowsでWOWで実行されていることを検出するための新しいapp.runningUnderARM64Translationプロパティを追加しました。#29168
  • 画像のアニメーション方法を制御するための新しいimageAnimationPolicy Web設定を追加しました。#29095
  • コンテキストブリッジ経由でのBlobの送信のサポートを追加しました。#29247

削除/非推奨の変更

削除または非推奨になったAPIはありません。

サポート対象バージョン

Electron 15から、Electron 19の2022年5月まで、サポート対象バージョンを最新の3バージョンから最新の4バージョンに変更します。Electron 19以降は、最新の3バージョンのサポートに戻ります。このバージョンサポートの変更は、新しいケイデンス変更の一部です。詳細については、ブログ記事をご覧ください。

開発者とアプリケーションは、新しいバージョンのElectronにアップグレードすることをお勧めします。

E15 (2021年9月)E16 (2021年11月)E17 (2022年2月)E18 (2022年3月)E19 (2022年5月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

今後の予定

短期的には、チームがChromium、Node、V8を含むElectronを構成する主要コンポーネントの開発に対応し続けることに注力すると予想できます。リリース日については約束を控えていますが、Electronの新しいメジャーバージョンをこれらのコンポーネントの新しいバージョンとともに、約四半期ごとにリリースする予定です。

Electronの公開タイムラインはこちらで確認できます。

今後の変更に関する詳細は、計画された破壊的変更ページをご覧ください。

Electron 14.0.0

·6分で読めます

Electron 14.0.0 がリリースされました!Chromium 93 と V8 9.3 へのアップグレードが含まれています。いくつかのAPI更新、バグ修正、一般的な改善が行われました。詳細は以下をご覧ください!


Electronチームは、Electron 14.0.0 のリリースを発表できることを嬉しく思います!npm で npm install electron@latest を使用してインストールするか、リリースウェブサイトからダウンロードできます。このリリースに関する詳細を引き続き読み、フィードバックをお寄せください!

注目すべき変更点

Electron リリースカデンスの変更

2021年9月からのElectron 15では、Electronは8週間ごとに新しいメジャー安定版をリリースします。詳細については、こちらをご覧ください。Electron 15のベータ版は2021年9月1日に開始され、安定版は2021年9月21日にリリースされます。Electronの公開タイムラインはこちらで確認できます。さらに、Electronはサポート対象バージョンを、最新の3バージョンから2022年5月まで最新の4バージョンに変更します。Electronのバージョン管理に関する詳細については、バージョン管理ドキュメントをご覧ください。

スタックの変更

ハイライト機能

  • デフォルトの変更:nativeWindowOpen がデフォルトで true になりました。(ドキュメント参照)
  • 子ウィンドウは、親からの BrowserWindow 構成オプションを継承しなくなりました。#28550
  • セッション固有のデータのディスク上のパスを取得するための新しい session.storagePath API を追加しました。#28665
  • @electron/remote で使用される process.contextId を追加しました。#28007
  • Electron Fuse の背後で、試験的な Cookie 暗号化のサポートを追加しました。#29492

新機能と変更の完全なリストについては、14.0.0 のリリースノートをご覧ください。

互換性を破る変更

以下は、Electron 14 で導入された破壊的な変更点です。これらの変更点と今後の変更点の詳細については、計画された破壊的な変更ページをご覧ください。

削除:app.allowRendererProcessReuse

セキュリティ、パフォーマンス、保守性のために Chromium のプロセスモデルにより密接に合わせる計画の一環として、app.allowRendererProcessReuse プロパティが削除されました。

詳細については、#18397をご覧ください。

削除:ブラウザウィンドウの親和性

セキュリティ、パフォーマンス、保守性のために Chromium のプロセスモデルにより密接に合わせる計画の一環として、新しい BrowserWindow を構築する際の affinity オプションが削除されました。

詳細については、#18397をご覧ください。

API の変更:window.open()

オプションのパラメータ frameName は、ウィンドウのタイトルを設定しなくなりました。この動作は、windowName パラメータのネイティブドキュメントで説明されている仕様に従うようになりました。

このパラメータを使用してウィンドウのタイトルを設定していた場合は、代わりに win.setTitle(title) メソッドを使用できます。

削除:worldSafeExecuteJavaScript

worldSafeExecuteJavaScript は代替手段なしで削除されました。このプロパティを有効にしてコードが動作することを確認してください。Electron 12 以降、デフォルトで有効になっています。

webFrame.executeJavaScript または webFrame.executeJavaScriptInIsolatedWorld のいずれかを使用している場合は、この変更の影響を受けます。これらのメソッドは同じ値渡しセマンティクスを使用するため、これらのメソッドのいずれかによって返される値がContext Bridge APIでサポートされていることを確認する必要があります。

デフォルトの変更:nativeWindowOpen がデフォルトで true になりました。

Electron 14 より前は、window.open はデフォルトで BrowserWindowProxy を使用するようにシムされていました。このため、window.open('about:blank') は、同期的にスクリプト可能な子ウィンドウを開くことができませんでした。また、他の互換性の問題もありました。nativeWindowOpen は実験的なものではなくなり、現在はデフォルトになっています。

詳細については、Electron における window.open のドキュメントを参照してください。

削除:親ウィンドウから継承される BrowserWindowConstructorOptions

Electron 14 より前は、window.open で開かれたウィンドウは、親ウィンドウから transparentresizable などの BrowserWindow コンストラクタオプションを継承していました。Electron 14 以降、この動作は削除され、ウィンドウは親から BrowserWindow コンストラクタオプションを一切継承しなくなりました。

代わりに、setWindowOpenHandler を使用して新しいウィンドウのオプションを明示的に設定してください。

webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
overrideBrowserWindowOptions: {
// ...
},
};
});

削除: additionalFeatures

WebContents の new-window および did-create-window イベントで非推奨だった additionalFeatures プロパティが削除されました。new-window は位置引数を使用するため、引数はまだ存在しますが、常に空の配列 [] になります。(注:new-window イベント自体はすでに非推奨であり、setWindowOpenHandler に置き換えられています。)ウィンドウ機能のベアキーは、オプションオブジェクトで値が true のキーとして表示されるようになります。

// Removed in Electron 14
// Triggered by window.open('...', '', 'my-key')
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
// ...
}
});

// Replace with
webContents.on('did-create-window', (window, details) => {
if (details.options['my-key']) {
// ...
}
});

削除: remote モジュール

Electron 12 で非推奨となった remote モジュールは、Electron 自体から削除され、独立したパッケージ @electron/remote に抽出されました。@electron/remote モジュールは、メインプロセスからレンダラープロセスへの JavaScript オブジェクトをブリッジします。これにより、レンダラープロセスで利用可能なかのようにメインプロセスのみのオブジェクトにアクセスできます。これは remote モジュールの直接の代替です。移行手順と参照については、モジュールの README を参照してください。

API の変更

  • ウィンドウがフォーカス可能かどうかを判断するための BrowserWindow.isFocusable() メソッドが追加されました。#28642
  • WebFrameMain.visibilityState インスタンスプロパティが追加されました。#28706
  • setWindowOpenHandler で登録されたウィンドウオープンハンドラーに渡される詳細オブジェクトに dispositionreferrer、および postBody が追加されました。#28518
  • @electron/remote で使用される process.contextId を追加しました。#28007
  • Electron Fuse の背後で、試験的な Cookie 暗号化のサポートを追加しました。#29492
  • webRequest リスナーの詳細に関する不足していた resourceType 変換が追加されました: fontpingcspReportmediawebSocket#30050
  • セッション固有のデータのディスク上のパスを取得するための新しい session.storagePath API を追加しました。#28665
  • macOS での Windows コントロールオーバーレイのサポートが追加されました。#29986
  • --log-file=.../path/to/file.log で Chromium のログをファイルに送信するサポートが追加されました。また、最初の JS ティック中にコマンドラインスイッチを追加することで、JavaScript からログを有効にできるようになりました。#29963
  • node crypto で des-ede3 暗号のサポートが追加されました。#27897
  • コンテキストブリッジオブジェクトをミュータブルにできる ContextBridgeMutability 機能が追加されました。#27348

削除/非推奨の変更

以下の API は削除されたか、非推奨になりました。

  • Electron 12 で非推奨となった remote モジュールが削除されました。#25734
  • 子ウィンドウは、親からの BrowserWindow 構成オプションを継承しなくなりました。#28550
  • new-window および did-create-window WebContents イベントから非推奨の additionalFeatures プロパティが削除されました。#28548
  • 非推奨の app.allowRendererProcessReuse および BrowserWindow の affinity オプションが削除されました。#26874
  • uploadToServer が false の場合、crashReporter.startsubmitURL オプションは必須の引数ではなくなりました。#28105

11.x.y のサポート終了

Electron 11.x.y は、プロジェクトのサポートポリシーに従ってサポートが終了しました。開発者およびアプリケーションは、より新しいバージョンの Electron にアップグレードすることをお勧めします。

今後の予定

短期的には、チームがChromium、Node、V8を含むElectronを構成する主要コンポーネントの開発に対応し続けることに注力すると予想できます。リリース日については約束を控えていますが、Electronの新しいメジャーバージョンをこれらのコンポーネントの新しいバージョンとともに、約四半期ごとにリリースする予定です。

今後の Electron バージョンの計画されている破壊的変更については、計画されている破壊的変更を参照してください。

WebView2 と Electron

6分で読めます

ここ数週間、新しいWebView2 と Electron の違いについていくつかの質問が寄せられています。

両チームとも、Web テクノロジーをデスクトップで最高のものにするという共通の目標を掲げており、包括的な比較が検討されています。

Electron と WebView2 は、急速に進化し続けるプロジェクトです。今日は、Electron と WebView2 の類似点と相違点の簡単なスナップショットをまとめました。


アーキテクチャの概要

Electron と WebView2 はどちらも、Web コンテンツのレンダリングに Chromium ソースからビルドされています。厳密に言うと、WebView2 は Edge ソースからビルドされていますが、Edge は Chromium ソースのフォークを使用してビルドされています。Electron は Chrome と DLL を共有しません。WebView2 バイナリは Edge(Edge 90 時点では安定版チャネル)に対してハードリンクしているため、ディスクと一部のワーキングセットを共有します。詳細については、エバーグリーン配布モードを参照してください。

Electron アプリは、常に開発に使用した Electron の正確なバージョンをバンドルして配布します。WebView2 には、配布に 2 つのオプションがあります。アプリケーションの開発に使用した WebView2 ライブラリの正確なバージョンをバンドルするか、システムにすでに存在している可能性がある共有ランタイムバージョンを使用できます。WebView2 は、共有ランタイムが存在しない場合に備えて、ブートストラップインストーラーなど、それぞれのアプローチに対応するツールを提供します。WebView2 は、Windows 11 以降でインボックスで出荷されます。

フレームワークをバンドルするアプリケーションは、セキュリティに関するマイナーリリースを含め、これらのフレームワークを更新する責任があります。共有 WebView2 ランタイムを使用するアプリの場合、WebView2 には、アプリケーションとは独立して実行される Chrome または Edge と同様の独自のアップデーターがあります。アプリケーションのコードまたはその他の依存関係の更新は、Electron の場合と同様に、開発者の責任です。Electron も WebView2 も Windows Update では管理されません。

Electron と WebView2 はどちらも Chromium のマルチプロセスアーキテクチャを継承しています。つまり、1 つのメインプロセスが 1 つ以上のレンダラープロセスと通信します。これらのプロセスは、システムで実行されている他のアプリケーションとは完全に分離されています。すべての Electron アプリケーションは、ルートブラウザプロセス、いくつかのユーティリティプロセス、およびゼロ以上のレンダープロセスを含む、別個のプロセストレートです。同じユーザーデータフォルダ(アプリのスイートが行うような)を使用する WebView2 アプリは、レンダラー以外のプロセスを共有します。異なるデータフォルダを使用する WebView2 アプリはプロセスを共有しません。

  • ElectronJS プロセスモデル

    ElectronJS Process Model Diagram

  • WebView2 ベースのアプリケーションプロセスモデル

    WebView2 Process Model Diagram

WebView2 のプロセスモデルElectron のプロセスモデルの詳細については、こちらをご覧ください。

Electron は、メニュー、ファイルシステムアクセス、通知など、一般的なデスクトップアプリケーションのニーズに対応する API を提供します。WebView2 は、WinForms、WPF、WinUI、Win32 などのアプリケーションフレームワークに統合することを目的としたコンポーネントです。WebView2 は、JavaScript を介した Web 標準以外のオペレーティングシステム API を提供しません。

Node.js は Electron に統合されています。Electron アプリケーションは、レンダラープロセスおよびメインプロセスから Node.js API、モジュール、または node-native-addon を使用できます。WebView2 アプリケーションは、アプリケーションの残りの部分がどの言語またはフレームワークで記述されているかを想定していません。JavaScript コードは、アプリケーションホストプロセスを介してオペレーティングシステムへのアクセスをプロキシする必要があります。

Electron は、Fugu プロジェクトで開発された API を含む、Web API との互換性を維持するよう努めています。Electron の Fugu API 互換性のスナップショットがあります。WebView2 は、Edge との API の違いの同様のリストを保持しています。

Electron には、フルアクセスからフルサンドボックスまで、Web コンテンツの構成可能なセキュリティモデルがあります。WebView2 コンテンツは常にサンドボックス化されています。Electron には、セキュリティモデルの選択に関する包括的なセキュリティドキュメントがあります。WebView2 にもセキュリティのベストプラクティスがあります。

Electron ソースは GitHub で保守されており、利用可能です。アプリケーションは、独自の Electron のブランドを構築するために変更できます。WebView2 ソースは GitHub で利用できません。

簡単なまとめ

ElectronWebView2
ビルド依存関係ChromiumEdge
GitHub でソースが利用可能はいいいえ
Edge/Chrome DLL を共有いいえはい (Edge 90 時点)
アプリケーション間の共有ランタイムいいえオプション
アプリケーション APIはいいいえ
Node.jsはいいいえ
サンドボックスオプション常に
アプリケーションフレームワークが必要いいえはい
サポートされているプラットフォームMac、Win、LinuxWin (Mac/Linux は計画中)
アプリ間のプロセス共有なしオプション
フレームワークの更新を管理アプリケーションWebView2

パフォーマンスに関する議論

Web コンテンツのレンダリングに関しては、Electron、WebView2、およびその他の Chromium ベースのレンダラー間でパフォーマンスの差はほとんどないと考えています。潜在的なパフォーマンスの違いを調査することに関心のある人のために、Electron、C++ + WebView2、C# + WebView2 を使用して構築されたアプリの足場を作成しました。

Web コンテンツのレンダリング以外で考慮すべきいくつかの違いがあり、Electron、WebView2、Edge の担当者などが PWA を含む詳細な比較に取り組むことに関心を示しています。

プロセス間通信 (IPC)

ここでは、Electron アプリケーションでパフォーマンスに影響を与えることが多いと思われる 1 つの違いをすぐに強調したいと思います。

Chromium では、ブラウザプロセスはサンドボックス化されたレンダラーとシステムの他の部分との間の IPC ブローカーとして機能します。Electron ではサンドボックス化されていないレンダリングプロセスを使用できますが、多くのアプリケーションはセキュリティを強化するためにサンドボックスを有効にすることを選択しています。WebView2 では常にサンドボックスが有効になっているため、ほとんどの Electron アプリケーションと WebView2 アプリケーションでは、IPC が全体的なパフォーマンスに影響を与える可能性があります。

ElectronとWebView2は、プロセスモデルが似ていますが、基盤となるIPC(プロセス間通信)は異なります。JavaScriptとC++またはC#の間で通信するには、マーシャリングが必要です。最も一般的なのはJSON文字列への変換です。JSONのシリアライズ/パースはコストのかかる処理であり、IPCのボトルネックはパフォーマンスに悪影響を与える可能性があります。Edge 93以降、WV2はネットワークイベントにCBORを使用します。

Electronは、MessagePorts APIを介して、任意の2つのプロセス間で直接IPCをサポートしています。このAPIは、構造化クローンアルゴリズムを利用しています。これを利用するアプリケーションは、プロセス間でオブジェクトを送信する際にJSONシリアライズのコストを回避できます。

まとめ

ElectronとWebView2には多くの違いがありますが、Webコンテンツのレンダリングパフォーマンスに関しては大きな違いはないでしょう。結局のところ、アプリのアーキテクチャやJavaScriptライブラリ/フレームワークの方が、メモリやパフォーマンスに大きな影響を与えます。なぜなら、Chromiumはどこで実行されてもChromiumだからです。

この投稿をレビューし、WebView2アーキテクチャの最新情報を提供してくれたWebView2チームに感謝します。彼らはプロジェクトに関するフィードバックを歓迎しています。

新しい Electron リリースカデンス

·6分で読めます

2021年9月以降、Electronは8週間ごとに新しいメジャー安定版をリリースします。


2019年、ElectronはChromiumの6週間のリリースサイクルに合わせて12週間のリリースサイクルに移行しました。最近、ChromeとMicrosoftの両方が変更を発表し、Electronの現在のリリースサイクルを再検討することになりました。

  1. Chromiumは、2021年9月21日のChrome 94から、4週間ごとに新しいマイルストーンをリリースする予定です。このリリースサイクルには、8週間ごとにすべてのセキュリティ修正を含む新しい拡張安定版オプションも追加されます。

  2. Microsoft Storeは、Chromiumベースのアプリが2つ前のメジャーバージョンより古くないことを要求します。たとえば、Chromiumの最新のメジャーバージョンが85の場合、Chromiumをベースとするすべてのブラウザは、少なくともChromiumバージョン83以上である必要があります。このルールにはElectronアプリも含まれます。

2021年9月以降、ElectronはChromiumの8週間の拡張安定版リリースに合わせて、8週間ごとに新しいメジャー安定版をリリースします。

Chromium拡張安定版を初めて採用したリリースは、2021年9月21日Electron 15になります。

リリースサイクルの変更が他の下流アプリケーションに影響を与えることを考慮し、できるだけ早く開発者コミュニティに知らせたいと考えました。2021年のリリーススケジュールに関する詳細は以下をお読みください。

Electron 15: 一時的なアルファ版

当初のElectron 15のリリースが拡張安定版ではないバージョン(Chromiumの拡張安定版は偶数番号のバージョンに基づいています)をターゲットとしていたため、当初のリリース目標日を変更する必要がありました。しかし、ElectronアプリはMicrosoft Storeに受け入れられるために、Chromiumの最新の2つのメジャーバージョンを使用する必要があり、2つのChromiumバージョンを待つのは現実的ではありませんでした。

これらの2つの要件により、私たちのチームはタイミングのジレンマに直面しました。Electron 15をChromium M94を含めるように移行すると、アプリ開発者は最初のChromiumの拡張安定版を入手できます。しかし、ベータ版から安定版へのサイクルがわずか3週間に短縮されます。

この切り替えを支援するために、Electronは、Electron 15リリースでのみ、一時的なアルファ版ビルドを提供します。このアルファ版ビルドにより、開発者は現在のナイトリー版よりも安定したビルドで、Electron 15のリリースをテストおよび計画する時間を長く確保できます。

アルファチャンネルのビルドは、2021年7月20日Electron 15向けに出荷されます。これは、2021年9月1日にベータ版リリースに移行し、2021年9月21日を安定版リリースの目標とします。その後のElectronリリースにはアルファ版リリースはありません。

2021年のリリース計画

以下は、2021年の現在のリリーススケジュールです。

ElectronChromeアルファ版リリースベータ版リリース安定版リリース安定版サイクル(週)
E13M91-2021-03-052021-05-2512
E14M93-2021-05-262021-08-3114
E15M942021-07-202021-09-012021-09-219(アルファ版を含む)
E16M96-2021-09-222021-11-168
E17M98-2021-11-172022-02-0111

アルファチャンネルを追加すると、Electron 15のリリース前の開発期間が3週間から9週間に延長され、新しい8週間のサイクルに近づき、Windows Storeへの提出要件を満たすことができます。

アプリ開発者をさらに支援するために、2021年の残りの期間から2022年5月まで、サポートされるバージョンのポリシーを最新の3バージョンから最新の4バージョンに拡張します。つまり、アップグレードスケジュールをすぐに変更できない場合でも、古いバージョンのElectronはセキュリティアップデートと修正を引き続き受け取ります。

懸念事項への対応

このリリースサイクル変更が予定されるかなり前に、この投稿を公開する理由があります。リリースサイクルが速くなると、Electronアプリに実際の影響があることを認識しています。その中には、すでに私たちのメジャーリリースサイクルがアグレッシブだと感じているアプリもあるかもしれません。

以下に、一般的な懸念事項について説明を試みました。

❓ なぜこの変更を行うのですか?12週間のリリースサイクルを維持しないのですか?

Electronに最新バージョンのChromiumを提供するには、私たちのスケジュールをChromiumのスケジュールに合わせる必要があります。Chromiumのリリースサイクルに関する詳細については、こちらをご覧ください。

さらに、現在の12週間のリリースサイクルは、Microsoft Storeの新しい提出要件では維持できません。Electronの最新の安定版を使用しているアプリでさえ、新しいセキュリティ要件の下でアプリが拒否される可能性のある期間が約2週間発生します。

すべての新しいChromiumリリースには、新機能、バグ修正/セキュリティ修正、およびV8の改善が含まれています。アプリ開発者として、これらの変更をタイムリーに受け取っていただきたいと考えているため、安定版リリース日は今後もすべてのChromium安定版リリースと一致させます。アプリ開発者として、以前よりも早く新しいChromiumおよびV8の機能と修正にアクセスできるようになります。

❓ 既存の12週間のリリーススケジュールでもすでにペースが速いです。チームはアップグレードを容易にするためにどのようなステップを踏んでいますか?

リリース頻度が高いことの利点の1つは、リリースが小さくなることです。Electronのメジャーバージョンのアップグレードが困難になる可能性があることは理解しています。より小さなリリースでは、ChromiumとNodeのメジャーな変更、およびリリースごとの破壊的な変更が少なくなることを期待しています。

❓ 将来のElectronバージョンでアルファ版リリースが利用可能になりますか?

現時点では、永続的なアルファ版リリースをサポートする予定はありません。このアルファ版は、リリース期間が短縮された中で、開発者がより簡単にアップグレードできるように、Electron 15でのみ提供される予定です。

❓ Electronはサポートされるバージョンの数を拡張しますか?

Electron 19のリリースまで、サポートされるバージョンポリシーを最新の3バージョンから最新の4バージョンに拡張します。Electron 19がリリースされたら、最新の3つのメジャーバージョン、ベータ版、およびナイトリー版のサポートに戻ります。

E13 (2021年5月)E14 (2021年8月)E15 (2021年9月)E16 (2021年11月)E17 (2022年2月)E18 (2022年3月)E19 (2022年5月)
13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y19.x.y
12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y
11.x.y12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y
----12.x.y13.x.y14.x.y15.x.y--

質問はありますか?

📨 ご質問やご不明な点がございましたら、info@electronjs.orgまでメールでお問い合わせいただくか、Discordに参加してください。この変更が多くのアプリや開発者に影響を与えることを認識しており、皆様からのフィードバックは私たちにとって非常に重要です。皆様からのご意見をお待ちしております!

Electron 13.0.0

·3 分で読めます

Electron 13.0.0がリリースされました!Chromium 91およびV8 9.1へのアップグレードが含まれています。いくつかのAPIの更新、バグ修正、および一般的な改善が追加されました。詳細については以下をお読みください!


ElectronチームはElectron 13.0.0のリリースを発表できることを嬉しく思います!npm経由でnpm install electron@latestでインストールするか、リリースWebサイトからダウンロードできます。このリリースに関する詳細については以下をお読みください。フィードバックがあれば共有してください!

注目すべき変更点

スタックの変更

ハイライト機能

  • 現在のレンダラーコンテキストでcontextIsolationが有効になっているかどうかを示すprocess.contextIsolatedプロパティが追加されました。#28252
  • セッション固有のデータのディスク上のパスを取得するための新しいsession.storagePath APIが追加されました。#28866
  • WebContentsnew-windowイベントは非推奨になりました。これはwebContents.setWindowOpenHandler()に置き換えられます。
  • @electron/remoteで使用されるprocess.contextIdが追加されました。#28251

新機能と変更点の全リストについては、13.0.0 のリリースノートをご覧ください。

互換性を破る変更

  • window.open() のパラメータ frameName がウィンドウタイトルとして設定されなくなりました。#27481
  • session.setPermissionCheckHandler(handler) が、handler の最初のパラメータである webContentsnull を許可するように変更されました。#19903

これらの変更点と今後の変更点の詳細については、計画されている破壊的変更のページをご覧ください。

API の変更

  • BrowserWindowroundedCorners オプションが追加されました。#27572
  • セッション固有のデータのディスク上のパスを取得するための新しい session.storagePath API が追加されました。28866
  • コンテキストブリッジを介して DOM 要素を渡すためのサポートが追加されました。#26776
  • サンドボックス化されたレンダラーに process.uptime() が追加されました。#26684
  • context-menu イベントの一部として発行されるパラメータに、欠落していたフィールドが追加されました。#26788
  • Manifest V3 拡張機能サービスワーカーの登録サポートが追加されました。
  • ServiceWorker に 'registration-completed' イベントが追加されました。#27562

削除/非推奨の変更

以下の API は削除されたか、非推奨になりました。

  • WebContentsnew-windowイベントは非推奨になりました。これはwebContents.setWindowOpenHandler()に置き換えられます。

  • 非推奨の shell.moveItemToTrash() が削除されました。#26723

  • 以下の非推奨の BrowserWindow 拡張 API が削除されました。

    • BrowserWindow.addExtension(path)
    • BrowserWindow.addDevToolsExtension(path)
    • BrowserWindow.removeExtension(name)
    • BrowserWindow.removeDevToolsExtension(name)
    • BrowserWindow.getExtensions()
    • BrowserWindow.getDevToolsExtensions()

    代わりに session API を使用してください。

    • ses.loadExtension(path)
    • ses.removeExtension(extension_id)
    • ses.getAllExtensions()
  • 以下の systemPreferences メソッドは非推奨になりました。

    • systemPreferences.isDarkMode()
    • systemPreferences.isInvertedColorScheme()
    • systemPreferences.isHighContrastColorScheme()

    代わりに、以下の nativeTheme プロパティを使用してください。

    • nativeTheme.shouldUseDarkColors
    • nativeTheme.shouldUseInvertedColorScheme
    • nativeTheme.shouldUseHighContrastColors

10.x.y のサポート終了

Electron 10.x.y は、プロジェクトのサポートポリシーに従い、サポート終了となりました。開発者とアプリケーションは、より新しいバージョンの Electron にアップグレードすることを推奨します。

今後の予定

短期的には、チームは Chromium、Node、V8 を含む Electron を構成する主要コンポーネントの開発に追いつくことに引き続き注力する予定です。リリース日については確約を避けますが、これらのコンポーネントの新しいバージョンを使用して、約四半期ごとに Electron の新しいメジャーバージョンをリリースする予定です。暫定的な 14.0.0 のスケジュールは、Electron 14.0 の開発ライフサイクルにおける主要な日付を示しています。また、Electron のバージョン管理の詳細については、バージョン管理に関するドキュメントをご覧ください。

今後のバージョンの Electron で計画されている破壊的変更については、計画されている破壊的変更に関するドキュメントをご覧ください。