メインコンテンツへ飛ぶ

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 に乞うご期待!

オープンソースアプリの自動更新が簡単に

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

本日、無料でオープンソースのホスト型 更新ウェブサービス と連携 npm パッケージ をリリースし、オープンソース Electron アプリの自動更新を簡単にできるようにします。 これにより、アプリ開発者がデプロイについて頭を悩ませずに済み、ユーザーへの高品質なエクスペリエンス開発について集中できます。


新しい更新モジュールの動作

簡単に新しく

Electron には autoUpdater API があります。これはバックグラウンドで外部エンドポイントからメタデータを取得して、アプリのアップデートを確認し、自動的にインストールします。

こういった更新の有効化は、多くの Electron アプリ開発者にとってデプロイプロセスでの面倒な手順でした。アプリのバージョン履歴メタデータを提供するためだけに、ウェブサーバーを展開して維持する必要があるからです。

本日、アプリ自動更新の新しいドロップインソリューションを発表します。 Electron アプリが公開 GitHub リポジトリにあり、GitHub Releases を使用してビルドを公開している場合、このサービスでアプリの継続的なアップデートをユーザーに頒布できます。

新モジュールの使い方

最小限の構成にするため、新しい update.electronjs.org ウェブサービスと統合する npm モジュール update-electron-app を作成しました。

モジュールのインストール

npm install update-electron-app

アプリの メインプロセス 内のどこかで、以下を呼び出します。

require('update-electron-app')();

これだけです! このモジュールはアプリの起動時に更新を確認し、その後 10 分ごとにも確認します。 更新があれば、バックグラウンドで自動的にダウンロードされ、更新準備が整うとダイアログが表示されます。

既存アプリの移行

既に Electron の autoUpdater API を使用しているアプリもこのサービスを使用できます。 移行するには、update-electron-app モジュールをカスタマイズするか、update.electronjs.org と直接統合 します。

代替手段

electron-builder でアプリをパッケージ化している場合、その組み込みアップデーターを使用できます。 詳細は、electron.build/auto-update を参照してください。

アプリが非公開の場合、独自の更新サーバーを実行する必要があります。 これには、Zeit の Hazel や Atlassian の Nucleus など、多くのオープンソースツールがあります。 さらなる情報は 更新サーバーのデプロイ のチュートリアルをご参照ください。

謝辞

このシンプルでスケーラブルなウェブサービスの設計と構築を支援して頂いた Julian Gruber に感謝します。 オープンソースの Hazel サービスを作った Zeit の方々に感謝します。このサービスからデザインのインスピレーションを得ました。 コードレビューをして下さった Samuel Attard に感謝します。 このサービスのテストを支援していただいた Electron コミュニティに感謝します。

🌲 Electron アプリの未来はここに永遠の緑となった!

Electron 2 の新機能: アプリ内課金

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

新しい Electron 2.0 リリースラインは新しい機能と修正が 詰め込まれて います。 この新しいメジャーバージョンのハイライトの1つは、Apple の Mac App Store 向けの inAppPurchase API です。


アプリ内購入により、コンテンツやサブスクリプションをアプリ内から直接購入できます。 これにより、開発者は 基本無料ビジネスモデル を簡単に取り入れることができます。これは、プレミアム機能、追加コンテンツ、サブスクリプションのための任意のアプリ内購入が提供されるものです。

新しい API は、コミュニティのコントリビューター Adrien Fery によって Electron に追加され、講義や会議用のメモをとる Electron アプリ Amanote でアプリ内購入ができるようになりました。 Amanote は無料でダウンロードでき、数式、図面、音声録音などの機能を備え、明確で構造化されたメモを PDF に追加できます。

Mac 版 Amanote にアプリ内購入サポートを追加して以来、Adrien は 売り上げが 40% 増加 しました!

始めましょう

新しい inAppPurchase API には、すでに最新の Electron ベータ版に入っています。

npm i -D electron@beta

API のドキュメントは GitHub にあります。Adrien の API の使用方法に関するチュートリアルも十二分に親切です。 アプリへアプリ内課金を追加していくには [チュートリアルを参照してください](https://github.com/AdrienFery/electron/blob/a69bbe882aed1a5aee2b7910afe09900275b2bf6/docs/tutorial/in-app- purchases.md)。

APIの改善 は現在進行中です。間もなくリリースされる Electron ベータリリースで公開されます。

次は Windows かも

次に、Adrien は Electron に Microsoft Store のアプリ内購入サポートを追加することで、Amanote の新しい収益口を開こうと考えています。 今後の開発にご期待ください!

Webview の脆弱性の修正

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

Node.js インテグレーションを無効している Electron アプリケーションで、再度有効にできる脆弱性が発見されました。 この脆弱性には CVE 識別子 CVE-2018-1000136 が割り当てられています。


影響するアプリケーション

以下の すべて に当てはまる場合、そのアプリケーションは影響します。

  1. Electron 1.7, 1.8, か 2.0.0-beta で実行している
  2. 任意のリモートコードの実行を許可している
  3. Node.js インテグレーションを無効にしている
  4. webPreferences で webviewTag: false を明示的に宣言していない
  5. nativeWindowOption オプションを有効にしていない
  6. new-window イベントをインターセプトしておらず、提供された options タグを使用せずに event.newGuest を手動でオーバーライドしている

これはごく少数の Electron アプリケーションになりますが、予防としてすべてのアプリケーションはアップグレードすることを推奨します。

緩和策

この脆弱性は本日の 1.7.131.8.42.0.0-beta.5 のリリースで修正されました。

アプリケーションの Electron のバージョンをアップグレードできない開発者は、以下のコードで脆弱性を軽減できます。

app.on('web-contents-created', (event, win) => {
win.on(
'new-window',
(event, newURL, frameName, disposition, options, additionalFeatures) => {
if (!options.webPreferences) options.webPreferences = {};
options.webPreferences.nodeIntegration = false;
options.webPreferences.nodeIntegrationInWorker = false;
options.webPreferences.webviewTag = false;
delete options.webPreferences.preload;
}
);
});

// *もし* WebView を全く使用しない場合は、
// 以下も必要になる場合があります
app.on('web-contents-created', (event, win) => {
win.on('will-attach-webview', (event, webPreferences, params) => {
event.preventDefault();
});
});

詳細情報

この脆弱性は Trustwave SpiderLabs の Brendan Scarvell によって発見され、Electron プロジェクトに責任ある形で報告されました。

Electron アプリを堅牢に保つベストプラクティスの詳細は、セキュリティチュートリアル を参照してください。

Electron の脆弱性を報告する場合は、security@electronjs.org にメールでご連絡お願いします。

メールリスト に参加すると、リリースとセキュリティアップデートに関する更新情報を受信できます。

Web サイトのしゃっくり

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

先週、 electronjs.org で数分間のダウンタイムが発生しました。 この短い停止による影響でご迷惑をおかけして申し訳ありません。 本日、少しの調査の後、根本の原因を診断し、 修正 を行いました。


今後このようなダウンタイムを防ぐために、 Heroku threshold alerts をアプリで有効化しました。 失敗したリクエストや遅いレスポンスが一定のしきい値を超えて蓄積されるたびに、私たちのチームに通知され、素早く問題に対応できます。

すべての言語のオフラインドキュメント

あなたが Electron アプリを飛行機や地下のコーヒーショップで開発するとき、オフラインで参照するためにドキュメントのコピーが欲しい場合があるでしょう。 幸いにも、Markdown ファイルによる Electron ドキュメントは 20 以上の言語で利用できます。

git clone https://github.com/electron/electron-i18n
ls electron-i18n/content

GUI でのオフラインドキュメント

devdocs.io/electron は、 Electron だけでなく、 JavaScript 、 TypeScript 、 Node.js 、 React 、 Angular などのドキュメントを保存している便利な Web サイトです。 もちろん、参考となる Electron アプリもあります。 Electron サイトの devdocs-app をご参照ください。

devdocs-app

アプリをマウスやトラックパッドを使わずにインストールしたい方は、Electron Forge にある以下の install コマンドをお試しください。

npx electron-forge install egoist/devdocs-app

プロトコルハンドラの脆弱性の修正

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

遠隔コード実行の脆弱性が発見されました。これはカスタムプロトコルハンドラを使用している Electron アプリに影響します。 この脆弱性には CVE 識別子 CVE-2018-1000006 が割り当てられています。


影響を受けるプラットフォーム

Windows 向けに設計された Electron アプリが影響を受けます。myapp:// のようなプロトコルのデフォルトハンドラに自身を登録することで起きる脆弱性です。

ネイティブコード、Windows レジストリ、Electron の app.setAsDefaultProtocolClient API を使用しているようなアプリは、プロトコルの登録方法に関係なく影響を受ける可能性があります。

macOS と Linux には、この問題での 脆弱性はありません

緩和策

この脆弱性に対する修正を含む新しいバージョンの Electron を公開しました。 1.8.2-beta.51.7.121.6.17 です。 Electron 開発者全員は、アプリをすぐに最新の安定バージョンに更新することを推奨します。

何らかの理由で Electron バージョンをアップグレードできない場合は、app.setAsDefaultProtocolClient を呼び出すときに、最後の引数として -- を追加します。これにより、Chromium がそれ以降の引数を解析しなくなります。 ダブルダッシュ - はコマンドオプションの終わりを示し、その後は位置引数のみを受け入れます。

app.setAsDefaultProtocolClient(protocol, process.execPath, [
'--your-switches-here',
'--',
]);

詳細については、app.setAsDefaultProtocolClient を参照してください。

Electron アプリを堅牢に保つベストプラクティスの詳細は、セキュリティチュートリアル を参照してください。

Electron の脆弱性を報告する場合は、security@electronjs.org にメールでご連絡お願いします。

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 を参照してください。

Electron の新しい国際化されたサイト

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

Electron の新しいウェブサイトは electronjs.org です! 静的な Jekyll サイトを Node.js ウェブサーバに置き換えました。これにより、サイトの国際化が柔軟になり、より魅力的な新機能への道が開かれました。


🌍 翻訳

私たちは、世界中の開発者が Electron アプリ開発に着手できることを目標に、ウェブサイトの国際化プロセスを開始しました。 私たちは Crowdin という翻訳プラットフォームを使用しています。これは GitHub と統合されており、コンテンツが異なる言語に翻訳されると自動的にプルリクエストを開いて更新します。

簡体字中国語での Electron のナビゲーションバー

私たちはこれまで静かにこの取り組みを進めていました。75 人以上もの Electron コミュニティメンバーは、すでにプロジェクトを組織的に構築し、Web サイトの国際化と、Electron のドキュメントを 20 以上の言語に翻訳する取り組みに参加しています。 翻訳における世界中の 日毎の貢献数 では、特にフランス語、ベトナム語、インドネシア語、中国語の言語が抜きんでています。

各言語を選択してその言語の翻訳の進捗状況を確認するには、 electronjs.org/languages を参照してください。

Crowdin 上の翻訳状況

マルチリンガルの方で Electron のドキュメントやウェブサイトの翻訳に興味があれば、electron/electron-i18n のレポジトリにアクセスするか、Crowdin ですぐに翻訳を始められます。

現在 Crowdin の Electron 翻訳プロジェクトで有効な言語は 21 つです。 さらなる言語のサポート追加は簡単ですので、翻訳に興味があるもの翻訳したい言語がリストにない場合は、こちらからご連絡くだされば 有効にします。

レンダリング前の翻訳のドキュメント

生の Markdown ファイルでドキュメントを読みたい場合でも、以下のようにすれば任意の言語で読むことができるようになりました。

git clone https://github.com/electron/electron-i18n
ls electron-i18n/content

アプリページ

本日から、どのような Electron アプリでも、独自のページをこのサイト上へ簡単に作成できます。 例えば、Etcher1ClipboardGraphQL Playground があります。ここではサイトの日本語版を示しています。

GraphQL プレイグラウンド

Electron には素晴らしいアプリがいくつもありますが、それらを見つけるのは簡単ではありませんし、すべての開発者がアプリを市場に出して頒布するために適切なウェブサイトを構築する時間やリソースを持っているわけではありません。

PNG アイコンファイルとアプリメタデータが少しあれば、特定のアプリに関する多くの情報を収集できます。 GitHub から収集したデータで、公開リポジトリがある全アプリのスクリーンショット、ダウンロードリンク、バージョン、リリースノート、README をアプリページに表示できるようになりました。 各アプリのアイコンから抽出したカラーパレットを使用しつつ、強調されたアクセシビリティの高い色 を作成し、各アプリページに視覚の分別をつけることもできます。

アプリのインデックスページ には、GraphQL GUIp2p ツール のような面白いアプリを見つけられるように、カテゴリとキーワードフィルタが追加されました。

サイトで紹介したい Electron アプリがある方は、ぜひ electron/electron-apps リポジトリでプルリクエストを開いてください。

Homebrew でワンラインインストール

macOS のパッケージマネージャー Homebrew には cask というサブコマンドがあります。brew cask install atom のようにすれば、ターミナル上のコマンド一つでデスクトップアプリを簡単にインストールできます。

人気の Electron アプリの Homebrew cask の名前の収集を開始し、cask があるすべてのアプリのページにインストールコマンド (macOS の訪問者向け) を表示するようにしました。

プラットフォームに合わせたインストールオプション: macOS、Windows、Linux

Homebrew cask の名前を持つすべてのアプリを表示するには、electronjs.org/apps?q=homebrew をご覧ください。 まだインデックスされていない cask のアプリをご存知でしたら、ぜひ追加してください!

🌐 新ドメイン

このサイトを electron.atom.io から新しいドメインに移動しました: electronjs.org

Electron プロジェクトは、ウェブ技術で構築した GitHub のオープンソーステキストエディタ Atom の中から生まれました。 Electron は元々 atom-shell と呼ばれていました。 最初に使用したアプリは Atom でしたが、ほどなくしてこの魔法のような Chromium + Node ランタイムがあらゆるタイプのアプリケーションにも利用できると気づきました。 Microsoft や Slack のような企業が atom-shell を利用し始めた頃、このプロジェクトには新しい名前が必要だろうということになりました。

そして "Electron" が生まれたのです。 2016 年の初め、GitHub は Atom と別に Electron の開発とメンテナンス特化の新チームを結成しました。 それ以来 Electron は何千ものアプリ開発者に採用されています。現在では多くの大企業に採用され、その多くが独自の Electron チームをも保有しています。

Atom や GitHub Desktop のような GitHub の Electron プロジェクトサポートも未だに私たちチームの優先事項です。しかし、新ドメインへの移行が Atom と Electron の技術的区別をより明確にできるであろうと願っています。

🐢🚀 どこでもNode.js

以前の Electron ウェブサイトは、Ruby ベースの静的サイト生成ツールとして人気の Jekyll で構築していました。 Jekyll は静的ウェブサイトの構築に最適なツールですが、このウェブサイトではそれを使いこなせなくなり始めていました。 適切なリダイレクトや動的なコンテンツの描画等より動的な機能が欲しかったため、Node.js サーバーは当然の選択でした。

Electron のエコシステムには、Python から C++ や Bash まで、さまざまなプログラミング言語で書かれたコンポーネントのプロジェクトが含まれています。 しかし Electron の基礎は JavaScript であり、私たちのコミュニティで最も使用されている言語です。

ウェブサイトを Ruby から Node.js に移行することで、ウェブサイトに貢献したい人の敷居を低くすることが目標です。

⚡️ より簡単になったオープンソースへの参加

Node.js (8 以降) と git をインストールしていれば、ローカルで簡単にサイトを動かせます。

git clone https://github.com/electron/electronjs.org
cd electronjs.org
npm install
npm run dev

この新しいウェブサイトはHerokuでホストされています。 デプロイパイプラインと アプリプレビュー 機能を使用しています。これにより、プルリクエストごとにアプリの動作するコピーを自動作成できます。 これにより、レビュアーはプルリクエストの実際の効果を、サイトの生き写しで簡単に確認できます。

🙏 貢献者への感謝

Electron の改善に時間と労力を提供してくださった世界中の皆様に特別な感謝の意を表したいと思います。 オープンソースコミュニティの情熱が Electron の成功を大きく支えています。 ありがとうございます!

いいね!

Chromium RCE の脆弱性の修正

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

Google Chromium で、すべての最新バージョンの Electron に影響するリモートコード実行の脆弱性が発見されました。 リモートコンテンツにアクセスする Electron アプリは、sandbox オプション の有効に関係なく、このエクスプロイトに対する脆弱性があります。

1.7.81.6.14 の 2 つの新しいバージョンの Electron を公開しました。どちらもこの脆弱性の修正が含まれています。 Electron 開発者全員は、アプリをすぐに最新の安定バージョンに更新することを推奨します。

npm i electron@latest --save-dev

Electron アプリを堅牢に保つベストプラクティスの詳細は、セキュリティチュートリアル を参照してください。

Electron の脆弱性を報告したい場合は、security@electronjs.org までご連絡ください。

Electron での TypeScript サポートを発表

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

Electron npm パッケージに、Electron API 全体の詳細なアノテーションを提供する TypeScript 定義ファイルが含まれるようになりました。 これらのアノテーションは、たとえ純粋なJavaScriptを書いていていても、Electron の開発エクスペリエンスを向上させることができます。 ただnpm install electron を実行して、あなたのプロジェクトに最新の Electron の入力を取得できます。


TypeScript は、Microsoft が作成したオープンソースのプログラミング言語です。 これは、静的型をサポート追加することで言語を拡張する JavaScript のスーパーセットです。 TypeScript のコミュニティは近年急速に成長しています。そしてTypeScriptは、最近のStack Overflow開発者調査で 最も愛されているプログラミング言語にランクインしました。 TypeScript は「スケールする JavaScript」と説明されています。GitHubSlackMicrosoftのチームはこれを使って数百万人が使用する、スケーラブルな Electron アプリを作成しています。

TypeScript は、JavaScript により新しい多くの言語機能を提供しています。クラス、オブジェクトの破棄、非同期/待機などです。しかしその本当の差別化機能は**型アノテーション **です。 プログラムに期待される入出力データ型を宣言すると、コンパイル時にエラーを見つけることができ、バグを減らすことができます。そしてアノテーションはプログラムがどのように動作するかを形式的に説明することになります。

純粋な Javascript でライブラリが書かれている場合、ドキュメントを書くときには、その型はしばしば漠然と定義されます。 関数は、多くの場合、ドキュメントで指定された型よりも多くの型を受け入れることもありますし、関数にドキュメント化されていない、暗黙の型の制約を持つ場合があります。そのためにランタイムエラーが発生する可能性もあります。

TypeScript は 定義ファイル でこの問題を解決します。 TypeScript の定義ファイルには、ライブラリのすべての関数と、それらの関数で期待される入出力の型が記述されています。 ライブラリの作成者が公開ライブラリに TypeScript 定義ファイルをバンドルする場合、そのライブラリを使って開発するユーザーは、そのライブラリのAPIをエディタ内ですぐに調べられるようになります。そして、ライブラリのドキュメントを参照することなく、すぐに開発を開始できます。

AngularVue.jsnode-github(そして Electron も!)のように多くの人気の高いプロジェクトは自身の定義ファイルをコンパイルし、それをnpm の公開パッケージにバンドルしています。 独自の定義ファイルをバンドルしていないプロジェクトのために、DefinitelyTyped というコミュニティがメンテナンスする定義ファイルを扱う、サードパーティのエコシステムがあります。

インストール

バージョン 1.6.10 以降の、Electron のすべてのリリースには独自の TypeScript 定義ファイルが含まれています。 Npm から electron パッケージをインストールすると、 electron.d.ts ファイルがインストールパッケージに自動的にバンドルされます。

Electron をインストールする 最も安全な方法は であり、正確なバージョン番号を使用することです:

npm install electron --save-dev --save-exact

または、 yarn を使っているなら:

yarn add electron --dev --exact

@types/electron@types/nodeなどのサードパーティの定義を既に使用している場合は、衝突しないように、Electronプロジェクトからそれらの定義ファイルを削除する必要があります。

定義ファイルは、構造化 API ドキュメントから導出します。そのため、Electron の API ドキュメントと常に 一致します。 Electron をインストールするだけで、使用している Electron のバージョンの最新の TypeScript 定義が得られます。

使い方

Electron の新しい TypeScript アノテーションをインストールして使用する方法の概要は、以下の短いデモスクリーンキャストをご覧ください。

Visual Studio Codeを使用している場合、これはすでにTypeScript をサポートしています。 AtomSublimevimその他のエディタにはコミュニティがメンテナンスしているプラグインがあります。

エディターを TypeScript にあわせて設定すると、オートコンプリートサジェスト、インラインメソッド参照、引数チェックなど、コンテキストに対応して動作します。

メソッドの自動補完

メソッドのリファレンス

引数のチェック

TypeScript を始める

もしあなたが、TypeScript に詳しくなくかつ学びたいと考えているならこのMicrosoftの導入ビデオ をご覧ください。なぜTypeScriptが作られたか、TypeScriptの動作、使用方法などが説明されます。

また、TypeScript の公式サイトには ハンドブックプレイグラウンド があります。

TypeScript は JavaScript のスーパーセットなので、既存の JavaScript コードはすでに有効な TypeScript です。 つまり、既存の JavaScript プロジェクトを徐々に TypeScript に移行し、必要に応じて新しい言語機能を追加していくことができるのです。

謝辞

このプロジェクトは、Electron のオープンソースメンテナのコミュニティの協力なしには実現できませんでした。 Samuel Attard, Felix Rieseberg, Birunthan Mohanathas, Milan Burda, Brendan Forster, また、その他のバグの修正、文書の改善、技術ガイダンスの作成にたずさわっっていただいた多くのメンバーに感謝します。

サポート

Electronの新しいTypeScript定義ファイルを使用して問題が発生した場合、 electron-typescript-definitions リポジトリにイシューを提出してください。

ハッピーTypeScripting!