メインコンテンツへ飛ぶ

· 読むのにかかる時間 1 分

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


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

なぜ Spectron を非推奨にするのですか?

Spectron は Electron の新バージョンが出るたびに、一貫して新しいリリースを出してきていました。しかしこのプロジェクトは 1 年以上小さなメンテナンスや改良しか行われておらず、現在フルタイムのメンターはいません。 Electron 14 では remote モジュールが Electron コアから外部モジュールに移行するため、Spectron が確実に動作し続けるためには大幅な書き換えが必要です。

Spectron のメンテナンス継続のいくつかの選択肢を検討した結果、Electron チームは 2022 年で Spectron を非推奨にすることを決定しました。

非推奨のタイムライン

予定の非推奨タイムラインは以下の通りです。

  • 2021 年 11 月 - 2022 年 1 月: Electron チームは引き続きコミュニティからのプルリクエストを受け付けます。
  • 2022 年 1 月: Spectron の非推奨に関する警告の最終版を公開します。
  • 2022 年 2 月 1 日: Spectron のレポジトリを「archived」にします。 これ以降のプルリクエストは受け付けられません。

2022 年 2 月 1 日以降、Electron は Spectron のレポジトリを無期限に保存し、他の人がフォークしたり、既存コードを自分のプロジェクトに利用したりできるようにします。 これにより、Spectron に依存するプロジェクトの移行もよりスムーズに行われることを期待しています。

Spectron の代替

プロジェクトで現在 Spectron を使用していて、別のテストソリューションに移行したい場合は、こちらの自動テストに関するガイド をご覧ください。

現在は Spectron に代わって推奨される代替品として、Playwright や WebDriverIO などがあります。 各選択肢ごとの公式チュートリアルも、この自動テストのドキュメントに記載しております。

次回予告

私たち Electron チームとしましては、Spectron と Electron をご利用いただき感謝しております。 多くのお客様がアプリケーションのテストに Spectron をご利用なされていることは承知しており、この移行をできる限りスムーズに行いたいと考えています。 Electron を選んでくださりありがとうございます!

· 読むのにかかる時間 1 分

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 をご覧ください。

動作変更: crashReporter の実装を Linux の 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 にて、2022 年 5 月の Electron 19 までの間だけ、サポートするバージョンを最新の 3 つのバージョンから最新の 4 つのバージョンに変更しています。 Electron 19 以降は、最新の 3 つのバージョンのサポートに戻ります。 このバージョンサポートの変更は、新しいケイデンス変更の一環です。 完全な詳細についてはこちらのブログ記事 をご参照ください。

E15 (Sep'21)E16 (Nov'21)E17 (Feb'22)E18 (Mar'22)E19 (May'22)
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 を構成する主要コンポーネントの開発に遅れないでチームが注力し続けるでしょう。 リリース日について約束しないように注意していますが、予定では 2 か月ごとに新しいメジャーバージョンの Electron を、各コンポーネントの新しいバージョンに対してリリースします。

Electron の公開タイムラインはこちら になります。

将来の変更の詳細については、予定されている破壊的変更 のページをご参照ください。

· 読むのにかかる時間 1 分

Electron プロジェクトは 2021 年 12 月の 1 ヶ月間休止し、2022 年 1 月から全力に戻ります。

GIPHY より


12 月でも変わらないこと

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

12 月で変わること

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

なぜこのようなことが起こるのですか?

要するに、メンテナは喜んでプロジェクトに従事するものの、世間は疲れています。 12 月は多くの企業にとって安息月であるため、私たちはメンテナに英気を養う機会を与えたいと考えています。 他のプロジェクトでも同様の措置を検討していただければ幸いです。

Electron の将来を心配したほうがよいでしょうか?

いいえ。 このような選択を取れるのは、プロジェクトが順調に進んでいるからです。 開発者一同 2022 年が楽しみで、きっと良いことが起こると期待しています!

· 読むのにかかる時間 1 分

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


Electron チームは、Electron 15.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 このリリースの詳細については下に続きます。是非ご意見をお聞かせください!

注目すべき変更

Electron リリースケイデンスの変更

Electron 15 から、Electron は 8 週間ごとに新規メジャー安定版をリリースするようになります。 詳細はこちら でご覧いただけます。

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

累積的変更

注目の機能

  • nativeWindowOpen: true は実験的でなくなり、既定値になります。
  • safeStorage 文字列暗号化APIを追加しました。 #30430
  • ページにフレームが作成されたときに発生する「フレーム作成」イベントを 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 の変更

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

削除/非推奨となった変更

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

サポートされているバージョン

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

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

E15 (Sep'21)E16 (Nov'21)E17 (Feb'22)E18 (Mar'22)E19 (May'22)
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 の公開タイムラインはこちら になります。

将来の変更の詳細については、予定されている破壊的変更 のページをご参照ください。

· 読むのにかかる時間 1 分

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


Electron チームは、Electron 14.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 このリリースの詳細については下に続きます。是非ご意見をお聞かせください!

注目すべき変更

Electron リリースケイデンスの変更

2021 年 9 月の Electron 15 から、Electron は 8 週間ごとに安定版の新規メジャーバージョンをリリースします。 詳細はこちら でご覧いただけます。 Electron 15 は 2021 年 9 月 1 日にベータ版を開始し、2021 年 9 月 21 日に安定版のリリースを予定しています。 Electron の公開タイムラインはこちら になります。

また、Electron は 2022 年 5 月まで、サポートするバージョンを最新の 3 つのバージョンから最新の 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

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

詳細は #18397 を参照してください。

削除: Browser Window の Affinity

BrowserWindow を新規構築する際の affinity オプションは、セキュリティ、パフォーマンス、保守性のために Chromium のプロセスモデルとの共同連携計画の一環として削除されました。

詳細は #18397 を参照してください。

API 変更: window.open()

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

この引数でウィンドウのタイトルを設定していた場合は、代わりに win.setTitle(title) を利用できます。

削除: worldSafeExecuteJavaScript

worldSafeExecuteJavaScript が削除され、この代替手段もなくなりました。 このプロパティを有効にした状態でコードが動作するようにしてください。 これは Electron 12 からデフォルトで有効になっています。

webFrame.executeJavaScriptwebFrame.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 の値を持つキーとして表示されるようになりました。

// Electron 14 で削除
// window.open('...', '', 'my-key') で動く
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
// ...
}
})

// こちらに置換
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 で登録するウインドウを開くときのハンドラに渡される details オブジェクトに、dispositionreferrerpostBody を追加しました。 #28518
  • @electron/remote で使用されている process.contextId を追加しました。 #28007
  • Electron Fuse の下で実験的な Cookie 暗号化のサポートを追加しました。 #29492
  • webRequest リスナーの details に不足していた resourceType である、fontpingcspReportmediawebSocket の変換を追加しました。 #30050
  • セッション固有のデータに対するディスク上のパスを取得するために新しく session.storagePath API を追加しました。 #28665
  • macOS でのウインドウコントロールオーバーレイの対応を追加しました。 #29986
  • --log-file=.../path/to/file.log で Chromium のログをファイルへ指定するサポートを追加しました。 また、最初の JavaScript ティックにてコマンドラインスイッチを追加することで、JS からログを有効化できるようになりました。 #29963
  • node の crypto における des-ede3 暗号のサポートを追加しました。 #27897
  • コンテキストブリッジオブジェクトを可変にできる ContextBridgeMutability 機能を追加しました。 #27348

削除/非推奨となった変更

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

  • remote モジュールは Electron 12 で非推奨となり、削除されました。 #25734
  • 子ウィンドウが親ウィンドウの BrowserWindow のコンストラクタのオプションを継承しなくなりました。 #28550
  • WebContents のイベントの new-windowdid-create-window にて、非推奨となっていた 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 で予定されている破壊的変更の詳細については、予定されている破壊的変更 をご参照ください。

· 読むのにかかる時間 1 分

この数週間で、新しい WebView2 と Electron の違いについていくつかご質問をいただきました。

両チームとも、ウェブ技術をデスクトップ上で最高のものにするという目標を掲げているため、共通点の総合的な比較を検討してみましょう。

Electron と WebView2 は、行動が早く、常に進化しているプロジェクトです。 現在の Electron と WebView2 の共通点と相違点を簡単にまとめてみました。


アーキテクチャの概要

Electron と WebView2 はどちらも、ウェブコンテンツのレンダリングに Chromium ソースを使用しています。 厳密には WebView2 は Edge のソースからビルドされています。しかし、Edge は Chromium のソースをフォークしてビルドされています。 Electron は Chrome と DLL を共有していません。 WebView2 のバイナリは、Edge (Edge 90 の安定チャンネル) をハードリンクしているので、ディスクや一部の動作セットを共有しています。 詳細は Evergreen ディストリビューションモード をご参照ください。

Electron アプリは、常に開発時のバージョンの Electron をバンドルして頒布しています。 WebView2 では、頒布にあたって 2 つの選択肢があります。 アプリケーションが開発された WebView2 ライブラリをそのままバンドルすることもできますし、システム上に既存の共有ランタイム版を使用することもできます。 WebView2 は、共有ランタイムが見つからない場合のブートストラップインストーラーを含む、各手段向けのツールを提供しています。 WebView2 は、Windows 11 から 標準で 付属します。

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

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

  • ElectronJS プロセスモデル:

    ElectronJS プロセスモデル図

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

    WebView2 プロセスモデル図

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

Electron は、メニュー、ファイルシステムへのアクセス、通知など、デスクトップアプリケーションの一般的需要に応える API を提供します。 WebView2 は、WinForms、WPF、WinUI、Win32 などのアプリケーションフレームワークに統合されることを目的としたコンポーネントです。 WebView2 は JavaScript によるウェブ規格外の OS API を提供しません。

Electron は Node.js を統合しています。 Electron アプリケーションは、レンダラープロセスやメインプロセスから Node.js API、モジュール、Node ネイティブアドオンを利用できます。 WebView2 アプリケーションは、アプリケーションの他の部分が書かれている言語やフレームワークを前提にしていません。 JavaScript コードからオペレーティングシステムへアクセスするには、アプリケーションホストプロセスを介する必要があります。

Electron は、Fugu Project が開発した API を含むウェブ API との互換性を維持するよう努めています。 こちらに Electron の Fugu API 対応状況のスナップショット を用意しました。 WebView2 では、Edge との API の違い について同様のリストを作成しています。

Electron でのウェブコンテンツのセキュリティモデルは、フルアクセスからフルサンドボックスまで設定可能です。 WebView2 のコンテンツは常にサンドボックス化されます。 Electron はセキュリティモデルの選択について、包括的なセキュリティドキュメント を用意しています。 WebView2 にも セキュリティのベストプラクティス が用意されています。

Electron のソースは GitHub 上でメンテンスされており、自由に利用できます。 アプリケーションは、Electron の独自 ブランド を構築できるように変更を加えられます。 WebView2 のソースは GitHub 上で利用できません。

簡単な概要:

ElectronWebView2
ビルドの依存関係Chromiumエッジ
GitHub 上でコードが利用可能ありなし
Edge/Chrome DLL の共有なしあり (Edge 90 のもの)
アプリケーション間でのランタイム共有なし任意
アプリケーション APIありなし
Node.jsありなし
サンドボックス任意常時
アプリケーションフレームワークの必要性なしあり
サポートされているプラットフォームMac, Win, LinuxWin (Mac/Linux は計画中)
アプリ間でのプロセス共有なし任意
フレームワークの更新機構アプリケーションWebView2

パフォーマンスの議論

ウェブコンテンツのレンダリングに関しては、Electron、WebView2、その他 Chromium ベースのレンダラーの間におけるパフォーマンスの差はほとんどないと考えています。 私たちは、潜在的なパフォーマンスの違いを調査するご興味のある方向けに Electron、C++ + WebView2、C# + WebView2 で構築したアプリの土台 を作成しました。

ウェブコンテンツのレンダリング 以外 にもいくつかの違いがあり、Electron、WebView2、Edge などの関係者は、PWA を含めた詳細な比較を行うことに興味を示しています。

プロセス間通信 (IPC)

プロセス間通信は、Electron アプリでのパフォーマンスを考慮する必要があるでしょう。これにはすぐに強調すべき違いがあります。

Chromium では、サンドボックス化したレンダラーとシステムの他の部分との間で、ブラウザプロセスが IPC ブローカーとして機能します。 Electron ではサンドボックスのないレンダープロセスにできますが、多くのアプリはセキュリティ強化のためにサンドボックスを有効にしています。 WebView2 は常にサンドボックスが有効なので、ほとんどの Electron および WebView2 アプリでは IPC が全体のパフォーマンスに影響を与えます。

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

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

概要

Electron と WebView2 にはいくつかの違いがありますが、ウェブコンテンツのレンダリング方法に関しては大きな違いはありません。 最終的には、アプリケーションのアーキテクチャと JavaScript ライブラリ/フレームワークが、メモリとパフォーマンスに何よりも大きな影響を与えます。なぜなら、実行箇所に関わらず Chromium は Chromium だからです。

この記事をレビューしてくださり、WebView2 アーキテクチャの最新情報を提供して頂いた WebView2 チームに感謝します。 WebView2 チームの皆さんは プロジェクトのフィードバック を歓迎しています。

· 読むのにかかる時間 1 分

2021 年 9 月から、Electron は 8 週間ごとに新規メジャー安定版をリリースするようになります。


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

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

  2. Microsoft Store では、Chromium ベースのアプリが最新から 2 つのメジャーバージョン以内であることを要求するようになります。 例えば、Chromium の最新のメジャーバージョンが 85 の場合、Chromium をベースにしたブラウザは最低でも Chromium バージョン 83 以上でなければなりません。 このルールは Electron アプリも含みます。

Chromium の 8 週間の拡張安定版リリースに合わせて、Electron は 2021 年 9 月より 8 週間ごとに新しいメジャー安定版をリリースする予定です

Chromium 拡張安定版での最初のリリースは、Electron 152021 年 9 月 21 日 になります。

リリースケイデンスの変更は下流の他のアプリケーションにも影響を与えることがわかっているため、できるだけ早く開発者コミュニティに知らせたいと思っております。 2021 年のリリーススケジュールの詳細はこちらをご覧ください。

Electron 15: 臨時アルファ

当初の Electron 15 のリリースは拡張安定版ではないバージョンを対象としていたため (Chromium の拡張安定版バージョンは偶数番号のバージョンをベースにしています)、当初の目標リリース日を変更する必要がありました。 しかし、Electron アプリを Microsoft Store に登録するためには Chromium の最新から 2 つ以内のメジャーバージョンを使用する必要がありましたが、Chromium のバージョンを 2 つ待つことはできません。

この 2 つの要件を満たそうと、チームはタイミングのジレンマに陥りました。 Electron 15 に Chromium M94 を搭載することで、アプリケーション開発者は Chromium の最初の拡張安定版バージョンを利用できるようになりますが、ベータ版から安定版へのサイクルはわずか 3 週間にまで短くなります。

この切り替えを支援するため、Electron は Electron 15 リリースのみを対象とした臨時の アルファビルド を提供します。 このアルファビルドは開発者が Electron 15 のリリースに向けてテストや計画を立てるための時間を確保するためのもので、現在の nightly よりも安定したビルドになっています。

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

2021 年のリリース計画

現在の 2021 年のリリース予定は以下の通りです。

ElectronChromeアルファリリースベータリリース安定版リリース安定版の周期 (週間)
E13M91-2021-Mar-052021-May-2512
E14M93-2021-May-262021-Aug-3114
E15M942021-Jul-202021-Sep-012021-Sep-219 (アルファを含む)
E16M96-2021-Sep-222021-Nov-168
E17M98-2021-Nov-172022-Feb-0111

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

アプリ開発者をさらに支援するために、2021 年の残りの期間から 2022 年 5 月まで、サポートされるバージョンのポリシーを最新 3 バージョンから最新 4 バージョンの Electron に拡張することも決定しました。つまり、アップグレードのスケジュールをすぐに変更できなくても、古いバージョンの Electron にはセキュリティアップデートや修正プログラムが提供されるということです。

懸念事項への対応

リリースサイクルの変更予定よりかなり前に、この記事を公開しているのには理由があります。 リリースサイクルの高速化は、Electron アプリに大きな影響を与えると考えています。中には、私たちのメジャーリリースのペースがすでに積極的すぎると感じている人もいるかもしれません。

以下に、よくある質問をまとめてみました。

❓ なぜこの変更を行うのでしょうか? 12 週間のリリース周期を維持しないのですか?

Electron で Chromium の最新バージョンを提供するには、そのスケジュールを追う必要があります。 Chromium のリリースサイクルに関する詳細は こちら を参照してください。

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

Chromium の各新規リリースには、新機能、バグ修正/セキュリティ修正、V8 の改善が含まれています。 アプリ開発者の皆様にはこれらの変更をタイムリーに受けていただきたいので、安定版のリリース日は他の Chromium 安定版のリリース日と一致させています。 アプリケーション開発者は、Chromium や V8 の新機能や修正に、これまでよりも早くアクセスできるようになります。

❓ 既存の 12 週間のリリーススケジュールでも、既に早いです。 アップグレードを容易にするには、チームでどのような段階を踏めばよいでしょうか?

より頻繁にリリースすることの利点は、より小さい リリースができることです。 Electron のメジャーバージョンのアップグレードは大変だと思います。 リリースを小さくするほど、1 回のリリースにおける Chromium や Node のメジャーの変更や破壊的変更が少なくなることを期待しています。

❓ 今後の Electron のバージョンに対応したアルファ版のリリースはありますか?

現時点では、恒久的にアルファリリースをサポートする予定はありません。 このアルファは Electron 15 のみを対象としており、短いリリース期間の中で開発者がより簡単にアップグレードできるようにするためのものです。

❓ Electron はバージョンのサポート数を増やしていくのでしょうか?

2022 年 5 月の Electron 19 のリリースまでは、サポートバージョンポリシーを最新 3 つから最新 4 つのバージョンに拡張する予定です。 Electron 19 のリリース後は、ベータや nightly リリースと同じく 最新のメジャーバージョン 3 つ をサポートする体制に戻ります。

E13 (May'21)E14 (Aug'21)E15 (Sep'21)E16 (Nov'21)E17 (Feb'22)E18 (Mar'22)E19 (May'22)
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 に参加して ご連絡ください。 この変更が多くのアプリケーションや開発者に影響を与えることは承知しており、皆様からのフィードバックは私たちにとって非常に重要です。 ご連絡をお待ちしております!

· 読むのにかかる時間 1 分

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


Electron チームは、Electron 13.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 このリリースの詳細については下に続きます。是非ご意見をお聞かせください!

注目すべき変更

累積的変更

注目の機能

  • process.contextIsolated プロパティを追加しました。これは現在のレンダラーコンテキストで contextIsolation が有効かどうかを示します。 #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 で予定されている破壊的な変更の詳細については、予定されている破壊的な変更のドキュメントを参照してください

· 読むのにかかる時間 1 分

Electron 12.0.0 がリリースされました! これには Chromium 89、V8 8.9、Node.js 14.16 へのアップグレードが含まれています。 remote モジュールの変更、contextIsolation の新しい既定値、新しい webFrameMain API の追加、一般的な改善を行いました。 詳しくは以下をご覧ください!


Electron チームは、Electron 12.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 このリリースの詳細については下に続きます。是非ご意見をお聞かせください!

注目すべき変更

累積的変更

注目の機能

  • ContextBridge の exposeInMainWorld メソッドが、非オブジェクトの API を公開できるようになりました。 #26834
  • Node 12 から Node 14 へアップグレードしました。 #23249
  • メインプロセスから WebContents インスタンスのサブフレームにアクセスするため、新しく webFrameMain API を追加しました。 #25464
  • contextIsolationworldSafeExecuteJavaScript の既定値が true になりました。 #27949 #27502

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

破壊的変更

これらの変更と将来の変更の詳細については、予定されている破壊的な変更 のページを参照してください。

API の変更

  • webFrameMain API の追加: webFrameMain モジュールは、既存の WebContents インスタンス間を横断したフレーム探索に利用できます。 これはメインプロセスにおける既存の webFrame API と等価なものです。 この新しい API の詳細については、こちらドキュメント を参照してください。
  • app API の変更:
    • ローカライズされない serviceName'child-process-gone' / app.getAppMetrics() に追加しました。 #25975
    • Apple シリコン上の Rosetta で動作していることを検出する app.runningUnderRosettaTranslation プロパティを新たに追加しました。 #26444
    • render-process-gone の詳細に exitCode を追加しました (app と webContents)。 #27677
  • BrowserWindow API の変更:
    • BrowserWindow.isTabletMode() API を追加しました。 #25209
    • resized (Windows/macOS) と moved (Windows) イベントを BrowserWindow に追加しました。 #26216
    • システムコンテキストメニューの抑制とオーバーライドができる system-context-menu イベントを追加しました。 #25795
    • BrowserView を手前に移動できる win.setTopBrowserView() を追加しました。 #27713
    • webPreferences.preferredSizeMode を追加しました。これにより document の最小サイズに応じてビューのサイズを変更できます。 #25874
  • contextBridge API の変更:
    • ContextBridge の exposeInMainWorld メソッドが、非オブジェクトの API を公開できるようにしました。 #26834
  • display API の変更:
    • Display オブジェクトに displayFrequency プロパティを追加し、Windows でのリフレッシュレートに関する情報を取得できるようにしました。 #26472
  • extensions API の変更:
    • いくつかの chrome.management API のサポートを追加しました。 #25098
  • MenuItem API の変更:
    • macOS 共有メニュー表示のサポートを追加しました。 #25629
  • net API の変更:
    • net.request() に新しく credentials オプションを追加しました。 #25284
    • 現在インターネットに接続しているかどうかを検出する net.online を追加しました。 #21004
  • powerMonitor API の変更:
    • powerMonitor.onBatteryPower を追加しました。 #26494
    • macOS 上での powerMonitor に高速なユーザー切り替えイベントを追加しました。 #25321
  • session API の変更:
    • ses.loadExtension() API に allowFileAccess オプションを追加しました。 #27702
    • session.setPermissionRequestHandler のために display-capture API を追加しました。 #27696
    • session.setSSLConfigdisabledCipherSuites オプションを追加しました。 #25818
    • extension-loadedextension-unloadedextension-ready イベントを session に追加しました。 #25385
    • SSL の構成ができるように session.setSSLConfig() を追加しました。 #25461
    • session.setProxy() のモードへ directauto_detectsystem のいずれかを明示的に指定するサポートを追加しました。 #24937
    • Serial API サポートを追加しました。 #25237
    • スペルチェッカーを有効/無効にする API を追加しました。 #26276
  • shell API の変更:
    • 同期 API の shell.moveItemToTrash() に代わり、新しく非同期のshell.trashItem() API を追加しました。 #25114
  • webContents API の変更:
    • レンダラーのクラッシュのデバッグに役立つよう、コンソールに小さなコンソールヒントを追加しました。 #25317
    • webRequest ハンドラーの details オブジェクトに framewebContents のプロパティを追加しました。 #27334
    • ハングしたレンダラーの回復を支援するため、レンダラープロセスを強制的に終了させる webContents.forcefullyCrashRenderer() を追加しました。 #25580
    • レンダラーが作成した子ウィンドウ用の setWindowOpenHandler API を追加し、new-window イベントを非推奨にしました。 #24517
  • webFrame API の変更:
    • レンダラーにスペルチェックの API を追加しました。 #25060

削除/非推奨となった変更

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

  • remote モジュールを非推奨にしました。 これは @electron/remote に置き換えられます。 #25293
  • 非推奨だった crashReporter API を削除しました。 #26709
  • パッケージアプリのデフォルトの 'ヘルプ' メニューにある Electron ウェブサイトへのリンクを削除しました。 #25831

9.x.y サポート終了

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

次回予告

短期的には、Chromium、Node、V8 といった Electron を構成する主要コンポーネントの開発に遅れないでチームが注力し続けるでしょう。 リリース日について約束しないように注意していますが、予定では約四半期ごとに新しいメジャーバージョンの Electron を、各コンポーネントの新しいバージョンに対してリリースします。 仮 13.0.0 スケジュール では、Electron 13.0 開発ライフサイクルの主要な日付を示してあります。 また、Electron のバージョン管理の詳細については バージョン管理のドキュメントを参照 してください。

今後のバージョンの Electron で予定されている破壊的な変更の詳細については、予定されている破壊的な変更のドキュメントを参照してください

· 読むのにかかる時間 1 分

Electron 11.0.0 がリリースされました! これには Chromium 87、V8 8.7、Node.js 12.18.3 へのアップグレードが含まれています。 Apple Sillicon のサポート追加に、ほか一般的な改善となりました。 詳しくは以下をご覧ください!


Electron チームは、Electron 11.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 今回のリリースでは、アップグレード、修正、Apple の M1 ハードウェアの新規サポートなどが盛り込まれています。

新機能たちと共に何を作るのか、楽しみにしています! このリリースの詳細については下に続きます。是非ご意見をお聞かせください!

注目すべき変更

累積的変更

注目の機能

  • Apple M1 に対応: 11 月 10 日、Apple は 今後のハードウェア に内蔵される新しい M1 チップを発表しました。 Electron 11 から、Intel Mac (x64) 用と Apple の次期 M1 ハードウェア (arm64) 用の別々のバージョンを頒布する予定です。 Electron アプリを Apple の M1 ハードウェア上で動作させる方法については、こちら を参照してください。 #24545
  • crashReport の引数に V8 のクラッシュメッセージと位置情報を追加しました。 #24771
  • コンテキストブリッジを介して大きめのオブジェクトを送信する際のパフォーマンスを改善しました。 #24671

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

破壊的変更

  • 実験的 API の削除: BrowserView.{fromId, fromWebContents, getAllViews}BrowserViewid プロパティ。 #23578

これらの変更と将来の変更の詳細については、予定されている破壊的な変更 のページを参照してください。

API の変更

  • 特定のプロトコルを扱うアプリの詳細情報を返す API app.getApplicationInfoForProtocol() を追加しました。 #24112
  • ファイルのパスと最大サムネイルサイズを指定するとファイルのプレビュー画像を返す API app.createThumbnailFromPath() を追加しました。 #24802
  • ハングしたレンダラーの回復を支援するため、レンダラープロセスを強制的に終了させる webContents.forcefullyCrashRenderer() を追加しました。 #25756

8.x.y サポート終了

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

次回予告

短期的には、Chromium、Node、V8 といった Electron を構成する主要コンポーネントの開発に遅れないでチームが注力し続けるでしょう。 リリース日について約束しないように注意していますが、予定では約四半期ごとに新しいメジャーバージョンの Electron を、各コンポーネントの新しいバージョンに対してリリースします。 仮 12.0.0 スケジュール では、Electron 12.0 開発ライフサイクルの主要な日付を示してあります。 また、Electron のバージョン管理の詳細については バージョン管理のドキュメントを参照 してください。

今後のバージョンの Electron で予定されている破壊的な変更の詳細については、予定されている破壊的な変更のドキュメントを参照してください

remote モジュールの非推奨化作業の継続

Electron 9 から remote モジュールの削除作業を開始してきました。 Electron 14 では remote モジュール自体を削除する予定です。

この Issue から、非推奨化の全計画と詳細をご確認ください。

ネイティブ Node モジュールで Context Aware や N-API を要求するようにする最終段階 (Electron 12 にて)

Electron 6 以降、レンダラープロセスで読み込まれる ネイティブ Node モジュール では、N-API または Context Aware のいずれかであることを要求するように下準備の作業が行われてきました。 この変更を適用することで、セキュリティの強化、パフォーマンスの高速化、保守作業の軽減が可能になります。 この計画の最終段階は、Electron 12 でレンダラープロセスの再利用を無効にする機能を削除することです。

提案のタイムラインを含む詳細は、この Issue をご参照ください。