本文へスキップ

Electron 33.0.0

·読了時間:4分

Electron 33.0.0 がリリースされました!Chromium 130.0.6723.44、V8 13.0、Node 20.18.0 へのアップグレードが含まれています。


Electron チームは、Electron 33.0.0 のリリースを発表できることを嬉しく思っています!`npm install electron@latest` で npm を介してインストールするか、リリースウェブサイトからダウンロードできます。このリリースの詳細については、読み進めてください。

フィードバックがある場合は、TwitterまたはMastodonでお知らせいただくか、コミュニティのDiscordに参加してください!バグと機能のリクエストは、Electron のissue トラッカーで報告できます。

注目すべき変更点

ハイライト

  • PINが必要な場合に暗号化デバイスのロック解除に役立つハンドラ `app.setClientCertRequestPasswordHandler(handler)` を追加しました。 #41205
  • より良い履歴管理のための2つの新しい関数で `navigationHistory` API を拡張しました。 #42014
  • ネイティブテーマの透明度チェックを改善しました。 #42862

スタックの変更

Electron 33 は、Chromium を `128.0.6613.36` から `130.0.6723.44` に、Node を `20.16.0` から `20.18.0` に、V8 を `12.8` から `13.0` にアップグレードします。

新機能

  • PINが必要な場合に暗号化デバイスのロック解除に役立つハンドラ `app.setClientCertRequestPasswordHandler(handler)` を追加しました。 #41205
  • ユーティリティプロセスにエラーイベントを追加して、V8 の致命的なエラーに関する診断レポートをサポートします。 #43997
  • `View.setBorderRadius(radius)` を追加して、ビューのボーダー半径をカスタマイズします(`WebContentsView` との互換性あり)。 #42320
  • より良い履歴管理のための2つの新しい関数で `navigationHistory` API を拡張しました。 #42014

破壊的変更

削除:macOS 10.15 のサポート

macOS 10.15 (Catalina) は、Chromiumでサポートされなくなりました。

以前のバージョンの Electron は Catalina で引き続き実行されますが、Electron v33.0.0 以降を実行するには、macOS 11 (Big Sur) 以降が必要です。

動作変更:ネイティブモジュールは現在 C++20 を必要とします

アップストリームで行われた変更により、V8Node.jsの両方で、最小バージョンとして C++20 が必要になりました。ネイティブノードモジュールを使用している開発者は、`--std=c++17` ではなく `--std=c++20` を使用してモジュールをビルドする必要があります。gcc9 以前を使用しているイメージは、コンパイルするために gcc10 に更新する必要がある場合があります。詳細については、#43555を参照してください。

動作変更:Windows でのカスタムプロトコル URL の処理

非特殊スキーム URL をサポートするために Chromium で行われた変更により、Windows ファイルパスを使用するカスタムプロトコル URL は、非推奨の `protocol.registerFileProtocol` と `BrowserWindow.loadURL`、`WebContents.loadURL`、`<webview>.loadURL` の `baseURLForDataURL` プロパティでは正しく機能しなくなります。`protocol.handle` もこれらのタイプの URL では機能しませんが、これは常にそのように機能していたため変更ではありません。

// No longer works
protocol.registerFileProtocol('other', () => {
callback({ filePath: '/path/to/my/file' });
});

const mainWindow = new BrowserWindow();
mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://C:\\myapp' }
);
mainWindow.loadURL('other://C:\\myapp\\index.html');

// Replace with
const path = require('node:path');
const nodeUrl = require('node:url');
protocol.handle(other, (req) => {
const srcPath = 'C:\\myapp\\';
const reqURL = new URL(req.url);
return net.fetch(
nodeUrl.pathToFileURL(path.join(srcPath, reqURL.pathname)).toString()
);
});

mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://' }
);
mainWindow.loadURL('other://index.html');

動作変更:`app` の `login` の `webContents` プロパティ

respondToAuthRequestsFromMainProcess オプションを使用して作成されたユーティリティプロセスからのリクエストに対してイベントがトリガーされると、appからのloginイベントのwebContentsプロパティはnullになります。

非推奨: BrowserWindowConstructorOption.typetextured オプション

BrowserWindowConstructorOptionstypeにおけるtexturedオプションは、代替手段なく非推奨となりました。このオプションはmacOSのNSWindowStyleMaskTexturedBackgroundスタイルマスクに依存していましたが、これも代替手段なく非推奨となりました。

非推奨: systemPreferences.accessibilityDisplayShouldReduceTransparency

systemPreferences.accessibilityDisplayShouldReduceTransparencyプロパティは、同一の情報を提供し、クロスプラットフォームで動作する新しいnativeTheme.prefersReducedTransparencyに置き換えられました。

// Deprecated
const shouldReduceTransparency =
systemPreferences.accessibilityDisplayShouldReduceTransparency;

// Replace with:
const prefersReducedTransparency = nativeTheme.prefersReducedTransparency;

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

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

E33 (2024年10月)E34 (2025年1月)E35 (2025年4月)
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y

今後の予定

短期的な目標としては、Chromium、Node.js、V8を含むElectronを構成する主要コンポーネントの開発に追いつくことに引き続き注力します。

Electronのパブリックタイムラインはこちらにあります。

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

API履歴の導入 (GSoC 2024)

·読了時間7分

Electron API の履歴上の変更は、今後ドキュメントに詳細に記載されます。


こんにちは 👋、私はピーター、2024年のGoogle Summer of Code (GSoC)のElectronへの貢献者です。

GSoCプログラムを通して、私はElectronドキュメントとその関数、クラスなどにAPI履歴機能を実装しました。Node.jsドキュメントと同様に、APIドキュメントのMarkdownファイルでシンプルながらも強力なYAMLスキーマを使用し、Electronドキュメントウェブサイトで綺麗に表示できるようにしました。

Electron 32.0.0

·読了時間:4分

Electron 32.0.0 がリリースされました!Chromium `128.0.6613.36`、V8 `12.8`、Node.js `20.16.0` へのアップグレードが含まれています。


Electronチームは、Electron 32.0.0のリリースを発表できることを嬉しく思います!`npm install electron@latest`でnpmからインストールするか、当社のリリースウェブサイトからダウンロードできます。このリリースの詳細については、読み進めてください。

フィードバックがある場合は、TwitterまたはMastodonでお知らせいただくか、コミュニティのDiscordに参加してください!バグと機能のリクエストは、Electron のissue トラッカーで報告できます。

注目すべき変更点

ハイライト

  • Google Summer of Codeの一環として@piotrpdevによって作成された機能である、ドキュメントに新しいAPIバージョン履歴を追加しました。このブログ投稿で詳細を確認できます。#42982
  • Web File APIから非標準のFile.path拡張を削除しました。#42053
  • ブロックされたパスでファイルまたはディレクトリを開こうとした場合の、Web File System APIにおけるアップストリームとのエラー処理を調整しました。#42993
  • 次の既存のナビゲーション関連APIをwebcontents.navigationHistoryに追加しました: canGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear。以前のナビゲーションAPIは非推奨となりました。#41752

スタックの変更

Electron 32は、Chromiumを`126.0.6478.36`から`128.0.6613.36`に、Node.jsを`20.14.0`から`20.16.0`に、V8を`12.6`から`12.8`にアップグレードしました。

新機能

  • appモジュールの`'login'`イベントを介して、ユーティリティプロセスから開始された認証リクエストに応答するためのサポートを追加しました。#43317
  • プロセス起動以降に使用されたCPU時間の合計秒数を返すcumulativeCPUUsageプロパティをCPUUsage構造体に追加しました。#41819
  • 次の既存のナビゲーション関連APIをwebContents.navigationHistoryに追加しました: canGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear#41752
  • 既存のwebContentsオブジェクトを受け入れるようにWebContentsViewを拡張しました。#42086
  • ユーザーがシステムアクセシビリティ設定を介してOSレベルの透明性を低減することを選択したかどうかを示す新しいプロパティprefersReducedTransparencynativeThemeに追加しました。#43137
  • ブロックされたパスでファイルまたはディレクトリを開こうとした場合の、File System Access APIにおけるアップストリームとのエラー処理を調整しました。#42993
  • LinuxでWindows Control Overlay APIを有効にしました。#42681
  • ネットワークリクエストでzstd圧縮を有効にしました。#43300

破壊的変更

削除済み: File.path

Web Fileオブジェクトの非標準のpathプロパティは、レンダラー内ですべてを行うことがより一般的だったElectronの初期バージョンで、ネイティブファイルの操作を容易にするための便宜的な方法として追加されました。しかし、これは標準からの逸脱を表しており、軽微なセキュリティリスクも伴うため、Electron 32.0以降、webUtils.getPathForFileメソッドに置き換えられました。

// Before (renderer)
const file = document.querySelector('input[type=file]');
alert(`Uploaded file path was: ${file.path}`);
// After (renderer)
const file = document.querySelector('input[type=file]');
electron.showFilePath(file);

// After (preload)
const { contextBridge, webUtils } = require('electron');

contextBridge.exposeInMainWorld('electron', {
showFilePath(file) {
// It's best not to expose the full file path to the web content if
// possible.
const path = webUtils.getPathForFile(file);
alert(`Uploaded file path was: ${path}`);
},
});

非推奨: WebContents上のclearHistorycanGoBackgoBackcanGoForwardgoForwardgoToIndexcanGoToOffsetgoToOffset

WebContentsインスタンス上のナビゲーション関連APIは非推奨となりました。これらのAPIは、WebContentsnavigationHistoryプロパティに移動され、ナビゲーション履歴の管理のためのより構造化され、直感的なインターフェースが提供されています。

// Deprecated
win.webContents.clearHistory();
win.webContents.canGoBack();
win.webContents.goBack();
win.webContents.canGoForward();
win.webContents.goForward();
win.webContents.goToIndex(index);
win.webContents.canGoToOffset();
win.webContents.goToOffset(index);

// Replace with
win.webContents.navigationHistory.clear();
win.webContents.navigationHistory.canGoBack();
win.webContents.navigationHistory.goBack();
win.webContents.navigationHistory.canGoForward();
win.webContents.navigationHistory.goForward();
win.webContents.navigationHistory.canGoToOffset();
win.webContents.navigationHistory.goToOffset(index);

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

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

E32 (2024年8月)E33 (2024年10月)E34 (2025年1月)
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y

今後の予定

短期的な目標としては、Chromium、Node.js、V8を含むElectronを構成する主要コンポーネントの開発に追いつくことに引き続き注力します。

Electronのパブリックタイムラインはこちらにあります。

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

Electron 31.0.0

·読了時間3分

Electron 31.0.0 がリリースされました!Chromium `126.0.6478.36`、V8 `12.6`、Node.js `20.14.0` へのアップグレードが含まれています。


Electronチームは、Electron 31.0.0のリリースを発表できることを嬉しく思います!`npm install electron@latest`でnpmからインストールするか、当社のリリースウェブサイトからダウンロードできます。このリリースの詳細については、読み進めてください。

フィードバックがある場合は、TwitterまたはMastodonでお知らせいただくか、コミュニティのDiscordに参加してください!バグと機能のリクエストは、Electron のissue トラッカーで報告できます。

注目すべき変更点

ハイライト

  • 既存のwebContentsオブジェクトを受け入れるようにWebContentsViewを拡張しました。#42319
  • NODE_EXTRA_CA_CERTSのサポートを追加しました。#41689
  • macOSで連続して点滅するようにwindow.flashFrame(bool)を更新しました。#41391
  • WebSQLのサポートを削除しました #41868
  • nativeImage.toDataURLはPNGの色空間を保持します #41610
  • BrowserWindowの手動作成をサポートするようにwebContents.setWindowOpenHandlerを拡張しました。#41432

スタックの変更

Electron 31は、Chromiumを`124.0.6367.49`から`126.0.6478.36`に、Node.jsを`20.11.1`から`20.14.0`に、V8を`12.4`から`12.6`にアップグレードしました。

新機能

  • SessionclearDataメソッドを追加しました。#40983
    • Session.clearData APIにオプションパラメータを追加しました。#41355
  • navigator.serialでサービスクラスIDによって要求されたBluetoothポートのサポートを追加しました。#41638
  • Node.jsのNODE_EXTRA_CA_CERTS環境変数のサポートを追加しました。#41689
  • BrowserWindowの手動作成をサポートするようにwebContents.setWindowOpenHandlerを拡張しました。#41432
  • Web標準のFile System APIのサポートを実装しました。#41419
  • 既存のWebContentsインスタンスを受け入れるようにWebContentsViewを拡張しました。 #42319
  • webContents APIに新しいインスタンスプロパティnavigationHistorynavigationHistory.getEntryAtIndexメソッドを追加しました。これにより、アプリケーションは閲覧履歴内の任意のナビゲーションエントリのURLとタイトルを取得できるようになりました。 #41577 (こちらも参照 29, 30)

破壊的変更

削除: WebSQLサポート

ChromiumはアップストリームでWebSQLのサポートを削除し、Androidのみに移行しました。詳細はChromiumの削除に関する意向表明を参照してください。

動作変更: nativeImage.toDataURLはPNGの色空間を保持します

PNGデコーダの実装が変更され、色空間データが保持されるようになりました。この関数から返されるエンコードされたデータは、それに一致するようになりました。

詳細はcrbug.com/332584706を参照してください。

動作変更: win.flashFrame(bool)はmacOSでドックアイコンを連続的に点滅させます

これにより、WindowsとLinuxとの動作が統一されました。以前の動作: 最初のflashFrame(true)はドックアイコンを一度だけバウンスさせます(NSInformationalRequestレベルを使用)。flashFrame(false)は何もしません。新しい動作: flashFrame(false)が呼び出されるまで連続的に点滅します。NSCriticalRequestレベルを使用します。ドックアイコンを一度だけバウンスさせるためにNSInformationalRequestを明示的に使用するには、dock.bounce('informational')を使用できます。

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

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

E31 (2024年6月)E32 (2024年8月)E33 (2024年10月)
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y
28.x.y29.x.y31.x.y

今後の予定

短期的な目標としては、Chromium、Node.js、V8を含むElectronを構成する主要コンポーネントの開発に追いつくことに引き続き注力します。

Electronのパブリックタイムラインはこちらにあります。

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

Electron 30.0.0

·読了時間:4分

Electron 30.0.0がリリースされました!Chromium 124.0.6367.49、V8 12.4、Node.js 20.11.1へのアップグレードが含まれています。


Electronチームは、Electron 30.0.0のリリースを発表できることを嬉しく思います!npm install electron@latestでnpmを使用してインストールするか、リリースウェブサイトからダウンロードできます。このリリースの詳細については、読み進めてください。

フィードバックがある場合は、TwitterまたはMastodonでお知らせいただくか、コミュニティのDiscordに参加してください!バグと機能のリクエストは、Electron のissue トラッカーで報告できます。

注目すべき変更点

ハイライト

  • ASAR整合性ヒューズがWindowsでサポートされるようになりました(#40504
    • ASAR整合性が有効になっている既存のアプリは、正しく設定されていない場合、Windowsで動作しない可能性があります。Electronのパッケージ化ツールを使用しているアプリは、@electron/packager@18.3.1または@electron/forge@7.4.0にアップグレードする必要があります。
    • 詳細はASAR整合性チュートリアルをご覧ください。
  • WebContentsViewBaseWindowメインプロセスモジュールを追加し、BrowserViewを非推奨とし、置き換えました(#35658
    • BrowserViewは現在、WebContentsViewの上位互換レイヤーであり、古い実装は削除されました。
    • 新しいWebContentsViewAPIと他の同様のAPIの比較については、Web Embedsのドキュメントを参照してください。
  • ファイルシステムAPIのサポートを実装しました(#41827

スタックの変更

Electron 30では、Chromiumを122.0.6261.39から124.0.6367.49に、Nodeを20.9.0から20.11.1に、V8を12.2から12.4にアップグレードしました。

新機能

  • webviewsにtransparent webpreferenceを追加しました。(#40301
  • webContents APIに新しいインスタンスプロパティnavigationHistorynavigationHistory.getEntryAtIndexメソッドを追加しました。これにより、アプリケーションは閲覧履歴内の任意のナビゲーションエントリのURLとタイトルを取得できるようになりました。(#41662
  • アプリがオクルージョン状態を確認できるように、新しいBrowserWindow.isOccluded()メソッドを追加しました。(#38982
  • ユーティリティプロセスからnetモジュールを使用して行われたリクエストに対するプロキシ設定サポートを追加しました。(#41417
  • navigator.serialでサービスクラスIDによって要求されるBluetoothポートのサポートを追加しました。(#41734
  • Node.jsのNODE_EXTRA_CA_CERTS CLIフラグのサポートを追加しました。(#41822

破壊的変更

動作変更: クロスオリジンのiframeは、機能にアクセスするためにPermission Policyを使用するようになりました

クロスオリジンのiframeは、アクセスするために、allow属性を使用して、特定のiframeで使用可能な機能を指定する必要があります。

詳細はドキュメントを参照してください。

削除: --disable-color-correct-renderingコマンドラインスイッチ

このスイッチは正式に文書化されたことはありませんでしたが、削除がここに記載されています。Chromium自体が色空間をより適切にサポートするようになったため、このフラグは必要なくなりました。

動作変更: macOSでのBrowserView.setAutoResizeの動作

Electron 30では、BrowserViewは新しいWebContentsView APIのラッパーになりました。

以前は、BrowserView APIのsetAutoResize関数は、macOSではautoresizingによって、WindowsとLinuxではカスタムアルゴリズムによってサポートされていました。BrowserViewをウィンドウ全体に合わせるといった単純なユースケースでは、これらの2つのアプローチの動作は同一でした。しかし、より高度なケースでは、WindowsとLinuxのカスタムサイズ変更アルゴリズムがmacOSのautoresizing APIの動作と完全に一致しなかったため、BrowserViewのサイズ変更はmacOSと他のプラットフォームで異なっていました。サイズ変更の動作は、現在すべてのプラットフォームで標準化されました。

アプリでBrowserView.setAutoResizeを使用して、BrowserViewをウィンドウ全体に合わせる以上の複雑な処理を行っている場合、macOSでのこの動作の違いに対処するためのカスタムロジックが既に実装されている可能性があります。その場合、サイズ変更の動作が整合性を持つようになったElectron 30では、そのロジックは不要になります。

削除: WebContentscontext-menuparams.inputFormTypeプロパティ

WebContentsからのcontext-menuイベントのパラメータオブジェクトのinputFormTypeプロパティは削除されました。代わりに新しいformControlTypeプロパティを使用してください。

削除: process.getIOCounters()

Chromiumがこの情報へのアクセスを削除しました。

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

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

E30 (2024年4月)E31 (2024年6月)E32 (2024年8月)
30.x.y31.x.y32.x.y
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y

今後の予定

短期的な目標としては、Chromium、Node.js、V8を含むElectronを構成する主要コンポーネントの開発に追いつくことに引き続き注力します。

Electronのパブリックタイムラインはこちらにあります。

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

Google Summer of Code 2024

·読了時間:4分

Electronが、Google Summer of Code (GSoC) 2024の第20回目をメンター組織として承認されたことをお知らせします!Google Summer of Codeは、オープンソースソフトウェア開発に新しい貢献者を取り込むことに焦点を当てたグローバルプログラムです。

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

私たちについて

Electronは、Webテクノロジーを使用してクロスプラットフォームのデスクトップアプリケーションを構築するためのJavaScriptフレームワークです。Electronコアフレームワークは、ChromiumNode.jsを使用してビルドされたコンパイル済みバイナリ実行可能ファイルであり、主にC++で記述されています。

Electronコア以外にも、Electron組織の維持を支援するためのさまざまなプロジェクトに取り組んでいます。例えば、

Summer of Codeの貢献者として、github.com/electron傘下の多くのプロジェクトの1つで、Electronのコア貢献者と協力することになります。

応募前に

Electronにあまり慣れていない場合は、まずドキュメントを読んでElectron Fiddleで例を試してみることをお勧めします。

Electronアプリの配布についてさらに学ぶには、サンプルアプリケーションを作成してElectron Forgeを試してみることもできます。

npm init electron-app@latest my-app

コードに少し慣れてきたら、Electron Discordサーバーに参加して会話に参加しましょう。

情報

Google Summer of Codeへの参加が初めての方、またはオープンソースに不慣れな方は、コミュニティに参加する前に、まずGoogleのコントリビューターガイドを読むことをお勧めします。

提案の作成

Electronとの協業にご興味がありますか?まず、ご用意した7つのプロジェクトアイデア案をご覧ください。リストされているアイデアはすべて、現在提案を受け付けています。

他に検討して欲しいアイデアがありますか?提案されたプロジェクトリストにない新しいアイデアも受け付けていますが、アプローチを綿密に概説し、詳細に記述してください。迷う場合は、リストされているアイデアを選択することをお勧めします。

応募には以下を含める必要があります。

  • あなたの提案:夏の間に行うことを詳細に記述した文書。
  • 開発者としてのあなたの経歴。履歴書をお持ちの場合は、コピーを添付してください。そうでない場合は、過去の技術経験について教えてください。
    • 特定分野の経験の不足は失格理由にはなりませんが、メンターが最適なサポート計画を立て、夏のプロジェクトを成功させるのに役立ちます。

Electronへの応募の一部として提出するものの詳細なガイドはこちらです。 提案はGoogle Summer of Codeポータルに直接提出してください。応募ポータルではなくElectronチームにメールで送信された提案は、最終提出物とはみなされません。

提案についてさらにガイダンスが必要な場合、または何を記載すべきかわからない場合は、公式Google Summer of Codeの提案作成に関するアドバイスはこちらを参照することをお勧めします。

応募開始日は2024年3月18日、締め切り日は2024年4月2日です。

情報

2022年のGoogle Summer of Codeインターンである@aryanshridharは素晴らしい仕事をしてくれました!AryanがElectronでの夏の間に行った作業を確認したい場合は、2022年GSoCプログラムアーカイブで彼のレポートを読むことができます。

質問?

ブログ投稿で触れていない質問や提案案に関するお問い合わせがある場合は、summer-of-code@electronjs.orgまでメールでお問い合わせいただくか、GSoC FAQをご覧ください!

リソース

Electron 29.0.0

読了時間:4分

Electron 29.0.0がリリースされました!Chromium 122.0.6261.39、V8 12.2、Node.js 20.9.0へのアップグレードが含まれています。


Electronチームは、Electron 29.0.0のリリースを発表できることを嬉しく思っています!npm install electron@latestでnpmを使用してインストールするか、リリースウェブサイトからダウンロードできます。このリリースの詳細については、読み進めてください。

フィードバックがある場合は、TwitterまたはMastodonでお知らせいただくか、コミュニティのDiscordに参加してください!バグと機能のリクエストは、Electron のissue トラッカーで報告できます。

注目すべき変更点

ハイライト

  • 新しいトップレベルのwebUtilsモジュール(Web APIオブジェクトと対話するためのユーティリティレイヤーを提供するレンダラープロセスモジュール)を追加しました。このモジュールで最初に使用できるAPIはwebUtils.getPathForFileです。Electron以前のFile.path拡張はWeb標準からの逸脱でしたが、この新しいAPIは現在のWeb標準の動作により準拠しています。

スタックの変更

Electron 29は、Chromiumを120.0.6099.56から122.0.6261.39に、Nodeを18.18.2から20.9.0に、V8を12.0から12.2にアップグレードします。

新機能

  • File.path拡張に代わる、Web APIオブジェクトと対話するためのユーティリティレイヤーである新しいwebUtilsモジュールを追加しました。#38776
  • netモジュールをユーティリティプロセスに追加しました。#40890
  • Chromiumに一致するより安全で制限された動作にfile://プロトコルを選択する新しいElectron FusegrantFileProtocolExtraPrivilegesを追加しました。#40372
  • カスタムスキームでV8コードキャッシュを許可するためのオプションをprotocol.registerSchemesAsPrivilegedに追加しました。#40544
  • macOS 13.0以降でAppleの新しい推奨基盤フレームワークを使用するようにapp.{set|get}LoginItemSettings(settings)を移行しました。#37244

破壊的変更

動作変更:ipcRenderercontextBridge経由で送信できなくなりました

ipcRendererモジュール全体をオブジェクトとしてcontextBridge経由で送信しようとすると、ブリッジの受信側で空のオブジェクトになります。この変更は、セキュリティ上の危険性を排除/軽減するために実施されました。ipcRendererまたはそのメソッドをブリッジ経由で直接公開しないでください。代わりに、以下の安全なラッパーを用意してください。

contextBridge.exposeInMainWorld('app', {
onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args)),
});

削除:apprenderer-process-crashedイベント

apprenderer-process-crashedイベントは削除されました。代わりに新しいrender-process-goneイベントを使用してください。

// Removed
app.on('renderer-process-crashed', (event, webContents, killed) => {
/* ... */
});

// Replace with
app.on('render-process-gone', (event, webContents, details) => {
/* ... */
});

削除:WebContents<webview>crashedイベント

WebContents<webview>crashedイベントは削除されました。代わりに新しいrender-process-goneイベントを使用してください。

// Removed
win.webContents.on('crashed', (event, killed) => {
/* ... */
});
webview.addEventListener('crashed', (event) => {
/* ... */
});

// Replace with
win.webContents.on('render-process-gone', (event, details) => {
/* ... */
});
webview.addEventListener('render-process-gone', (event) => {
/* ... */
});

削除:appgpu-process-crashedイベント

appgpu-process-crashedイベントは削除されました。代わりに新しいchild-process-goneイベントを使用してください。

// Removed
app.on('gpu-process-crashed', (event, killed) => {
/* ... */
});

// Replace with
app.on('child-process-gone', (event, details) => {
/* ... */
});

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

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

E29 (2024年2月)E30 (2024年4月)E31 (2024年6月)
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y

今後の予定

Electronに最近、コミュニティによるRequest for Comments(RFC)プロセスが追加されたことをご存知ですか?フレームワークに機能を追加したい場合は、RFCはメンテナーと設計について対話を開始するための便利なツールになる可能性があります。また、Pull Requestで議論されている今後の変更点も確認できます。詳細については、Introducing electron/rfcsのブログ投稿、またはelectron/rfcsリポジトリのREADMEをご覧ください。

短期的な目標としては、Chromium、Node.js、V8を含むElectronを構成する主要コンポーネントの開発に追いつくことに引き続き注力します。

Electronのパブリックタイムラインはこちらにあります。

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

electron/rfcs の導入

読了時間3分

ElectronのAPIワーキンググループは、Electronコアへのより大きな変更を管理するために、オープンなRequest for Comments(RFC)プロセスを採用しています。

RFCの理由?

簡単に言うと、Electronコアへの重要な変更の着陸プロセスをスムーズにしたいと考えています。

現在、新しいコード変更は主にGitHubのIssueとPull Requestを通じて議論されています。Electronのほとんどの変更については、これは優れたシステムです。多くのバグ修正、ドキュメントの変更、さらには新しい機能も、標準的なGitHubフローを通じて非同期的にレビューおよびマージするのに十分簡単です。

より重要な変更(たとえば、Electronアプリの大部分を影響する大規模なAPIサーフェスや破壊的な変更)の場合、ほとんどのコードが記述される前に、構想段階でレビューを行うことが理にかなっています。

このプロセスは一般公開されるように設計されており、オープンソースコミュニティ全体が、Electronに反映される前に潜在的な変更についてフィードバックを提供しやすくなります。

仕組みは?

RFCプロセス全体は、GitHubのelectron/rfcsリポジトリに存在します。手順については、リポジトリのREADMEに詳細が記述されています。

簡単に言うと、electron/rfcsリポジトリにPRが作成されると、RFCは提案済み(Proposed)状態になります。提案済みのRFCは、

  • リポジトリのmainブランチにPRがマージされるとアクティブ(Active)になり、これはElectronのメンテナがelectron/electronへの実装を承認することを意味します。または、
  • PRが最終的に拒否された場合は却下(Declined)となります。
情報

RFCがアクティブ(Active)になるには、APIワーキンググループメンバー少なくとも2名による承認が必要です。マージする前に、RFCは同期的に提示され、WGメンバーの3分の2以上の定足数で満場一致で承認される必要があります。コンセンサスが得られた場合、1ヶ月間の最終コメント期間が開始され、その後PRがマージされます。

実装がelectron/electronにマージされると、アクティブなRFCは完了(Completed)となります。

誰が参加できますか?

Electronコミュニティの誰でも、electron/rfcsリポジトリにRFCを提出したり、フィードバックを残したりできます!

このプロセスを双方向の対話にし、コミュニティの参加を促進して、将来これらのAPIを使用する可能性のあるElectronアプリから多様な意見を得ることを目指しています。現在提案されているRFCへのフィードバックにご関心のある方は、Electronのメンテナがいくつか作成しています。

謝辞

ElectronのRFCプロセスは、多くの確立されたオープンソースRFCプロセスをモデルとしています。多くのアイデアとコピーライティングの大部分は、以下からインスピレーションを得ています。

"runAsNode" CVE に関する声明

·読了時間:4分

本日、Electronチームは、いくつかの著名なElectronアプリに対して最近提出されたいくつかの公開CVEについて警告を受けました。CVEは、ElectronのヒューズrunAsNodeenableNodeCliInspectArguments)の2つに関連しており、これらのコンポーネントが積極的に無効化されていない場合、リモート攻撃者がこれらのコンポーネントを介して任意のコードを実行できると誤って主張しています。

これらのCVEは善意で提出されたとは考えていません。まず第一に、その記述は正しくありません。この設定では、リモートコード実行は有効になりません。第二に、これらのCVEで指摘された企業は、バグバウンティプログラムを持っているにもかかわらず、通知されていません。最後に、問題のコンポーネントを無効にすることでアプリのセキュリティが向上すると考えていますが、CVEの重大度が正しく設定されているとは考えていません。「クリティカル」は、最も危険性の高い問題に対して予約されており、今回のケースでは確かにそうではありません。

誰でもCVEをリクエストできます。これはソフトウェア業界全体の健全性にとって良いことですが、単一のセキュリティ研究者の評判を高めるためにCVEを「集める」ことは役に立ちません。

とは言え、「クリティカル」という恐ろしい重大度を持つCVEの存在は、エンドユーザーの混乱につながる可能性があることを理解しているので、プロジェクトとして、この問題に対処するためのガイダンスと支援を提供したいと思います。

どのような影響がありますか?

CVEを確認した結果、ElectronチームはこれらのCVEはクリティカルではないと考えています。

攻撃者は、ハードウェアへの物理的なアクセスがあるか、完全なリモートコード実行を達成しているかのいずれかによって、既にマシン上で任意のコマンドを実行できる必要があります。繰り返しますが、説明されている脆弱性では、攻撃者が既に攻撃対象のシステムにアクセスしている必要があります

たとえば、Chromeは脅威モデルに物理的にローカルな攻撃を含めていません

Chrome(またはその他のアプリケーション)が、あなたとしてデバイスにログインできた、またはオペレーティングシステムのユーザーアカウントの権限でソフトウェアを実行できる悪意のあるユーザーに対して防御する方法がないため、これらの攻撃をChromeの脅威モデルの外側にあると考えています。そのような攻撃者は、実行ファイルやDLLを変更したり、PATHなどの環境変数を変更したり、設定ファイルを変更したり、ユーザーアカウントが所有するデータを読み取ったり、自分自身にメールを送信したりするなど、あらゆることができます。そのような攻撃者はデバイスを完全に制御しており、Chromeが実行できることで防御の確実な保証を提供することはできません。この問題はChrome特有のものではありません。すべてのアプリケーションは、物理的にローカルなユーザーを信頼する必要があります。

CVEで説明されているエクスプロイトにより、攻撃者は影響を受けたアプリを、継承されたTCC権限を持つ一般的なNode.jsプロセスとして使用できるようになります。たとえば、アプリがアドレス帳へのアクセスを許可されている場合、攻撃者はアプリをNode.jsとして実行し、アドレス帳へのアクセスを継承する任意のコードを実行できます。これは一般的に「Living off the Land (LotL)」攻撃として知られています。攻撃者は通常、PowerShell、Bash、または同様のツールを使用して任意のコードを実行します。

影響を受けますか?

デフォルトでは、リリースされているすべてのバージョンのElectronでrunAsNodeenableNodeCliInspectArguments機能が有効になっています。Electronヒューズのドキュメントに記載されているようにオフにしていない場合、アプリは同様に「Living off the Land」攻撃に使用される可能性があります。繰り返しますが、攻撃者は被害者のマシン上で既にコードとプログラムを実行できる必要があることを強調する必要があります。

軽減策

この問題を軽減する最も簡単な方法は、Electronアプリ内でrunAsNodeヒューズを無効にすることです。runAsNodeヒューズは、ELECTRON_RUN_AS_NODE環境変数が尊重されるかどうかを切り替えます。これらのヒューズの切り替え方法については、Electronヒューズのドキュメントを参照してください。

このヒューズを無効にすると、メインプロセス内のprocess.forkは、機能するためにこの環境変数に依存しているため、期待通りに機能しなくなります。代わりに、スタンドアロンのNode.jsプロセス(Sqliteサーバープロセスなど)が必要な多くのユースケースで機能するユーティリティプロセスを使用することをお勧めします。

Electronアプリで推奨するセキュリティベストプラクティスに関する詳細については、セキュリティチェックリストを参照してください。

Electron 28.0.0

·読了時間3分

Electron 28.0.0がリリースされました!Chromium 120.0.6099.56、V8 12.0、Node.js 18.18.2へのアップグレードが含まれています。


Electronチームは、Electron 28.0.0のリリースを発表できることを嬉しく思います。npm install electron@latestを使用してnpmでインストールするか、リリースウェブサイトからダウンロードできます。このリリースの詳細については、読み進めてください。

フィードバックがある場合は、TwitterまたはMastodonでお知らせいただくか、コミュニティのDiscordに参加してください!バグと機能のリクエストは、Electron のissue トラッカーで報告できます。

注目すべき変更点

ハイライト

  • ECMAScriptモジュールまたはESMのサポートが実装されました(ECMAScriptモジュールとは何か?詳細はこちら)。これには、Electron本体でのESMのサポート、およびUtilityProcess APIエントリポイントなどの領域が含まれます。ESMドキュメントで詳細を確認してください。
  • Electron自体でESMサポートを有効にすることに加えて、Electron ForgeもESMを使用してElectronアプリケーションをパッケージ化、ビルド、開発するのをサポートしています。Forge v7.0.0以降でこのサポートを見つけることができます。

スタックの変更

新機能

  • ESMサポートを有効化しました。#37535
  • UtilityProcess APIにESMエントリポイントを追加しました。#40047
  • detectedmaximumCursorSizenativeOriginを含むいくつかのプロパティをdisplayオブジェクトに追加しました。#40554
  • LinuxでELECTRON_OZONE_PLATFORM_HINT環境変数のサポートを追加しました。#39792

破壊的変更

動作変更:WebContents.backgroundThrottlingをfalseに設定すると、ホストBrowserWindowのすべてのWebContentsに影響します

WebContents.backgroundThrottlingをfalseに設定すると、表示されているすべてのWebContentsBrowserWindowでフレームのスロットリングが無効になります。

削除済み:BrowserWindow.setTrafficLightPosition(position)

BrowserWindow.setTrafficLightPosition(position)は削除されました。代わりにBrowserWindow.setWindowButtonPosition(position) APIを使用する必要があります。これは、位置をシステムデフォルトにリセットするためにnullを受け入れます。

// Removed in Electron 28
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });

// Replace with
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null);

削除済み:BrowserWindow.getTrafficLightPosition()

BrowserWindow.getTrafficLightPosition()は削除されました。代わりにBrowserWindow.getWindowButtonPosition() APIを使用する必要があります。これは、カスタム位置がない場合にnullを返します。

// Removed in Electron 28
const pos = win.getTrafficLightPosition();
if (pos.x === 0 && pos.y === 0) {
// No custom position.
}

// Replace with
const ret = win.getWindowButtonPosition();
if (ret === null) {
// No custom position.
}

削除済み:ipcRenderer.sendTo()

ipcRenderer.sendTo() APIは削除されました。レンダラー間でMessageChannelを設定することで置き換える必要があります。

IpcRendererEventsenderIdプロパティとsenderIsMainFrameプロパティも削除されました。

削除済み:app.runningUnderRosettaTranslation

app.runningUnderRosettaTranslationプロパティは削除されました。代わりにapp.runningUnderARM64Translationを使用してください。

// Removed
console.log(app.runningUnderRosettaTranslation);
// Replace with
console.log(app.runningUnderARM64Translation);

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

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

E28 (2023年12月)E29 (2024年2月)E30 (2024年4月)
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y
26.x.y27.x.y28.x.y

今後の予定

短期的な目標としては、Chromium、Node.js、V8を含むElectronを構成する主要コンポーネントの開発に追いつくことに引き続き注力します。

Electronのパブリックタイムラインはこちらにあります。

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