メインコンテンツへ飛ぶ

"Release" タグの記事が 1 件の投稿 件あります

新しい Electron リリースについてのブログ記事

全てのタグを表示

Electron 7.0.0

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

Electron 7.0.0 がリリースされました! これには Chromium 78、V8 7.8、Node.js 12.8.1 へのアップグレードが入っています。 Arm 64 版 Windows リリース、より高速な IPC メソッド、新しい nativeTheme API などを追加しました。


Electron チームは、Electron 7.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 このリリースには、アップグレード、修正、新機能が含まれています。 新機能たちと共に何を作るのか、楽しみにしています! このリリースの詳細については下に続きます。是非ご意見をお聞かせください!

注目すべき変更

  • 累積的更新:

    累積Electron 6 でのバージョンElectron 7 でのバージョン新機能
    Chromium76.0.3809.14678.0.3905.177, 78
    V87.67.87.7, 7.8
    Node.js12.4.012.8.112.5, 12.6, 12.7, 12.8, 12.8.1
  • Arm (64 bit) 版 Windows リリースを追加しました。 #18591#20112

  • リクエスト/レスポンス式の非同期 IPC 向けに ipcRenderer.invoke()ipcMain.handle() を追加しました。 これらは remote モジュールよりも強く推奨されます。 詳細はこちらの "Electron の 'remote' モジュールは有害と考えられる" ブログ記事を参照してください。 #18449

  • OS のテーマや配色の変更を読み取って対応する nativeTheme API を追加しました。 #19758#20486

  • 新しい TypeScript 定義ファイル ジェネレータ に移行ました。 出力結果の定義ファイルがより正確になりました。TypeScript でのビルドに失敗するようになった場合は、これが原因である可能性が高いです。 #18103

変更の完全なリストは、7.0.0 リリースノート を参照してください。

破壊的変更

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

  • 非推奨だった API の削除:
    • Promise を使用するようになった関数のコールバックベース版。 #17907
    • Tray.setHighlightMode() (macOS)。 #18981
    • app.enableMixedSandbox() #17894
    • app.getApplicationMenu()
    • app.setApplicationMenu()
    • powerMonitor.querySystemIdleState()
    • powerMonitor.querySystemIdleTime()
    • webFrame.setIsolatedWorldContentSecurityPolicy()
    • webFrame.setIsolatedWorldHumanReadableName()
    • webFrame.setIsolatedWorldSecurityOrigin() #18159
  • Session.clearAuthCache() はクリアしたキャッシュエントリをフィルタリングできなくなりました。 #17970
  • macOS のネイティブインターフェース (メニュー、ダイアログなど) が、ユーザーのマシンのダークモード設定に自動で合わせるようになりました。 #19226
  • electron モジュールが @electron/get を使用するように更新しました。 Node の最小対応バージョンが Node 8 になりました。 #18413
  • ファイル electron.asar は無くなりました。 このファイルが存在することに依存しているすべてのパッケージスクリプトは更新する必要があります。 #18577

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

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

App のフィードバックプログラム

テストには引き続き アプリフィードバックプログラム を使用します。 このプログラムに参加するプロジェクトは、そのアプリで Electron ベータ版をテストします。見返りとして、発見した新しいバグは安定版リリースのために優先します。 参加や詳細については、プログラムに関するブログ記事を確認してください

次回予告

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

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

Electron 6.0.0

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

Electron チームは、Electron 6.0.0 のリリース発表にワクワクしています! npm install electron@latest から npm でインストールするか、リリースウェブサイト からダウンロードできます。 このリリースには、アップグレード、修正、新機能が含まれています。 新機能たちと共に何を作るのか、楽しみにしています! このリリースの詳細については下に続きます。是非ご意見をお聞かせください!


新機能

今日は Electron プロジェクトにとって初めてのことが起こりました。Electron の安定版リリースが、対応する Chrome 安定版リリース同日に リリースされたのです! 🎉

Electron の機能の多くは、Chromium、Node.js、V8 といったコアコンポーネントによって提供されています。 Electron では、これらのプロジェクトが最新のものになるように維持し、JavaScript の新機能、パフォーマンスの向上、セキュリティ修正をユーザーに提供しています。 これらの各パッケージについて、Electron 6 ではメジャーバージョンを更新しています。

このリリースには、Electron の API の改善も含まれます。 リリースノート により詳細なリストがありますが、ここではハイライトを紹介します。

Promise 化

Electron 6.0 でも 5.0 から始まった近代化 イニシアチブ を継続し、Promise のサポート改善を行っています。

これらの関数は Promise を返すようになりました。従来のコールバックベースの呼び出しもサポートしています。

  • contentTracing.getCategories() #16583
  • contentTracing.getCategories() #16583
  • contentTracing.getTraceBufferUsage() #16600
  • contents.executeJavaScript() #17312
  • cookies.flushStore() #16464
  • cookies.get() #16464
  • cookies.remove() #16464
  • cookies.set() #16464
  • dialog.showCertificateTrustDialog() #17181
  • inAppPurchase.getProducts() #17355
  • inAppPurchase.purchaseProduct()#17355
  • netLog.stopLogging() #16862
  • session.clearAuthCache() #17259
  • session.clearCache() #17185
  • session.clearHostResolverCache() #17229
  • session.clearStorageData() #17249
  • session.getBlobData() #17303
  • session.getCacheSize() #17185
  • session.resolveProxy() #17222
  • session.setProxy() #17222
  • webContents.hasServiceWorker() #16535
  • webContents.printToPDF() #16795
  • webContents.savePage() #16742
  • webFrame.executeJavaScript() #17312
  • webFrame.executeJavaScriptInIsolatedWorld() #17312
  • webviewTag.executeJavaScript() #17312

これらの関数には、同期と Promise ベースの非同期、2 つの形式があります。

  • dialog.showMessageBox()/dialog.showMessageBoxSync() #17298
  • dialog.showOpenDialog()/dialog.showOpenDialogSync() #16973
  • dialog.showSaveDialog()/dialog.showSaveDialogSync() #17054

これらの関数は Promise を返すようになりました。

Electron Helper (Renderer).appElectron Helper (GPU).appElectron Helper (Plugin).app

Hardened Runtime を有効にするためには、書き込みと実行が可能なメモリや異なるチーム ID で署名されたコードの読み込みなどを制限するために、特別なコード署名権限を Helper に付与する必要がありました。

Chromium の Helper アプリに 3 つの新しい種別を 追加しました。1 つはレンダラー用 (Electron Helper (Renderer).app)、1 つは GPU プロセス用 (Electron Helper (GPU).app)、1 つはプラグイン用 (Electron Helper (Plugin).app) です。

electron-osx-sign で Electron アプリのコード署名を行っている方は、ビルドロジックを変更しなくても構いません。 カスタムスクリプトでアプリをコード署名する場合は、3 つの新しい Helper アプリケーションを正しくコード署名しているかどうか確認する必要があります。

これらの新しいヘルパーと共にアプリケーションを正しくパッケージするには、 electron-packager@14.0.4 以上を使用する必要があります。 electron-builder を使用している方は、この Issue を確認して、これらの新しいヘルパーのサポート状況を確認してください。

破壊的変更

  • これは、レンダラープロセスにロードされるネイティブ Node モジュールは N-APIコンテキス対応 であるという将来の要件に対応する作業の、下地づくりとして始めています。 この変更を行う理由は、パフォーマンス高速化、セキュリティ強化、保守作業を軽減するためです。 提案された時系列を含む詳細は、この Issue を読んでください。 この変更は Electron v11 で完了する予定です。

  • net.IncomingMessage ヘッダは、Node.js の動作、特に set-cookie の値や重複するヘッダの処理方法が厳密に一致するように 少し変更 されました。 #17517.

  • shell.showItemInFolder() は void を返す非同期呼び出しになりました。 #17121

  • アプリで app.getPath('log') を使用する前に、新しい関数 app.setAppLogPath() を呼び出して明示的にログパスを設定しなければならないようになりました。 #17841

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

サポートポリシー に基づき、3.x.y は役目を終えました。 開発者とアプリケーションは新しいバージョンの Electron にアップグレードすることを推奨します。

App のフィードバックプログラム

テストには引き続き アプリフィードバックプログラム を使用します。 このプログラムに参加するプロジェクトは、そのアプリで Electron ベータ版をテストします。見返りとして、発見した新しいバグは安定版リリースのために優先します。 参加や詳細については、当プログラムに関するブログ記事を確認してください

次回予告

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

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

新しい Electron リリースケイデンス

· 読むのにかかる時間 1 分
⚡️ 更新 (2021-07-14): より速くなっています!

2021 年の第 3 四半期にて、Chrome チームは 6 週間ごとから 4 週間ごとへと リリースケイデンスを増やしました。 Electron のリリースはこれに準拠しています。 最新の情報につきましては、更新した 8 週間ごとのケイデンス のブログ記事をご覧ください。

🎉 Electron は 12 週ごとに新しいメジャー安定バージョンをリリースします! 🎉


⚡️ なんて速さだ! でもなんで?

簡単に言えば、Chromium は更新を止めないので Electron も遅くなりません。

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

🚀 なんで 12 週ごとに?

6 週ごとに、新しい機能、バグ修正/セキュリティ修正、V8 の改善が施された新しい Chromium リリースが出ます。 Electron ユーザーはこの変更を明確に待ち望んでおり、他の Chromium 安定リリースごとに安定リリース日を合わせていました。 最初に、Electron v6.0.0 には M76 が含まれます。これは、Chromium M76 と同じリリース日である 2019 年 7 月 30 日 で安定版リリースを予定しています。

🚧 私と自作 Electron アプリはどうなりますか?

新しい Chromium と V8 の機能と修正プログラムに以前よりも早くアクセスできるようになります。 重要なのは、これら新しい変更がいつ いつ 行われるかもわかるため、以前よりも良質な情報で計画できるということです。

Electron チームは、新しい順に 3 つのメジャーバージョンを 継続サポート します。 例えば、v6.0.0 が 2019 年 7 月 30 日に安定版になった 場合、v6.x、v5.x、v4.x はサポートします。v3.x はサポート終了になります。

💬 App のフィードバックプログラム

アプリフィードバックプログラム に参加して、ベータリリースと安定化のテストに役立ててください。 このプログラムに参加するプロジェクトは、そのアプリで Electron ベータ版をテストします。見返りとして、発見した新しいバグは安定版リリースのために優先します。

📝 Electronリリースの略歴

v3.0.0 より前の安定版リリースに関する決定は、スケジュールに従っていませんでした。 v3.0.0 と v4.0.0 において、プロジェクトに内部スケジュールを追加しました。 今年の初めに Electron v5.0.0 の安定版リリース日を初めて公開することにしました。 安定版リリース日の発表は全体として好意的に受け止められており、今後のリリースでも継続リリースできることを楽しみにしています。

これらのアップグレード関連の作業を効率化するために、 ガバナンス システム内に アップグレードリリース の作業グループが作成されました。 これらにより、作業をより優先順位付けて委任できます。これは後のリリースごとに効果が出てくるでしょう。

Chromium のケイデンスと比較すると、我々の新たなケイデンスは以下のように位置します。

Electron と Chromium のバージョンを比較する折れ線グラフ

📨 ご質問は、info@electronjs.org までメールでお問い合わせください。

Electron 5.0.0

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

Electron チームは、Electron 5.0.0 のリリース発表にワクワクしています! npm を使って npm install electron@latest でインストールするか、リリースページ から tarball をダウンロードできます。 このリリースには、アップグレード、修正、新機能が含まれています。 新機能たちと共に何を作るのか、楽しみにしています! このリリースの詳細については下に続きます。是非ご意見をお聞かせください!


何が新しくなったの?

Electron の機能の多くは、Chromium、Node.js、V8 といったコアコンポーネントによって提供されています。 Electron では、これらのプロジェクトが最新のものになるように維持し、JavaScript の新機能、パフォーマンスの向上、セキュリティ修正をユーザーに提供しています。 これらの各パッケージについて、Electron 5 ではメジャーバージョンを更新しています。

Electron 5 には、Electron 固有の API の改善も含まれます。 主な変更点の概要は以下の通りです。変更点の全リストは Electron v5.0.0 リリースノート を参照してください。

Promise 化

Electron 5 でも Promise 化イニシアチブ の取り組みを継続しており、Electron のコールバックベース API を Promise を使用したものへと変換しています。 これらの API が Electron 5 で変換されています。

  • app.getFileIcon
  • contentTracing.getCategories
  • contentTracing.startRecording
  • contentTracing.stopRecording
  • debugger.sendCommand
  • Cookie API
  • shell.openExternal
  • webContents.loadFile
  • webContents.loadURL
  • webContents.zoomLevel
  • webContents.zoomFactor
  • win.capturePage

macOS 向けシステムカラーアクセス

macOS システムカラーにアクセスするために、これらの関数が systemPreferences に変更または追加されました。

  • systemPreferences.getAccentColor
  • systemPreferences.getColor
  • systemPreferences.getSystemColor

プロセスメモリ情報

現在のプロセスに関するメモリ使用量の統計情報を取得する関数 process.getProcessMemoryInfo が追加されました。

remote API の更なるフィルタリング

remote API のセキュリティを向上させるため、remote.getBuiltinremote.getCurrentWindowremote.getCurrentWebContents<webview>.getWebContentsフィルタリング できる、新しい remote のイベントが追加されました。

BrowserWindow で複数の BrowserView

BrowserWindow が一つの BrowserWindow 内で複数の BrowserViewを管理できるようになりました。

破壊的変更

パッケージしたアプリのデフォルト

パッケージしたアプリは、デフォルトのアプリと同じように動作するようになりました。デフォルトのアプリケーションメニューがそのアプリになければ作成され、アプリが window-all-closed イベントを処理しなければ、そのイベントは自動的に処理されます。

混合サンドボックス

混合サンドボックスモードはデフォルトで有効になりました。 これまでは混合サンドボックスモードも有効になっている場合にのみサンドボックス化されていました。これで、sandbox: true で起動したレンダラーが実際にサンドボックス化されるようになりました。

セキュリティの改善

セキュリティ向上のため、nodeIntegrationwebviewTag の省略値が false になりました。

スペルチェッカーが非同期に

SpellCheck API が変更され、非同期の実行結果 を提供するようになりました。

非推奨

以下の API は Electron 5.0.0 で新たに非推奨となり、6.0.0 で削除される予定のものです。

arm と arm64 向けの mksnapshot バイナリ

arm と arm64 向けの mksnapshot のネイティブバイナリは非推奨となり、6.0.0 で削除されます。 arm と arm64 向けの snapshots は x64 バイナリで作成できます。

WebContents での ServiceWorker API

WebContents 上での ServiceWorker API は後に削除するために非推奨となります。

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

サンドボックス化 WebContents での自動モジュール

セキュリティ向上のため、以下のモジュールの require を介した直接使用は非推奨になります。代わりにサンドボックス化された WebContents 内で remote.require を使用してください。

  • electron.screen
  • child_process
  • fs
  • os
  • パス

webFrame Isolated World APIs

webFrame.setIsolatedWorldContentSecurityPolicywebFrame.setIsolatedWorldHumanReadableNamewebFrame.setIsolatedWorldSecurityOriginwebFrame.setIsolatedWorldInfo と入れ替わりで非推奨になりました。

混合サンドボックス

enableMixedSandbox--enable-mixed-sandbox コマンドラインスイッチは互換性のためにまだ残りますが、非推奨となり効果も無くなります。

2.0.x サポートの終了

サポートするバージョンのポリシー に基づき、2.0.x は役目を終えました。

App のフィードバックプログラム

テストには引き続き アプリフィードバックプログラム を使用します。 このプログラムに参加するプロジェクトは、そのアプリで Electron ベータ版をテストします。見返りとして、発見した新しいバグは安定版リリースのために優先します。 参加や詳細については、当プログラムに関するブログ記事を確認してください

次回予告

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

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

Node.js ネイティブアドオンと Electron 5.0

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

Electron 5.0 でネイティブな Node.js アドオンを使用しようとして問題が発生している場合、 V8 の最新バージョンで動作するように更新する必要があるかもしれません。


さようなら v8::Handle 、こんにちは v8::Local

2014 年、 V8 チームはローカルハンドルを v8::Local に置き換え、 v8::Handle を非推奨にしました。 Electron 5.0 は v8::Handle が削除されたバージョンの V8 を含んでいるため、それを使用しているネイティブ Node.js アドオンは Electron 5.0 で使用される前に更新する必要があります。

必要なコード変更は最小限ですが、未だ v8::Handle を使用している すべての ネイティブ Node モジュールは Electron 5.0 でのビルドに失敗するため、変更されなければなりません。 Node.js v12 はこの V8 の変更を含んでいるため、 v8::Handle を使用しているモジュールは次のバージョンの Node で動作するために どのみち 更新される必要があるでしょう。

私はネイティブアドオンをメンテナンスしていますが、どうすればいいですか?

あなたが Node.js 用のネイティブアドオンをメンテナンスしている場合、 v8::Handle が使われている場所がすべて v8::Local に置き換わっていることを確認してください。 前者は後者の別名に過ぎなかったので、この問題に対処するために他の変更を加える必要はありません。

また、 N-API は、Node.js の一部として V8 とは別に管理され、基になる JavaScript エンジンの変更からネイティブアドオンを分離することを目的としています。 詳細については Node.js ウェブサイト内の N-API ドキュメント を参照してください。

ヘルプ! ネイティブアドオンを使用している私のアプリが動作しません!

アプリで Node.js 用のネイティブアドオンを使用していて、この問題のためにネイティブアドオンがビルドされない場合は、アドオンの作成者に問い合わせて、問題を解決する新しいバージョンがリリースされているかどうかを確認してください。 もしそうでなければ、著者に連絡を取る (または プルリクエストを開く! ) とよいでしょう。

Electron v5.0.0 タイムライン

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

v5.0.0 以降の Electron のリリーススケジュールを初めて公開することにドキドキしています。 これは公開される長期のスケジュールを設定する第一歩です。


v4.0.0 安定版リリースの ブログ記事 で述べたように、およそ四半期ごとにリリース予定です。Chromium のリリースと密接なケイデンスを維持します。 Chromium は、6 週間という非常に速い周期で新バージョンをリリースします。

Electron と Chromium の変遷を並べて見てみましょう。

Electron と Chromium のバージョンを比較する折れ線グラフ

2018 年の後半、私たちの最優先事項は、より早くリリースして Chromium に追いつくことでした。 これは事前に決めたタイムラインを遵守することで成功しました。 Electron 3.0.0 と 4.0.0 は、各リリース 2 ~ 3 か月のタイムラインでリリースされました。 5.0.0 以降のリリースでもそのペースを続けるつもりです。 ほぼ四半期ごとに Electron のメジャーリリースが行われ、Chromium のリリースペースに追いつきます。 Chromium の安定版リリースに先んじることは常に私たちの目標であり、私たちはそれを着実に進めています。

Node.jsChromium のように将来の日付を約束したいのですが、まだ その段階ではありません。 将来的には長期的なスケジュールに変化するだろうと楽観視しています。

それを念頭に置いて、v5.0.0 のリリーススケジュールを公開することで第一段階を進めています。 スケジュールは こちら にあります。

ベータ版リリースと安定化のテストに役立てるため、アプリフィードバックプログラム への参加をご検討ください。

Electron 4.0.0

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

Electron チームは、Electron 4 安定版が利用可能になった発表でワクワクしています! electronjs.org からか、npm で npm install electron@latest からインストールできます。 このリリースにはアップグレード、修正、新機能が詰め込んであります。皆さんが何を作るのか待ち遠しいです。 以下にこのリリースの詳細が続きます。是非使用したご意見を共有してください!


何が新しくなったの?

Electron の機能の大部分は、Electron を構成するコアコンポーネントの Chromium、Node.js、V8 によって提供されています。 そのため Electron チームの主な目標は、これらのプロジェクトの変更に可能な限り対応し、Electron アプリを開発する開発者に新しいウェブや 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 v4.0.0 リリースノート を参照してください。

remote モジュールの無効化

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

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

// webview タグ
<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 (第一引数) の event.preventDefault() を呼び出すと、モジュールをロードしないようにできます。 第 2 引数には require を発生させた WebContents インスタンス が、第 3 引数にはモジュール名が渡されます。 同じイベントが WebContents インスタンスでも発生しますが、この場合はイベントとモジュール名のみが引数です。 どちらの場合でも、event.returnValue に値をセットすることでカスタム値を返すことが出来ます。

// 全ての WebContents からの `remote.require` を制御:
app.on('remote-require', function (event, webContents, requestedModuleName) {
// ...
});

// 特定の WebContents インスタンスからの `remote.require` を制御します。
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
// ...
},
);

同様に、remote.getGlobal(name) が呼び出されると remote-get-global イベントが発生します。 これは remote-require イベントと同じように動作します。global が返されないように preventDefault() を呼び出したり、event.returnValue でカスタム値を返したりできます。

// 全ての WebContents からの `remote.getGlobal` を制御します。
app.on('remote-get-global', function (event, webContents, requrestedGlobalName) {
// ...
},
);

// 特定の WebContents インスタンスからの `remote.getGlobal` を制御します。
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 上ではロードできず、Cannot find module のようなエラーメッセージが表示されます。 詳細は ネイティブモジュールガイドを参照してください

非推奨

以下の破壊的変更が Electron 5.0 で予定されているため、Electron 4.0 で非推奨となります。

Windows で nativeWindowOpen された場合の Node.js インテグレーション無効化

Electron 5.0 からは、nativeWindowOpen オプションで開いた子ウィンドウでは常に Node.js インテグレーションが無効化されます。

webPreferences の既定値

webPreferences オプションを指定して新しいBrowserWindow を作成する場合、以下のように元の webPreferences オプションの省略値は非推奨となり、新しい省略値が採用されます。

プロパティ非推奨の省略値新しい省略値
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTagnodeIntegration が設定されていればその値に, さもなくば truefalse

注記: 現在 既知のバグ (#9736) があり、contextIsolation がオンの場合にwebview タグが動作しません。 最新の情報は GitHub の Issue を確認してください!

コンテキストイソレーション、Node インテグレーション、webview タグについての詳細は、Electron セキュリティドキュメント を参照してください。

Electron 4.0 では旧来のデフォルト値を使用しますが、値を明示的に渡さない場合は非推奨の警告が表示されます。 アプリが Electron 5.0 へ対応するように準備するのであれば、これらのオプションに明示的な値を使用してください。 各オプションの詳細については BrowserWindow ドキュメント を参照してください。

webContents.findInPage(text[, options])

medialCapitalAsWordStartwordStart オプションは、上流で削除されたために非推奨となりました。

App のフィードバックプログラム

Electron 3.0 の開発時に実施した アプリフィードバックプログラム が成功したので、4.0 の開発でも継続して実施します。 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp、その他プログラムメンバーの方々には、4.0 ベータサイクルに参加して頂いたことに多大な感謝の意を表します。 アプリフィードバックプログラムの詳細や今後のベータ版への参加については、当プログラムに関するブログ記事を参照してください

次回予告

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

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

Electron 3.0.0

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

Electron チームは electronjs.org 及び npm install electron@latest から初の Electron 3 安定版が利用できるという発表でワクワクしています! アップグレード、修正、新機能が盛り沢山で、皆さんが何を作るのか待ち遠しいです。 以下に本リリースの詳細をご紹介します。使用したご意見ご感想をお待ちしております。


リリースプロセス

私たちは、v3.0.0 の開発を進めていく中で、プログレッシブベータリリースのフィードバック進捗を定式化することで、安定版リリースの基準をより経験的に定義しようとしました。 v3.0.0 は、アプリフィードバックプログラム に参加してくださった皆様からの、ベータサイクルの初期テストとフィードバックが無ければ不可能だったでしょう。 Atlassian、Atom、Microsoft Teams、Oculus、OpenFin、Slack、Symphony、VS Code、その他のプログラムメンバーに感謝します。 今後のベータへの参加をご希望の方は、info@electronjs.org までご連絡ください。

変更 / 新機能

Chrome v66.0.3359.181、Node v10.2.0、V8 v6.6.6.346.23 など、Electron の重要なツールチェーン部品のいくつかに大きなバージョン上げがありました。

  • [#12656] 新機能: app.isPackaged
  • [#12652] 新機能: app.whenReady()
  • [#13183] 新機能: process.getHeapStatistics()
  • [#12485] 新機能: win.moveTop() でウインドウの Z オーダーを一番上に
  • [#13110] 新機能: TextField と Button の API
  • [#13068] 新機能: netLog API で動的ログ制御
  • [#13539] 新機能: サンドボックスレンダラー内で webview が有効に
  • [#14118] 新機能: fs.readSync が大きいファイルでも動作するように
  • [#14031] 新機能: node の fs のラッパーで fs.realpathSync.nativefs.realpath.native が利用できるように

API の破壊的変更

  • [#12362] 新機能: メニューアイテムの順番を制御できるように更新
  • [#13050] リファクタ: 非推奨 API のドキュメントを削除
  • [#12477] リファクタ: did-get-response-detailsdid-get-redirect-request のイベントを削除
  • [#12655] 新機能: ドラッグ/ドロップ時のナビゲーションをデフォルトで無効に
  • [#12993] 新機能: Node v4.x 以上を electron npm モジュールが要求するように
  • [#12008 #12140 #12503 #12514 #12584 #12596 #12637 #12660 #12696 #12716 #12750 #12787 #12858] リファクタ: NativeWindow
  • [#11968] リファクタ: menu.popup()
  • [#8953] 新機能: ipcRenderer.sendSync の結果送信に JSON を使用しないように
  • [#13039] 新機能: デフォルトで URL に後続するコマンドライン引数を無視するように
  • [#12004] リファクタ: api::Windowapi::BrowserWindow に名称変更
  • [#12679] 新機能: 見た目のズームをデフォルトで無効に
  • [#12408] リファクタ: アプリコマンドの media-play_pausemedia-play-pause に名称変更

macOS

  • [#12093] 新機能: ワークスペース通知をサポート
  • [#12496] 新機能: tray.setIgnoreDoubleClickEvents(ignore) で tray のダブルクリックイベントを無視できるように
  • [#12281] 新機能: macOS でマウス転送機能
  • [#12714] 新機能: 画面をロック/ロック解除のイベント

Windows

  • [#12879] 新機能: screen と screen との座標変換に DIP を追加

注意: このバージョンを動かした後に古いバージョンの Electronに切り替える場合、古いバージョンでのクラッシュを避けるためにユーザーデータのディレクトリを消去する必要があります。 console.log(app.getPath("userData")) を実行してユーザデータのディレクトリを確認するか、ドキュメント を参照して詳細をご確認ください。

バグ修正

  • [#13397] 修正: fs.statSyncNoException が例外を送出する問題
  • [#13476, #13452] 修正: jquery でサイト読み込みをする際のクラッシュ
  • [#14092] 修正: net::ClientSocketHandle デストラクタ内でのクラッシュ
  • [#14453] 修正: フォーカス変更を、次のティックではなくすぐに通知するように

MacOS

  • [#13220] 修正: <input file="type"> のファイルを開くダイアログでバンドルを選択してしまう問題
  • [#12404] 修正: 非同期ダイアログ使用時にメインプロセスをブロックする問題
  • [#12043] 修正: 右クリックメニューのコールバック
  • [#12527] 修正: タッチバーアイテムを再利用時のイベント漏れ
  • [#12352] 修正: tray タイトルのクラッシュ
  • [#12327] 修正: ドラッグ不可領域
  • [#12809] 修正: 開いているメニューの更新を抑止
  • [#13162] 修正: tray アイコンの大きさが負の値を受け付けないように
  • [#13085] 修正: tray タイトルがハイライト時に反転しない
  • [#12196] 修正: enable_run_as_node==false 時の Mac ビルド
  • [#12157] 修正: 鮮明なフレームレスウインドウでの更なる問題
  • [#13326] 修正: app.removeAsDefaultProtocolClient を呼び出した後に mac でのプロトコルを消すように
  • [#13530] 修正: MAS ビルド内での非公開 API の誤用
  • [#13517] 修正: tray.setContextMenu のクラッシュ
  • [#14205] 修正: defaultId を設定している場合でもエスケープを押せばダイアログが閉じるように

Linux

  • [#12507] 修正: オフスクリーンウインドウでの BrowserWindow.focus()

その他注意事項

  • 現在 PDF ビューアは動作しませんが、作業中であり、すぐ動作するようになる予定です。
  • TextFieldButton API は実験的なものなので、デフォルトで無効化されています。
    • これらは enable_view_api ビルドフラグで有効化できます。

次回予告

Electron チームは、最終的に Chromium、Node、V8 の開発ケイデンスと同等で維持するため、より迅速でスムーズなアップグレードプロセスの策定作業を続けています。

Electron 2.0.0

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

4 ヶ月以上の開発期間、8 回のベータリリース、数多くのアプリを段階的にロールアウトし、世界的なテストを経て、今日では electronjs.org にて Electron 2.0.0 のリリースが公開されます。


リリースプロセス

2.0.0 以降、Electron のリリースは セマンティックバージョニング に従います。 これによりメジャーバージョンが頻繁に上がるようになり、通常は Chromium に対応する形でメジャーアップデートとなります。 パッチリリースには優先度の高いバグ修正のみが含まれ、より安定したものになります。

Electron 2.0.0 は、メジャーリリース前の Electron での安定化方法の改善でもあります。 いくつかの大規模なElectronアプリでは、2.0.0 ベータ版が段階的にロールアウトされており、これまでのベータ版で最高のフィードバックループを提供しています。

変更 / 新機能

  • Chrome 61、Node 8.9.3、V8 6.1.534.41、Linux の GTK+ 3、スペルチェッカーの更新、Squirrel など、Electron のツールチェーンのいくつかの重要な部分に大きな変更が加えられました。
  • アプリ内課金 が MacOS に対応しました。 #11292
  • ファイル読み込み API が新しくなりました。 #11565
  • ウインドウの有効化/無効化 API が新しくなりました。 #11832
  • API app.setLocale() が新規作成されました。 #11469
  • IPC メッセージのロギングサポートが新しくなりました。 #11880
  • メニューイベントが新規追加されました。 #11754
  • powerMonitor に shutdown イベントを追加しました。 #11417
  • 複数の BrowserWindow を一つのプロセスにまとめる affinity オプションを追加しました。 #11501
  • saveDialog に利用可能な拡張子を表示する機能を追加しました。 #11873
  • 追加の通知アクションのサポートです #11647
  • macOS で通知を閉じるボタンのタイトルの設定機能。 #11654
  • menu.popup(window, callback) に条件を追加しました
  • タッチバーアイテムのメモリの改善。 #12527
  • セキュリティ推奨チェックリストを改善しました。
  • App-Scoped Security のスコープ有りブックマークを追加しました。 #11711
  • レンダラープロセスに任意の引数を設定する機能を追加しました。 #11850
  • フォーマットピッカー用アクセサリビューを追加しました。 #11873
  • ネットワークデリゲートの競合条件を修正しました。 #12053
  • Linux の mips64el アーキテクチャのサポートを削除しました。 Electron は C++14 のツールチェーンに依存しているのですが、リリース時にそのアーキテクチャでそのツールチェーンが利用できませんでした。 今後再サポートしたいと思っています。

API の破壊的変更

  • 以下の 非推奨 API を削除しました。
    • menu.popup シグネチャを変更しました。 #11968
    • 非推奨だった crashReporter.setExtraParameter を削除しました #11972
    • 非推奨だった webContents.setZoomLevelLimitswebFrame.setZoomLevelLimits を削除しました。 #11974
    • 非推奨だった clipboard メソッドを削除しました。 #11973
    • tray.setHighlightMode の真偽値引数のサポートを削除しました。 #11981

バグ修正

  • webContents.isOffscreen() が常に利用できるように変更しました。 #12531
  • デベロッパー ツールをドックしていない及びフォーカスしていない時の BrowserWindow.getFocusedWindow() を修正しました。 #12554
  • プリロードのパスに特殊文字が含まれている場合に、サンドボックス描画でプリロードがロードされない問題を修正しました。 #12643
  • ドキュメントの通りに allowRunningInsecureContent の既定値を訂正しました。 #12629
  • nativeImage の透明度を修正しました。 #12683
  • Menu.buildFromTemplate の問題を修正しました。 #12703
  • menu.popup の引数がオブジェクトか確認するようになりました。 #12330
  • 新規プロセス作成とコンテキスト解放との間の競合状態を取り除きました。 #12361
  • BrowserView 変更時にドラッグ可能領域を更新するようにしました。 #12370
  • フォーカス中にメニューバー切り替えの alt キーを検出するようにしました。 #12235
  • webview 内での誤警告を修正しました。 #12236
  • 親ウィンドウの 'show' オプションをそのまま引き継いでいたので修正しました。 #122444
  • getLastCrashReport() で本当に最後のクラッシュレポートかどうか確認するようにしました。 #12255
  • ネットワーク共有パスへの require を修正しました。 #12287
  • 右クリックメニューのクリックのコールバックを修正しました。 #12170
  • ポップアップメニュー位置を修正しました。 #12181
  • libuv ループのクリーンアップを改善しました。 #11465
  • 透過色おける hexColorDWORDToRGBA を修正しました。 #11557
  • getWebPreferences API でのヌルポインタ参照外しを修正しました。 #12245
  • メニューデリゲート内の循環参照を修正しました。 #11967
  • net.request のプロトコルフィルタリングを修正しました。 #11657
  • WebFrame.setVisualZoomLevelLimits はユーザーエージェントのスケール制約を設定するようになりました。#12510
  • webview のオプションの既定値を適切にしました。 #12292
  • 振動サポートを改善しました。 #12157 #12171 #11886
  • シングルトンフィクスチャのタイミングの問題を修正しました。
  • NotifierSupportsActions() の破損したプロダクションキャッシュを修正しました
  • MenuItem の role を camelCase 互換にしました。 #11532
  • タッチバーの状態更新を改善しました。 #11812#11761
  • 不要なメニューのセパレータを削除しました。 #11827
  • Bluetooth チューナーのバグを修正しました。 #11399 でクローズしています。
  • macOS フルスクリーン切り替えのメニューアイテムのラベルを修正しました。 #11633
  • ウィンドウが無効のときにツールチップが隠れる問題を改善しました。 #11644
  • 非推奨だった web-view のメソッドを移行しました。 #11798
  • BrowserView から開いたウインドウを閉じるときの問題を修正しました。 #11799
  • Bluetooth チューナーのバグを修正しました。 #11492
  • app.getFileIcon API でタスクスケジューラを使用するように更新しました。 #11595
  • オフスクリーンレンダリング時にも console-message イベントが発生するようにしました。 #11921
  • WebContents.downloadURL でのカスタムプロトコルからのダウンロードを修正しました。 #11804
  • デベロッパー ツールがデタッチされたときに透過ウィンドウが透明でなくなる問題を修正しました。 #11956
  • Electron アプリが再起動やシャットダウンを中止する問題を修正しました。 #11625

macOS

  • タッチバーアイテムを再利用した時のイベントリークを修正しました。 #12624
  • ダークモードでの tray のハイライトを修正しました。 #12398
  • 非同期の dialog がメインプロセスをブロックする問題を修正しました。 #12407
  • setTitle したときの tray のクラッシュを修正しました。 #12356
  • Dock メニュー設定時のクラッシュを修正しました。 #12087

Linux

  • Linux のデスクトップ通知を改善しました。 #12229 #12216 #11965 #11980
  • menu の GTK+ テーマサポートを改善しました。 #12331
  • Linux 上できれいに終了するようにしました。 #12139
  • tray アイコンのデフォルトツールチップにアプリ名を使うようにしました。 #12393

Windows

  • Visual Studio 2017 サポートを追加しました。 #11656
  • システムクラッシュハンドラへの例外渡しを修正しました。 #12259
  • 最小化したウィンドウでツールチップが非表示になる問題を修正しました。 #11644
  • desktopCapturer が正しい screen をキャプチャするように修正しました。 #11664
  • 透過状態における disableHardwareAcceleration を修正しました。 #11704

次回予告

Electron チームは、Chromium、Node、v8 の新バージョンのサポートに対して懸命に取り組んでいます。 3.0.0-beta.1 に乞うご期待!

Electron 2.0 以降 - セマンティックバージョニング

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

新しいメジャーバージョンの Electron が開発中です。そこで、バージョン管理戦略にいくつかの変更を加えます。 バージョン 2.0.0 から、Electron はセマンティックバージョニングに厳密に従います。


この変更によりメジャーバージョンが頻繁に上がるようになり、これは通常 Chromium 対応のメジャーアップデートになります。 また、パッチリリースにはバグ修正のみが含まれ、新機能を含みません。そのため、パッチリリースの安定性も向上します。

メジャーバージョンの単位

  • Chromium のバージョン更新
  • Node.js のメジャーバージョン更新
  • 互換性を破る Electron API の変更

マイナーバージョンの単位

  • Node.js のマイナーバージョン更新
  • 互換性を破らない Electron API の変更

パッチバージョンの単位

  • Node.js のパッチバージョン更新
  • Chromium パッチの修正関連
  • Electron のバグ修正

Electron の semver 範囲がより意味を持つようになるため、Electron をインストールする時は npm 既定の --save-dev フラグの使用を推奨します。これにより、バージョンの前に ^ が付けられ、マイナーやパッチの更新を安全にできます。

npm install --save-dev electron

バグ修正にのみ関心がある開発者は、チルダを前に付けた semver を使用するとよいでしょう。~2.0.0 は、新機能は導入せずに安定性を改善する修正のみを導入します。

詳細は、electronjs.org/docs/tutorial/electron-versioning を参照してください。