カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

Electron と NW.js の違いについて

昨日と今日で色々と調べたので、その辺りメモっておきます。


そもそも Electron や NW.js とは何か

基本的には、

の両者とも、

既存の Web 技術を使って Cross-Platform な Desktop App が作れる

という類いの代物。

なので、基本的には 、プログラミング言語としては Javascript 系言語を、 インターフェース の構築には Web 技術 + 各種プラットフォームの固有な要素を、 それぞれ使う、というイメージになる。

ただし、 Electron と NW.js はそれぞれ方向性が微妙に違っていて、

  • Electron
    • node.js に WebView + α を加えたモノ
  • NW.js
    • WebView に node.js + α を加えたモノ

という違いが有るっぽい。

Electron と NW.js でのセキュリティの違い

これも Electron だろうと NW.js でも基本的には、

Web での脆弱性対策 + デスクトップアプリとしての脆弱性対策

が必要になる、という点では同じなんだけれども、

  • Untrusted な Remote Contents を表示する

という要件が有る場合、

Electron より NW.js を選んだ方が良いのではないか

という印象がある。

と言うのも、

  • Electron は Desktop UI として WebView を使う

という方向性のため、

Electron の UI 上で Untrusted な Remote Contents を表示する

というのは指向されておらず、また、実際 2016年 6月現在の Electron では、

  • Untrusted な Remote Contents を確実に安全に表示する方法

は、

Electron 本体に手を入れる他ない

というのが、今のところの現実みたいらしく、現に Electron ベースの ブラウザである Brave では、 Electron 本体のコードにパッチを当てて、 Brave の ブラウザを実装しているっぽい。

その反面、 NW.js では NW.js での Node Integration を無効に出来たり、 あるいは、 Chrome Extensions の API がそのまま生えてするらしいので、 この辺りの事から言っても、

  • Electronnode.js が主体となって WebView がくっ付いてる
  • NW.jsWebView が主体となって node.js Integration がくっ付いている

と言えるのではないかと思います。

Electron と NW.js のどちらを使えば良いか

基本的には、

  • Electron は Web 技術を使って Desktop App を作りたい時に使う
  • NW.js は Web App に Standalone な Desktop UI を付けたい時に使う

というイメージで捉えておけば問題はなさそう、と個人的には思います。

ただ、どちらにせよ、

DOM-based XSS に代表される Web UI の 脆弱性対策

デスクトップアプリとしての 脆弱性対策

は、 必ず必要 となってくるので、その辺りについて瑕疵が有ると、

そのアプリを使った人や組織に、致命的なダメージが行ってあばばばばば

というのは覚悟しておいた方が良いと思います。

以上

ちなみに、僕は今回、こう言うまとめ記事を書いてはいるものの、 僕自身もまだ完全には Electorn や NW.js について、

実装上の注意点やら脆弱性を作り込まない方法やら

ってのは理解し切ってないので、もし何が指摘が有るのであれば、 コメント欄やはてブのコメなのでご指摘して頂ければな、と思います。

と言う事で、昨日と今日で調べたことのまとめは以上です。はい。