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

「リリース」タグ付きの投稿 41 件

新しいElectronリリースに関するブログ投稿

すべてのタグを表示

Electron 5.0.0

·4分間の読書

Electronチームは、Electron 5.0.0のリリースを発表できることを嬉しく思います!`npm install electron@latest`でnpm経由でインストールするか、リリースページから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`が追加されました。

リモートAPIの追加フィルタリング

`remote` APIのセキュリティを向上させるために、`remote.getBuiltin`、`remote.getCurrentWindow`、`remote.getCurrentWebContents`、および`.getWebContents`をフィルタリングできるように、新しいリモートイベントが追加されました。

BrowserWindow上の複数のBrowserView

BrowserWindowは、同じBrowserWindow内で複数のBrowserViewを管理できるようになりました。

破壊的変更

パッケージ化されたアプリのデフォルト

パッケージ化されたアプリは、デフォルトアプリと同じように動作するようになりました。アプリが独自のアプリケーションメニューを持っている場合を除き、デフォルトのアプリケーションメニューが作成され、アプリがイベントを処理しない限り、`window-all-closed`イベントが自動的に処理されます。

混合サンドボックス

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

セキュリティの向上

セキュリティを向上させるため、`nodeIntegration`と`webviewTag`のデフォルト値は現在`false`です。

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

スペルチェックAPIは、非同期の結果を提供するように変更されました。

非推奨事項

Electron 5.0.0で新たに非推奨となったAPIで、6.0.0で削除される予定です。

armおよびarm64用Mksnapshotバイナリ

armおよびarm64向けのmksnapshotのネイティブバイナリは非推奨となり、6.0.0で削除されます。armおよびarm64のスナップショットは、x64バイナリを使用して作成できます。

WebContentsのServiceWorker API

削除に向けて、WebContentsのServiceWorker APIが非推奨となりました。

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

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

セキュリティを向上させるため、以下のモジュールは`require`による直接使用が非推奨となり、サンドボックス化されたwebContentsでは`remote.require`経由で含める必要があります。

  • electron.screen
  • child_process
  • fs
  • os
  • path

webFrame分離ワールドAPI

`webFrame.setIsolatedWorldContentSecurityPolicy`、`webFrame.setIsolatedWorldHumanReadableName`、`webFrame.setIsolatedWorldSecurityOrigin`は非推奨となり、`webFrame.setIsolatedWorldInfo`に置き換えられました。

混合サンドボックス

`enableMixedSandbox`と`--enable-mixed-sandbox`コマンドラインスイッチは互換性のために残っていますが、非推奨となり、効果はありません。

2.0.xのサポート終了

弊社のサポート対象バージョンポリシーに従い、2.0.xはサポート終了となりました。

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

引き続き、アプリフィードバックプログラムを使用してテストを行っています。このプログラムに参加するプロジェクトでは、アプリでElectronベータ版をテストし、見つけた新しいバグは安定版リリースの優先順位が向上します。参加をご希望の方、または詳細を知りたい方は、ブログ記事をご覧ください

今後の予定

短期的な目標としては、Chromium、Node、V8を含むElectronを構成する主要コンポーネントの開発を継続することに重点を置いています。リリース日については約束できませんが、これらのコンポーネントの新しいバージョンを含むElectronの新しいメジャーバージョンを四半期ごとにリリースする予定です。暫定的な6.0.0スケジュールは、Electron 6開発ライフサイクルの重要な日付を示しています。また、バージョン管理に関するドキュメントで、Electronのバージョン管理に関する詳細情報をご覧ください。

今後のElectronのバージョンの計画されている破壊的変更については、計画されている破壊的変更に関するドキュメントをご覧ください。

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

読了時間2分

Electron 5.0でネイティブNode.jsアドオンの使用に問題がある場合は、最新のV8バージョンで動作するように更新する必要がある可能性があります。


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

2014年、V8チームはローカルハンドル用にv8::Handlev8::Localに置き換えることを非推奨としました。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に置き換えてください。前者は後者の単なるエイリアスだったので、この特定の問題に対処するために他の変更を行う必要はありません。

Node.js自体の一部としてV8とは別に保守され、基盤となるJavaScriptエンジンでの変更からネイティブアドオンを保護することを目的としたN-APIを検討することもできます。Node.jsのWebサイトにあるN-APIドキュメントで詳細情報を確認できます。

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

アプリでNode.jsのネイティブアドオンを使用していて、この問題のためにネイティブアドオンがビルドできない場合は、アドオンの作成者に連絡して、問題を解決する新しいバージョンをリリースしているかどうかを確認してください。そうでない場合は、作成者に連絡するか(またはプルリクエストを開く)のがおそらく最善策です。

Electron v5.0.0タイムライン

読了時間2分

Electronは、v5.0.0からリリーススケジュールを公開することになりました。これは、公開された長期的なタイムラインを持つための最初のステップです。


v4.0.0の安定版リリースのブログ記事で述べたように、Chromiumリリースとの調和を保つために、四半期ごとにリリースする予定です。Chromiumは、6週間ごとに新しいバージョンを非常に迅速にリリースします。

ElectronとChromiumの進捗状況を並べて見てみましょう。

line graph comparing Electron versus Chromium versions

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

読了時間6分

Electronチームは、Electron 4の安定版リリースを発表できることを嬉しく思います!electronjs.orgまたはnpm経由で`npm install electron@latest`を使用してインストールできます。このリリースには、アップグレード、修正、新機能が満載されており、皆様がそれらを使って構築するものを楽しみにしています。このリリースに関する詳細については、以下をお読みください。ご意見がありましたら、ぜひお知らせください!


新機能

Electronの機能の大部分は、Chromium、Node.js、およびV8(Electronを構成するコアコンポーネント)によって提供されています。そのため、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`経由で要求できるモジュールをさらに制御したい場合に役立ちます。

レンダラープロセスで`remote.require`を使用してモジュールを要求すると、`app`モジュールで`remote-require`イベントが発生します。`event.preventDefault()`をイベント(最初の引数)で呼び出して、モジュールがロードされないようにすることができます。要求が発生した`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()を呼び出してプログラムで「About」パネルを表示できるようになりました。詳細は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

注:現在、既知のバグ(#9736)により、contextIsolationが有効になっている場合、webviewタグが機能しません。最新の情報については、GitHubの問題をご確認ください!

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

Electron 4.0では現在のデフォルト値が引き続き使用されますが、明示的な値を渡さない場合は、非推奨に関する警告が表示されます。アプリケーションをElectron 5.0に対応させるには、これらのオプションに明示的な値を使用してください。BrowserWindowのドキュメントで、これらのオプションの詳細を確認してください。

webContents.findInPage(text[, options])

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

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

アプリフィードバックプログラムは、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

·4分間の読書

Electronチームは、Electron 3の最初の安定版リリースがelectronjs.orgおよびnpm install electron@latestから入手できることを発表できることを嬉しく思います!アップグレード、修正、新機能が満載されており、皆様がそれらを使って構築するものを楽しみにしています。以下は、このリリースに関する詳細です。ご検討のほど、フィードバックをお待ちしております。


リリースプロセス

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.346.23など、Electronのツールチェーンのいくつかの重要な部分に大きな変更がありました。

  • [#12656] feat: app.isPackaged
  • [#12652] feat: app.whenReady()
  • [#13183] feat: process.getHeapStatistics()
  • [#12485] feat: ウィンドウのz順序を最上位に移動するwin.moveTop()
  • [#13110] feat: TextFieldおよびButton API
  • [#13068] feat: 動的なログ制御のためのnetLog API
  • [#13539] feat: サンドボックスレンダラーでwebviewを有効化
  • [#14118] feat: fs.readSyncが巨大ファイルでも機能するようになりました
  • [#14031] feat: fs.realpathSync.nativeおよびfs.realpath.nativeを使用可能にするためのNode fsラッパー

破壊的なAPIの変更

  • [#12362] feat: メニュー項目順序制御の更新
  • [#13050] refactor: ドキュメント化された非推奨APIの削除
  • [#12477] refactor: did-get-response-detailsイベントとdid-get-redirect-requestイベントの削除
  • [#12655] feat: ドラッグアンドドロップでのナビゲーションの無効化をデフォルトで有効化
  • [#12993] feat: 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::Window`から`api::BrowserWindow`に名前変更
  • [#12679] 新機能: 視覚的なズームをデフォルトで無効化
  • [#12408] リファクタリング: アプリコマンド`media-play_pause`を`media-play-pause`に名前変更

macOS

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

Windows

  • [#12879] 新機能: DIPと画面座標間の変換を追加

重要事項: このバージョンを実行した後に古いバージョンのElectronに切り替える場合、古いバージョンがクラッシュするのを防ぐために、ユーザーデータディレクトリをクリアする必要があります。ユーザーデータディレクトリを取得するには、`console.log(app.getPath("userData"))`を実行するか、ドキュメントを参照してください。

バグ修正

  • [#13397] 修正: `fs.statSyncNoException`が例外をスローする問題
  • [#13476, #13452] 修正: jQueryを使用するサイトの読み込み時のクラッシュ
  • [#14092] 修正: `net::ClientSocketHandle`デストラクタでのクラッシュ
  • [#14453] 修正: フォーカス変更をすぐに通知する(次のtickではなく)

macOS

  • [#13220] 修正: ``ファイルオープンダイアログでバンドルを選択できる問題
  • [#12404] 修正: 非同期ダイアログ使用時のメインプロセスのブロック問題
  • [#12043] 修正: コンテキストメニューのクリックコールバック
  • [#12527] 修正: タッチバーアイテムの再利用時のイベントリーク
  • [#12352] 修正: トレイタイトルのクラッシュ
  • [#12327] 修正: ドラッグ不可領域
  • [#12809] 修正: メニューが開いている間のメニュー更新を防ぐ
  • [#13162] 修正: トレイアイコンのバウンズで負の値を許可しない
  • [#13085] 修正: ハイライト時のトレイタイトルの反転
  • [#12196] 修正: `enable_run_as_node==false`時のMacビルド
  • [#12157] 修正: バイブランシーを使用したフレームレスウィンドウの追加の問題
  • [#13326] 修正: `app.removeAsDefaultProtocolClient`呼び出し後のMacプロトコルのnoneへの設定
  • [#13530] 修正: MASビルドでの非公開APIの不正使用
  • [#13517] 修正: `tray.setContextMenu`クラッシュ
  • [#14205] 修正: ダイアログでEscapeキーを押すと、`defaultId`が設定されている場合でもダイアログが閉じられる

Linux

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

その他

  • PDFビューアは現在動作していませんが、現在開発中で、すぐに機能するようになります。
  • `TextField`と`Button`APIは実験的なため、デフォルトで無効になっています。
    • これらは`enable_view_api`ビルドフラグで有効にできます。

今後の予定

Electronチームは、Chromium、Node、V8の開発サイクルとの整合性を最終的に維持することを目指して、より迅速かつスムーズなアップグレードのためのプロセスを定義することに引き続き取り組んでいます。

Electron 2.0.0

5分間の読書

4ヶ月以上の開発、8つのベータリリース、および多くのアプリの段階的ロールアウトによる世界的なテストを経て、Electron 2.0.0のリリースがelectronjs.orgから利用可能になりました。


リリースプロセス

2.0.0から、Electronのリリースはセマンティックバージョニングに従います。これは、メジャーバージョンがより頻繁に増え、通常はChromiumのメジャーアップデートになることを意味します。パッチリリースは、高優先度のバグ修正のみを含むため、より安定しているはずです。

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

変更点/新機能

  • 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
  • セキュリティ推奨事項チェックリストの改善。
  • アプリスコープセキュリティスコープブックマークの追加。#11711
  • レンダラープロセスで任意の引数を設定する機能の追加。#11850
  • フォーマットピッカーのアクサリービューの追加。#11873
  • ネットワークデリゲートの競合状態の修正。#12053
  • Linuxの`mips64el`アーキテクチャのサポートを削除。ElectronにはC++14ツールチェーンが必要ですが、リリース時点ではそのアーキテクチャには利用できませんでした。将来的にはサポートを再開することを期待しています。

破壊的なAPIの変更

  • 非推奨APIの削除、以下のものを含む
    • `menu.popup`シグネチャの変更。#11968
    • 非推奨の`crashReporter.setExtraParameter`の削除 #11972
    • 非推奨の`webContents.setZoomLevelLimits`と`webFrame.setZoomLevelLimits`の削除。#11974
    • 非推奨の`clipboard`メソッドの削除。#11973
    • `tray.setHighlightMode`のブールパラメータのサポート削除。#11981

バグ修正

  • webContents.isOffscreen()が常に利用可能になるように変更しました。#12531
  • DevToolsがドッキング解除されフォーカスされている場合の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ロールを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
  • devtoolsが切り離されたときに透明なウィンドウが透明性を失う問題を修正しました。#11956
  • Electronアプリが再起動またはシャットダウンをキャンセルする問題を修正しました。#11625

macOS

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

Linux

  • Linuxデスクトップ通知を改善しました。#12229 #12216 #11965 #11980
  • メニューのGTK+テーマサポートを改善しました。#12331
  • Linuxで正常に終了するようにしました。#12139
  • アプリの名前をトレイアイコンのデフォルトのツールチップとして使用するようにしました。#12393

Windows

  • Visual Studio 2017のサポートを追加しました。#11656
  • システムクラッシュハンドラーへの例外の渡しの問題を修正しました。#12259
  • 最小化されたウィンドウからのツールチップの非表示を修正しました。#11644
  • 正しい画面をキャプチャするようにdesktopCapturerを修正しました。#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範囲がより意味を持つようになったため、npmのデフォルトの--save-devフラグを使用してElectronをインストールすることをお勧めします。これにより、バージョンに^が接頭辞として付加され、マイナーおよびパッチの更新を安全に最新の状態に保つことができます。

npm install --save-dev electron

バグ修正のみに関心のある開発者は、チルダsemver接頭辞(例:~2.0.0)を使用する必要があります。これにより、新しい機能は導入されず、安定性を向上させるための修正のみが行われます。

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

Electron 1.0

4分間の読書

過去2年間、Electronは開発者がHTML、CSS、およびJavaScriptを使用してクロスプラットフォームのデスクトップアプリを構築するのに役立ってきました。今回、フレームワークとそれを作成したコミュニティにとって大きなマイルストーンとなることを共有できることを嬉しく思います。Electron 1.0のリリースは、electronjs.orgから入手できます。


Electron 1.0

Electron 1.0は、APIの安定性と成熟度における大きなマイルストーンを表しています。このリリースにより、Windows、Mac、およびLinuxで真にネイティブに動作するアプリを構築できます。新しいドキュメント、新しいツール、およびElectron APIを案内する新しいアプリにより、Electronアプリの構築がこれまで以上に容易になりました。

最初のElectronアプリを構築する準備が整ったら、クイックスタートガイドが開始するのに役立ちます。

Electronで次に何を作成するかを楽しみにしています。

Electronの道のり

約2年前にAtomを立ち上げた際にElectronをリリースしました。当時Atom Shellとして知られていたElectronは、Atomを構築したフレームワークでした。当時は、最初のAtomリリースを実現するために努力していたため、AtomがElectronが提供する機能と機能の原動力となっていました。

現在、Electronを推進しているのは、メールチャットGitアプリからSQL分析ツール torrentクライアントロボットまで、あらゆるものを構築している開発者や企業の成長するコミュニティです。

過去2年間で、多くの企業とオープンソースプロジェクトが、アプリの基盤としてElectronを選択するようになりました。昨年だけで、Electronは120万回以上ダウンロードされています。素晴らしいElectronアプリの数々をご覧ください。お気に入りのアプリがリストにない場合は、ぜひ追加してください。

Electron downloads

Electron APIデモ

1.0リリースと同時に、Electron APIを探索し、Electronアプリをネイティブのように動作させる方法を学ぶのに役立つ新しいアプリをリリースします。Electron APIデモアプリには、アプリの開始を支援するコードスニペットと、Electron APIを効果的に使用するヒントが含まれています。

Electron API Demos

Devtron

Electronアプリのデバッグを支援する新しい拡張機能も追加しました。Devtronは、Chromeデベロッパーツール向けのオープンソース拡張機能であり、Electronアプリの検査、デバッグ、トラブルシューティングに役立ちます。

Devtron

機能

  • 依存関係グラフ:メインプロセスとレンダラープロセスの両方において、アプリの内部および外部ライブラリの依存関係を視覚化するのに役立ちます。
  • IPCモニタ:アプリのプロセス間で送受信されるメッセージを追跡して表示します。
  • イベントインスペクタ:ウィンドウ、アプリ、プロセスなど、コアElectron APIにアプリで登録されているイベントとリスナーを表示します。
  • アプリリンター:アプリでよくある間違いや欠落している機能をチェックします。

Spectron

最後に、Electronアプリの統合テストフレームワークであるSpectronの新しいバージョンをリリースします。

Spectron

Spectron 3.0は、Electron API全体を包括的にサポートしているため、さまざまなシナリオや環境でアプリケーションの動作を確認するテストをより迅速に記述できます。SpectronはChromeDriverWebDriverIOをベースとしているため、ページナビゲーション、ユーザー入力、JavaScript実行のための完全なAPIも備えています。

コミュニティ

Electron 1.0は、数百人の開発者によるコミュニティの努力の成果です。コアフレームワーク以外にも、Electronアプリの構築、パッケージ化、展開を容易にするために、数百ものライブラリとツールがリリースされています。

開発中の素晴らしいElectronツール、アプリ、ライブラリ、フレームワークの多くをリストした新しいコミュニティページがあります。ElectronElectron Userlandの組織をチェックして、これらの素晴らしいプロジェクトの一部をご覧ください。

Electron初心者の方へ:Electron 1.0紹介ビデオをご覧ください。

Electron 0.37の新機能

·4分間の読書

Electron 0.37が最近リリースされ、Chrome 47からChrome 49へのメジャーアップグレードと、いくつかの新しいコアAPIが含まれていました。この最新のリリースでは、Chrome 48Chrome 49で提供されたすべての新機能が導入されています。これには、CSSカスタムプロパティ、強化されたES6サポート、KeyboardEventの改善、Promiseの改善、そしてElectronアプリで利用できるようになった多くの新機能が含まれています。


新機能

CSSカスタムプロパティ

SassやLessなどのプリプロセッサ言語を使用されたことがある方は、カラーテーマやレイアウトなど、再利用可能な値を定義できる変数に馴染みがあるかもしれません。変数は、スタイルシートをDRYで保守しやすくするのに役立ちます。

CSSカスタムプロパティは、再利用可能であるという点でプリプロセスの変数に似ていますが、さらに強力で柔軟にする独自の特性も備えています。**JavaScriptで操作できる**のです。この微妙ながらも強力な機能により、視覚インターフェースを動的に変更しながら、CSSのハードウェアアクセラレーションの恩恵を受け、フロントエンドコードとスタイルシート間のコード重複を削減できます。

CSSカスタムプロパティの詳細については、MDNの記事Google Chromeのデモを参照してください。

CSS変数の実際

アプリでライブで調整できる簡単な変数の例を説明しましょう。

:root {
--awesome-color: #a5ecfa;
}

body {
background-color: var(--awesome-color);
}

変数の値は、JavaScriptで直接取得および変更できます。

// Get the variable value ' #A5ECFA'
let color = window
.getComputedStyle(document.body)
.getPropertyValue('--awesome-color');

// Set the variable value to 'orange'
document.body.style.setProperty('--awesome-color', 'orange');

変数の値は、開発ツールのスタイルセクションからも編集でき、迅速なフィードバックと調整が可能です。

CSS properties in Styles tab

KeyboardEvent.codeプロパティ

Chrome 48では、KeyboardEventイベントで使用できる新しいcodeプロパティが追加されました。これは、オペレーティングシステムのキーボードレイアウトに関係なく、押された物理キーを表します。

これにより、Electronアプリでカスタムキーボードショートカットを実装する際に、マシンや構成にわたってより正確で一貫性のあるものになります。

window.addEventListener('keydown', function (event) {
console.log(`${event.code} was pressed.`);
});

動作を確認するには、この例をご覧ください。

Promise拒否イベント

Chrome 49では、処理されない拒否されたPromiseが通知される2つの新しいwindowイベントが追加されました。

window.addEventListener('unhandledrejection', function (event) {
console.log('A rejected promise was unhandled', event.promise, event.reason);
});

window.addEventListener('rejectionhandled', function (event) {
console.log('A rejected promise was handled', event.promise, event.reason);
});

動作を確認するには、この例をご覧ください。

V8のES2015アップデート

現在のElectronのV8バージョンにはES2015の91%が組み込まれています。すぐに使用できる興味深い追加機能をいくつかご紹介します。フラグやプリコンパイラは不要です。

デフォルトパラメータ

function multiply(x, y = 1) {
return x * y;
}

multiply(5); // 5

デストラクチャリング代入

Chrome 49では、デストラクチャリング代入が追加され、変数と関数パラメータの代入がはるかに容易になりました。

これにより、Electronの必要条件は、よりクリーンでコンパクトな代入が可能になりました。

ブラウザプロセスに必要なもの
const { app, BrowserWindow, Menu } = require('electron');
レンダラープロセスに必要なもの
const { dialog, Tray } = require('electron').remote;
その他の例
// Destructuring an array and skipping the second element
const [first, , last] = findAll();

// Destructuring function parameters
function whois({ displayName: displayName, fullName: { firstName: name } }) {
console.log(`${displayName} is ${name}`);
}

let user = {
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe',
},
};
whois(user); // "jdoe is John"

// Destructuring an object
let { name, avatar } = getUser();

新しいElectron API

新しいElectron APIの一部を以下に示します。各新しいAPIについては、Electronリリースのリリースノートを参照してください。

BrowserWindowshowイベントとhideイベント

これらのイベントは、ウィンドウが表示または非表示になったときに発生します。

const { BrowserWindow } = require('electron');

let window = new BrowserWindow({ width: 500, height: 500 });
window.on('show', function () {
console.log('Window was shown');
});
window.on('hide', function () {
console.log('Window was hidden');
});

OS Xappに対するplatform-theme-changed

このイベントは、システムのダークモードテーマが切り替えられたときに発生します。

const { app } = require('electron');

app.on('platform-theme-changed', function () {
console.log(`Platform theme changed. In dark mode? ${app.isDarkMode()}`);
});

OS Xapp.isDarkMode()

このメソッドは、システムがダークモードの場合にtrueを、それ以外の場合はfalseを返します。

OS XBrowserWindowに対するscroll-touch-beginイベントとscroll-touch-endイベント

これらのイベントは、スクロールホイールイベントのフェーズが始まったり終了したりしたときに発生します。

const { BrowserWindow } = require('electron');

let window = new BrowserWindow({ width: 500, height: 500 });
window.on('scroll-touch-begin', function () {
console.log('Scroll touch started');
});
window.on('scroll-touch-end', function () {
console.log('Scroll touch ended');
});

Electron 1.0で変更されるAPI

·4分間の読書

Electronの初期、Atom-Shellと呼ばれていた頃から、ChromiumのコンテンツモジュールとネイティブGUIコンポーネントのための優れたクロスプラットフォームJavaScript APIを提供することに取り組んできました。APIは非常に有機的に始まり、時間の経過とともに初期設計を改善するためにいくつかの変更を加えてきました。


Electron の 1.0 リリース準備を進めるにあたり、残っている API の細かい点を修正する機会としたいと考えています。下記で説明する変更点は **0.35.x** に含まれており、古い API は非推奨警告を表示するため、今後の 1.0 リリースに備えることができます。Electron 1.0 のリリースは数ヶ月先なので、これらの変更が破壊的になるまでには時間があります。

非推奨警告

デフォルトでは、非推奨 API を使用している場合に警告が表示されます。警告を無効にするには、`process.noDeprecation` を `true` に設定します。非推奨 API 使用のソースを追跡するには、警告を表示する代わりに例外をスローするために `process.throwDeprecation` を `true` に設定するか、非推奨のトレースを出力するために `process.traceDeprecation` を `true` に設定します。

組み込みモジュールの新しい使用方法

組み込みモジュールは、独立したモジュールとして分離されるのではなく、1 つのモジュールにまとめられました。そのため、他のモジュールとの競合なしに使用できます。

var app = require('electron').app;
var BrowserWindow = require('electron').BrowserWindow;

下位互換性のために、`require('app')` の古い方法は引き続きサポートされていますが、無効にすることもできます。

require('electron').hideInternalModules();
require('app'); // throws error.

`remote` モジュールのより簡単な使用方法

組み込みモジュールの使用方法が変更されたため、メインプロセス側のモジュールをレンダラープロセスでより簡単に使用できるようになりました。今では、`remote` の属性にアクセスするだけで使用できます。

// New way.
var app = require('electron').remote.app;
var BrowserWindow = require('electron').remote.BrowserWindow;

長い require チェーンを使用する代わりに

// Old way.
var app = require('electron').remote.require('app');
var BrowserWindow = require('electron').remote.require('BrowserWindow');

`ipc` モジュールの分割

`ipc` モジュールはメインプロセスとレンダラープロセスの両方で存在し、各側の API が異なっていたため、新しいユーザーにとって非常に混乱を招いていました。混乱を避けるため、メインプロセスではモジュール名を `ipcMain` に、レンダラープロセスでは `ipcRenderer` に変更しました。

// In main process.
var ipcMain = require('electron').ipcMain;
// In renderer process.
var ipcRenderer = require('electron').ipcRenderer;

また、`ipcRenderer` モジュールでは、`ipcMain` モジュールでのメッセージ処理方法と一致させるために、メッセージ受信時に追加の `event` オブジェクトが追加されました。

ipcRenderer.on('message', function (event) {
console.log(event);
});

`BrowserWindow` オプションの標準化

`BrowserWindow` オプションは他の API のオプションに基づいて異なるスタイルになっており、名前の `-` のせいで JavaScript で使用するのが少し難しかったです。現在は、従来の JavaScript の名前に標準化されています。

new BrowserWindow({ minWidth: 800, minHeight: 600 });

DOM の API 名の規約に従う

Electron の API 名は、`Url` を `URL` のように、すべての API 名に camelCase を優先していましたが、DOM には独自の規約があり、`Url` より `URL` を、`ID` より `Id` を優先します。DOM のスタイルに合わせて、次の API の名前変更を行いました。

  • `Url` は `URL` に変更されました。
  • `Csp` は `CSP` に変更されました。

これらの変更のため、アプリケーションで Electron v0.35.0 を使用すると、多くの非推奨警告が表示されます。それらを修正する簡単な方法は、`Url` のすべてのインスタンスを `URL` に置き換えることです。

`Tray` のイベント名の変更

`Tray` イベント名のスタイルは他のモジュールとは少し異なっていたため、他のモジュールと一致するように名前が変更されました。

  • `clicked` は `click` に変更されました。
  • `double-clicked` は `double-click` に変更されました。
  • `right-clicked` は `right-click` に変更されました。