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

Electron 4.0.0

·6分

Electronチームは、Electron 4の安定版リリースが利用可能になったことを発表できることを嬉しく思います! electronjs.org から、またはnpm経由で npm install electron@latest を使用してインストールできます。 このリリースには、アップグレード、修正、新機能が満載されており、皆さんがそれらを使って何を構築するのか楽しみです。 このリリースの詳細については、以下をお読みください。また、調査した際にフィードバックがあれば共有してください。


新着情報

Electronの機能の大部分は、Electronを構成するコアコンポーネントであるChromium、Node.js、およびV8によって提供されています。 そのため、Electronチームの重要な目標は、これらのプロジェクトの変更にできる限り追いつき、Electronアプリを構築する開発者に新しいWebおよびJavaScript機能へのアクセスを提供することです。 この目的のために、Electron 4はこれらのコンポーネントのそれぞれにメジャーバージョンアップを備えています。 Electron v4.0.0には、Chromium 69.0.3497.106、Node 10.11.0、およびV8 6.9.427.24が含まれています。

さらに、Electron 4にはElectron固有のAPIの変更が含まれています。 Electron 4の主な変更点の概要を以下に示します。変更点の完全なリストについては、Electron v4.0.0リリースノートを参照してください。

remote モジュールの無効化

セキュリティ上の理由から、remote モジュールを無効にすることができるようになりました。 このモジュールは、BrowserWindow および webview タグに対して無効にすることができます。

// BrowserWindow
new BrowserWindow({
webPreferences: {
enableRemoteModule: false
}
})

// webview tag
<webview src="http://www.google.com/" enableremotemodule="false"></webview>

詳細については、BrowserWindow および <webview> タグ のドキュメントを参照してください。

remote.require() / remote.getGlobal() リクエストのフィルタリング

この機能は、レンダラープロセスまたは webviewremote モジュールを完全に無効にしたくないが、remote.require 経由でrequireできるモジュールをさらに制御したい場合に役立ちます。

レンダラープロセスで remote.require 経由でモジュールがrequireされると、app モジュールremote-require イベントが発生します。 イベント(最初の引数)で event.preventDefault() を呼び出して、モジュールのロードを妨げることができます。 requireが発生したWebContents インスタンスは2番目の引数として渡され、モジュール名は3番目の引数として渡されます。 同じイベントが WebContents インスタンスでも発行されますが、この場合の唯一の引数はイベントとモジュール名です。 どちらの場合も、event.returnValue の値を設定することでカスタム値を返すことができます。

// Control `remote.require` from all WebContents:
app.on('remote-require', function (event, webContents, requestedModuleName) {
// ...
});

// Control `remote.require` from a specific WebContents instance:
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
// ...
}
);

同様に、remote.getGlobal(name) が呼び出されると、remote-get-global イベントが発生します。 これは remote-require イベントと同じように動作します。グローバルの戻りを防ぐために preventDefault() を呼び出し、カスタム値を返すために event.returnValue を設定します。

// Control `remote.getGlobal` from all WebContents:
app.on(
'remote-get-global',
function (event, webContents, requrestedGlobalName) {
// ...
}
);

// Control `remote.getGlobal` from a specific WebContents instance:
browserWin.webContents.on(
'remote-get-global',
function (event, requestedGlobalName) {
// ...
}
);

詳細については、以下のドキュメントを参照してください。

バージョン情報パネルへのJavaScriptアクセス

macOSでは、{role: 'about'} 経由で作成されたメニュー項目をクリックするのと同じように、app.showAboutPanel() を呼び出してプログラムでバージョン情報パネルを表示できるようになりました。 詳細については、showAboutPanel のドキュメントを参照してください。

WebContents バックグラウンドスロットリングの制御

WebContents インスタンスに、ページがバックグラウンドになったときにタイマーとアニメーションのスロットリングを有効または無効にするメソッド setBackgroundThrottling(allowed) が追加されました。

let win = new BrowserWindow(...)
win.webContents.setBackgroundThrottling(enableBackgroundThrottling)

詳細については、setBackgroundThrottling のドキュメントを参照してください。

破壊的変更

macOS 10.9のサポート終了

ChromiumはmacOS 10.9 (OS X Mavericks) をサポートしなくなり、その結果、Electron 4.0以降もサポートしなくなりました

単一インスタンスロック

以前は、アプリを単一インスタンスアプリケーション(アプリのインスタンスが一度に1つだけ実行されていることを確認する)にするために、app.makeSingleInstance() メソッドを使用できました。 Electron 4.0以降では、代わりに app.requestSingleInstanceLock() を使用する必要があります。 このメソッドの戻り値は、アプリケーションのこのインスタンスがロックの取得に成功したかどうかを示します。 ロックの取得に失敗した場合、アプリケーションの別のインスタンスがすでにロックを取得して実行されていると想定して、すぐに終了できます。

requestSingleInstanceLock() の使用例と、さまざまなプラットフォームでの微妙な動作の詳細については、app.requestSingleInstanceLock() と関連メソッドのドキュメント、および second-instance イベント を参照してください。

win_delay_load_hook

Windows 用のネイティブモジュールをビルドする場合、モジュールの binding.gyp にある win_delay_load_hook 変数は true でなければなりません(デフォルトです)。 このフックが存在しない場合、ネイティブモジュールは Windows でロードに失敗し、モジュールが見つかりません のようなエラーメッセージが表示されます。 詳細については、ネイティブモジュールガイドを参照してください

非推奨

以下の破壊的変更は Electron 5.0 で計画されているため、Electron 4.0 では非推奨となっています。

nativeWindowOpen で開かれたウィンドウでは Node.js 統合が無効になります

Electron 5.0 以降、nativeWindowOpen オプションで開かれた子ウィンドウは、常に Node.js 統合が無効になります。

webPreferences のデフォルト値

webPreferences オプションを設定して新しい BrowserWindow を作成する場合、以下の webPreferences オプションのデフォルト値は、下記の新しいデフォルト値を支持して非推奨となります。

プロパティ非推奨のデフォルト値新しいデフォルト値
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTagnodeIntegration が設定されている場合はその値、そうでない場合は truefalse

注意: 現在、contextIsolation が有効になっていると webview タグが機能しない 既知のバグ (#9736) があります。 最新の情報については、GitHub の issue をご確認ください。

コンテキスト分離、Node 統合、および webview タグの詳細については、Electron セキュリティドキュメント を参照してください。

Electron 4.0 は引き続き現在のデフォルト値を使用しますが、明示的な値を渡さない場合は、非推奨の警告が表示されます。 Electron 5.0 に向けてアプリを準備するには、これらのオプションに明示的な値を使用してください。 これらの各オプションの詳細については、BrowserWindow のドキュメントを参照してください

webContents.findInPage(text[, options])

medialCapitalAsWordStart オプションと wordStart オプションは、アップストリームで削除されたため非推奨となりました。

アプリフィードバックプログラム

Electron 3.0 の開発中に導入した アプリフィードバックプログラム は成功したため、4.0 の開発中も継続しました。 4.0 ベータサイクルへの参加について、Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp、その他のプログラムメンバーに深く感謝いたします。 アプリフィードバックプログラムの詳細と今後のベータ版への参加については、プログラムに関するブログ記事をご覧ください

今後の予定

短期的には、チームは Chromium、Node、V8 など、Electron を構成する主要コンポーネントの開発に追従することに引き続き注力していきます。 リリース日について約束することは控えていますが、Chromium、Node、V8 の新しいバージョンを含む Electron の新しいメジャーバージョンを約四半期ごとにリリースする予定です。 Electron のバージョン管理の詳細については、バージョン管理ドキュメントを参照してください

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