Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Node Updates
IIJ 大津 繁樹
Node学園 19時限目
2016年2月9日
自己紹介
• 株式会社 インターネットイニシアティブ(IIJ)
• Nodeの中の人(CTC: Core Technology Committee)
内容
• 明日朝のセキュリティリリースについて
• Nodeのバージョン おさらいとおすすめ
• 最近のNodeの開発について(体制や環境)
• 最近の開発トピックス
1. Chakra Node
2. Buffer APIのセキュリティ強化
3...
セキュリテイ リリース
• 日本時間2月10日(水)朝8時にリリース予定です。
• Disclose前のため詳細は話せないですが、HTTP処
理に関連する脆弱性です。
• Low Severity, node-v0.10∼node-v5.xまで...
Nodeのバージョンおさらい
• Sem-Verに従います。http://semver.org/
• major.minor.patch (例:Node-4.2.6)
• patch: バグフィックスのみAPI変更なし。
• minor: AP...
どのバージョンを使えば良い?
• Node-v0.10, Node-v0.12は2016年12月31日でサポート
終了。今年中に移行してください。
• Node-v4.x(LTS)は2018年3月31日までサポート
• Node-v5(Stab...
最近のNodeの
開発について
(体制や環境)
Nodeの開発体制
Core Technical Committee
• Technical Direction
Node.js Foundation
• Business Direction
• マーケティング
Collaborator
• ...
test・CIの改善
https://ci.nodejs.org/
• NodeがサポートするCPU/OSは多種多様
• CPU: arm, arm64, ia32, mips, mipsel, ppc, ppc64, x32, x64, x8...
CITGM
• Canary In The Gold Mine(いわゆるsmokeテスト)
• これまでバグ修正やAPI追加・変更でユーザモジュー
ルにどういう影響があるのかリリースしないとわか
らなかった。
• expess, lodash,...
Node Enhancement
Proposals(EPs)
• https://github.com/nodejs/node-eps
• 比較的大きなAPI機能の追加・変更を起案するrepo
現在の提案状況
1 C++ Stream Rej...
Express
• IBMによるStrongLoopの買収に伴い Express の
開発もIBM配下で行われるようになった。
• Expressの開発をより充実したものにするため
Node.js Foundation の incubator ...
最近の開発トピックス
注意:現在議論・検討中のトピックスなので
今後変更される可能性があります。
Chakra Node
• 大きく2つの機能追加
1. ビルド時の指定によるJSEngine追加(V8ShimによるChakraCore
のサポート)、 defaultはV8
2. Windows ARM のサポート
• 現在はWindows ...
Chakra Node
Nodeコアの変更はわずか
• process.jsEngineの追加
• Symbol.species, デバッガは未サポート
• ARM対応のため gyp/node-gypにも要変更
ShimやChakraCoreの...
Chakra Nodeの行方
• 「Node.jsはVMに対して中立であるべきか?」で議論中
https://github.com/nodejs/roadmap/issues/54
• V8,Chakra,Nodeの3チームが集まって統一API...
Buffer
• Nodeでバイナリーデータ(バイト列)を扱うクラス
• Node-v0.1の時代から導入されていた。
• 昔 Buffer vs Typed Arrayの議論があったらしい。
• Typed Arrayの標準化の行方がはっきりせず...
Bufferの問題
1. データが初期化されていない。Heapデータが入る
$ node -e 'console.log(new Buffer(8))'
<Buffer b8 a7 03 c7 71 7f 00 00>
2. 初期化引数を間違えるとH...
これまでどうしてた?
• Cのmalloc(3)と同じだからみんなわかるよね。
• ArrayBufferは0で初期化するけどBufferは違うから気をつけま
しょうってAPI Docにも書いてある。
• 0で初期化すると初期化する分だけ性能に影響...
うーん、どうしましょう
• Buffer() コンストラクタの廃止(soft deprecation)
• Buffer.allocUnsafe(size)
• Buffer.alloc(size[, fill])
• Buffer.from(data[...
Promise
• JavaScript の非同期処理のためのクラス
• 当初Nodeで独自実装されていたが、Node-v0.1.30で完
全削除された。
• Promiseがまだ仕様化されておらず、ユーザからの要求が
多種多様でまとまらないと...
Promise API
• Node Core APIでPromiseのサポート
• コールバック方式は維持し、コールバックを指定しないと
Promiseが返る
fs.readFile( hoge.txt', 'utf8').then((wor...
Promise API
• http.getAsync()など一部APIはPromise用にAPIを
新設する
http.getAsync( http://example.com/').then((res) => {
res.pipe(proc...
Promise API
• 3rd partyのPromiseも使えるようにする
• process.setPromiseImplementation(require('bluebird'));
• エラー処理(Domain, unhandle...
Upcoming SlideShare
Loading in …5
×

Node最新トピックス

5,240 views

Published on

東京Node学園 19時限目

Published in: Technology

Node最新トピックス

  1. 1. Node Updates IIJ 大津 繁樹 Node学園 19時限目 2016年2月9日
  2. 2. 自己紹介 • 株式会社 インターネットイニシアティブ(IIJ) • Nodeの中の人(CTC: Core Technology Committee)
  3. 3. 内容 • 明日朝のセキュリティリリースについて • Nodeのバージョン おさらいとおすすめ • 最近のNodeの開発について(体制や環境) • 最近の開発トピックス 1. Chakra Node 2. Buffer APIのセキュリティ強化 3. Promise APIの導入議論
  4. 4. セキュリテイ リリース • 日本時間2月10日(水)朝8時にリリース予定です。 • Disclose前のため詳細は話せないですが、HTTP処 理に関連する脆弱性です。 • Low Severity, node-v0.10∼node-v5.xまで全 バージョンが対象です。 • https://nodejs.org/en/blog/にアナウンス予定
  5. 5. Nodeのバージョンおさらい • Sem-Verに従います。http://semver.org/ • major.minor.patch (例:Node-4.2.6) • patch: バグフィックスのみAPI変更なし。 • minor: API機能追加のみ。後方互換性維持。 • major: 非互換の変更が入る。 • LTS(30ヶ月サポート)には元素名がつきます(Argon) 偶数・奇数は たまたま
  6. 6. どのバージョンを使えば良い? • Node-v0.10, Node-v0.12は2016年12月31日でサポート 終了。今年中に移行してください。 • Node-v4.x(LTS)は2018年3月31日までサポート • Node-v5(Stable):機能追加・バグフィックスはがんがんやり ます。ただし後方互換は維持。Node-v6が出たら非サポート • 2016年4月にNode-v6のリリース予定。10月に次期LTSへ 長く安定して利用したいならその時 の最新LTSを選んでください。
  7. 7. 最近のNodeの 開発について (体制や環境)
  8. 8. Nodeの開発体制 Core Technical Committee • Technical Direction Node.js Foundation • Business Direction • マーケティング Collaborator • コードレビュー、コミット • Issue/PRの処理 Working Groups • いろいろ(*1) エスカレーション (*1) https://github.com/nodejs/node/blob/master/WORKING_GROUPS.md
  9. 9. test・CIの改善 https://ci.nodejs.org/ • NodeがサポートするCPU/OSは多種多様 • CPU: arm, arm64, ia32, mips, mipsel, ppc, ppc64, x32, x64, x86 • OS: win, mac, solaris,freebsd, openbsd, linux, android, aix • テスト(1000近く)も非同期タイミングでエラーになるものも多かった。 Merge前に必ず実施
  10. 10. CITGM • Canary In The Gold Mine(いわゆるsmokeテスト) • これまでバグ修正やAPI追加・変更でユーザモジュー ルにどういう影響があるのかリリースしないとわか らなかった。 • expess, lodash, glup等利用者が多いユーザモジュー ルのテストをCIとして実施。リリース前にその影響 を把握し対応する。 開発中 https://github.com/nodejs/citgm
  11. 11. Node Enhancement Proposals(EPs) • https://github.com/nodejs/node-eps • 比較的大きなAPI機能の追加・変更を起案するrepo 現在の提案状況 1 C++ Stream Rejected 2 Websocket 議論中 3 ES6 module 議論中 4 Buffer API 議論中
  12. 12. Express • IBMによるStrongLoopの買収に伴い Express の 開発もIBM配下で行われるようになった。 • Expressの開発をより充実したものにするため Node.js Foundation の incubator projectに移す ことが話し合われている。 • 具体的にどのような形になるのか以下でアナウンス • https://github.com/nodejs/TSC/issues/44
  13. 13. 最近の開発トピックス 注意:現在議論・検討中のトピックスなので 今後変更される可能性があります。
  14. 14. Chakra Node • 大きく2つの機能追加 1. ビルド時の指定によるJSEngine追加(V8ShimによるChakraCore のサポート)、 defaultはV8 2. Windows ARM のサポート • 現在はWindows OSのみサポート • Windows用に最適化された chakra.dll(非公開)とのリンクも想定して いるもよう。 • Windows Azure, Windows 10 IOT, XBox, Windows Phone 等での 利用を想定しているのかも(個人的な予想) 議論中
  15. 15. Chakra Node Nodeコアの変更はわずか • process.jsEngineの追加 • Symbol.species, デバッガは未サポート • ARM対応のため gyp/node-gypにも要変更 ShimやChakraCoreの中はまだよく見てません。 議論中
  16. 16. Chakra Nodeの行方 • 「Node.jsはVMに対して中立であるべきか?」で議論中 https://github.com/nodejs/roadmap/issues/54 • V8,Chakra,Nodeの3チームが集まって統一APIを作る ことができるか3月頭にF2Fで話し合う予定。 • 時間がかかるので、当面Chakraは別レポジトリで管理し てもらうことに。(issueが混ざると面倒なため) https://github.com/orgs/nodejs/teams/chakra 議論中
  17. 17. Buffer • Nodeでバイナリーデータ(バイト列)を扱うクラス • Node-v0.1の時代から導入されていた。 • 昔 Buffer vs Typed Arrayの議論があったらしい。 • Typed Arrayの標準化の行方がはっきりせず、エンコードの指定も 必要との判断からNode独自のBufferで進めることに(要出典 *1) • V8 APIの廃止に伴い現在はUInt8Arrayにprototypeを付与したも のに変更されています。 (*1) 昔どっかのブログで読んだ記憶があるが、見つかりませんでした。
  18. 18. Bufferの問題 1. データが初期化されていない。Heapデータが入る $ node -e 'console.log(new Buffer(8))' <Buffer b8 a7 03 c7 71 7f 00 00> 2. 初期化引数を間違えるとHeapデータが漏洩? new Buffer(value): valueをstringを前提としてしま うと、numberだったらどうなる?
  19. 19. これまでどうしてた? • Cのmalloc(3)と同じだからみんなわかるよね。 • ArrayBufferは0で初期化するけどBufferは違うから気をつけま しょうってAPI Docにも書いてある。 • 0で初期化すると初期化する分だけ性能に影響する。DoS Vectorにもなりうる。 • これまで律儀にちゃんと new Buffer(n).fill(0)している人はどう なるの? • 新旧のバージョンで初期化の挙動が変わるのも問題
  20. 20. うーん、どうしましょう • Buffer() コンストラクタの廃止(soft deprecation) • Buffer.allocUnsafe(size) • Buffer.alloc(size[, fill]) • Buffer.from(data[, encoding) • --zero-fill-buffersオプションの導入 (注意:API名・機能は変わる可能性があります。) 議 論 中 新APIの導入 議論中
  21. 21. Promise • JavaScript の非同期処理のためのクラス • 当初Nodeで独自実装されていたが、Node-v0.1.30で完 全削除された。 • Promiseがまだ仕様化されておらず、ユーザからの要求が 多種多様でまとまらないと判断し、単純なコールバック方 式のみサポートすることに。 • ES2015で標準化。前倒しでV8で実装されNode-v0.11.13 より復活した。
  22. 22. Promise API • Node Core APIでPromiseのサポート • コールバック方式は維持し、コールバックを指定しないと Promiseが返る fs.readFile( hoge.txt', 'utf8').then((words) => { console.log(`a picture is worth ${words.split('n').length} words.`); }, (err) => { console.error('there are no words.'); }); 議論中
  23. 23. Promise API • http.getAsync()など一部APIはPromise用にAPIを 新設する http.getAsync( http://example.com/').then((res) => { res.pipe(process.stdout); }); 議論中
  24. 24. Promise API • 3rd partyのPromiseも使えるようにする • process.setPromiseImplementation(require('bluebird')); • エラー処理(Domain, unhandledRejection, post- mortem debug)について要検討 • 当初はオプションフラグで有効化 議論中 今後どうなるのかまだわかりません。

×