Electron 4.0.0
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()
リクエストのフィルタリング
この機能は、レンダラープロセスまたは webview
で remote
モジュールを完全に無効にしたくないが、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
オプションのデフォルト値は、下記の新しいデフォルト値を支持して非推奨となります。
プロパティ | 非推奨のデフォルト値 | 新しいデフォルト値 |
---|---|---|
contextIsolation | false | true |
nodeIntegration | true | false |
webviewTag | nodeIntegration が設定されている場合はその値、そうでない場合は true | false |
注意: 現在、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 のバージョンで計画されている破壊的変更については、計画されている破壊的変更のドキュメントを参照してください。