メインコンテンツへ飛ぶ

· 読むのにかかる時間 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 をご参照ください。

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

Apple Silicon ハードウェアが下半期にリリース予定です。 新ハードウェアで Electron アプリを動作させるにはどうすればよいでしょうか?


Electron 11.0.0-beta.1 のリリースに伴い、Electron チームでは Apple が下半期に出荷予定の新 Apple Silicon ハードウェア上で動作する Electron ビルドを頒布しています。 npm install electron@beta で最新のベータ版を入手するか、 releases website から直接ダウンロードできます。

どのように動作するのですか?#

Electron 11 では、Intel Mac と Apple Silicon Mac で別々のバージョンの Electron がリリースされます。 これに先立ち、既に darwin-x64mas-x64 の 2 つのアーティファクトがリリースされました。 後者には Mac App Store との互換性があります。 上記のアーティファクトの Apple Silicon に相当する、darwin-arm64mas-arm64 の 2 つのアーティファクトもリリースしています。

必要事項は何ですか?#

x64 (Intel Mac) 用 と arm64 (Apple Silicon) 用、2 つのバージョンのアプリを頒布する必要があります。 electron-packagerelectron-rebuildelectron-forge はすでにこの arm64 アーキテクチャターゲットをサポートしていす。 これらのパッケージの最新バージョンを実行している限り、 ターゲットアーキテクチャを arm64に更新すると、アプリが完璧に動作するはずです。

将来的には、 arm64x64 アプリを単一のユニバーサルバイナリにマージできるパッケージをリリースしますが、このバイナリは巨大になるため、おそらくユーザーへのリリースには適していません。

更新: このパッケージは現在 @electron/universal で利用できます。 パッケージ化された x64 と arm64 の 2 つのアプリを、1 つのバイナリへ統合するために使用できます。

潜在的な問題#

ネイティブモジュール#

新しいアーキテクチャをターゲットにしているため、いくつかの依存関係はビルドで問題を引き起こす可能性があるため更新する必要があります。 各依存関係の最小バージョンは、以下をご参照ください。

依存関係バージョン要件
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

これらの依存関係のバージョン要件のために、特定のネイティブモジュールを修正/更新しなければならない場合があるでしょう。 注意として、Xcode のアップグレードによって新しいバージョンの macOS SDK が導入されるため、ネイティブモジュールのビルドに失敗する可能性があります。

どのようにテストするのですか?#

現在、Apple Silicon アプリケーションは、このブログ記事を書いている時点では市販されていない Apple Silicon ハードウェア上でしか動作しません。 開発者移行キット をお持ちの場合、そのマシン上でアプリケーションをテストできます。 さもなくば、アプリケーションの動作テストには、製品版の Apple Silicon ハードウェアのリリースを待つ必要があります。

Rosetta 2 についてはどうなるのでしょうか?#

Rosetta 2 は、Apple の Rosetta 技術の最新の成果で、同社の新しい arm64 Apple Silicon ハードウェア上でも x64 Intel アプリケーションを実行できます。 x64 Electron アプリは Rosetta 2 で動作すると推測していますが、注意すべき重要な点が (ネイティブ arm64 バイナリを頒布すべきかどうかについても) いくつかあります。

  • アプリのパフォーマンスが著しく低下します。 Electron / V8 は JavaScript を JIT コンパイルしており、Rosetta の動作方式によっては、事実上 JIT を 2 回 (V8 で 1 回、Rosetta で 1 回) 実行します。
  • メモリのページサイズ増大など、Apple Sillicon の新技術の恩恵を受けられなくなります。
  • パフォーマンスが 大幅に 低下するって言いましたよね?

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

コミュニティの絆とオープンソースの1ヶ月間のお祝いのために私たちに参加してください。


Hacktoberfest と Discord のバナー

Electron コミュニティの Discord の立ち上げ

Electronの Outreach ワーキンググループ は、 公式コミュニティ Discord サーバーの立ち上げを発表することを楽しみにしています!

なぜ新しいDiscordサーバーなのか?#

Atom テキスト エディタののバックボーンとして、Electron フレームワークに関するコミュニティでのディスカッションは、Atom の Slack ワークスペースの1チャネルで行われていました。 時間が経ち、2つのプロジェクトが分離していくにつれて、AtomワークスペースとElectronプロジェクトとの関連性は低下し、Slackチャンネルへのメンテナンの参加者も同様に低下しました。

これまで、招待を受け取るのに苦労したと多く人からの報告を受けました。コアメンテナンス担当者のほとんどがチャンネルを頻繁に行なっていたにもかかわらず、より広範なコミュニティをAtom Slackワークスペースにリダイレクトしていました。

この新しいサーバーは、Electron に関する最新情報を得ることができる、コミュニティの中心的な議論の場となるようにしています。

ぜひお越しください!#

今のところ、サーバーのメンバーシップは数人のメンターが協力して立ち上げていますが、皆さんとお話しできることをとても楽しみにしています。 助けを求めたり、Electron の最新情報を得たり、他の開発者と交流したりできます。 サーバーにアクセスできる便利な 招待リンク をご用意しました!

Hacktoberfest 2020

大規模で長期間実行されているオープンソースプロジェクトとして、Electronはコミュニティからの貢献なしにはほとんど成功しませんでした。 コードの提出からバグレポート、ドキュメントの変更まで様々です。 だからこそ、Hacktoberfest に参加することで、あらゆるスキルレベルの開発者たちがより広いコミュニティでプロジェクトに参加できるようになることが重要だと考えています。

寄せ集め物#

今年は、あなたにすべてを与えるより広いプロジェクトを持っていません。しかし、Electron JavaScript エコシステム全体に貢献する機会に焦点を当てたいと思います。

私達のさまざまリポジトリで hacktoberfest のタグのある課題をみてください。メインの electron/electron リポジトリ、electron/electronjs.org ウェブサイト、electron/fiddle、それに electron-userland/electron-forgeもあります。

P.S. 特に冒険したい方向けに、help wanted タグが付けられた Issue のバックログも用意しています。

つまづきましたか? 一緒にチャットしてみましょう!#

さらに、私たちの Discord サーバーのグランドオープンが、今年最大のオープンソースソフトウェアの祭典と重なったのも偶然ではありません。 Hacktoberfest の PR に協力してもらうためにも、#hacktoberfest チャンネルをチェックしてみましょう。 見逃した方のために、招待リンクをこちらに再びご用意しました!