Node.js Streamについて
2016/01/26 ASG勉強会
株式会社リクルートテクノロジーズ APソリューショングループ
伊藤 瑛
Page 2
自己紹介
■名前
伊藤 瑛
■所属
リクルートテクノロジーズ アプリケーションソリューションG
2015年度新卒入社 / Node歴 6ヶ月
■やっていること
Node製の大規模Push基盤Pusna-RSの運用開発
Page 3
Stream API
 データの”流れ”を綺麗に扱うためのAPI
 データを一括で読み込むのではなく、破片ごとに読み
処理することができる
 各Streamをpipe()で連結することができる
Readable
• I/Oなどからの
読み込み
Readable /
Writable
(Transform)
• データの整形
Writable
• I/Oなどへの書
き出し
Page 4
Node.jsのStream APIの変遷
実装Ver 安全性 後方互換性
Stream 1 - △
データの取りこぼしやStream
のpause(), resume()が頻繁
に呼ばれ、パフォーマンスが
劣化する危険性
-
Stream 2 v0.10 ◯
内部バッファの実装により
I/Oの不安定な流れに強く
なった。
△
following mode (Stream1互
換モード)とpuase modeを交
互に行き交えない
Stream 3 v0.12 ◯ ◯
Stream 3 = Stream 1 +
Stream2
Page 5
Node.jsのStream APIの変遷
実装Ver 安全性 後方互換性
Stream 1 - △
データの取りこぼしやStream
のpause(), resume()が頻繁
に呼ばれ、パフォーマンスが
劣化する危険性
-
Stream 2 v0.10 ◯
内部バッファの実装により
I/Oの不安定な流れに強く
なった。
△
following mode (Stream1互
換モード)とpuase modeを交
互に行き交えない
Stream 3 v0.12 ◯ ◯
Stream 3 = Stream 1 +
Stream2
現行バージョン
Page 6
Stream 3
Page 7
Stream3 on Node.js 4.x
Page 8
Stream3 on Node.js 4.x (Simple)
Page 10
非同期処理をStreamでラップする
 callback hell
Page 11
非同期処理をStreamでラップする
 Streamで書く
Page 12
StreamのちょっとしたTips1
 リトライ処理
Page 13
ブラウザにもStreamが実装された!
 Google Chrome 43+で実装
 fetch APIのresponse.bodyに対してgetReader()を呼
び出すとReadableStreamが返ってくる
 read()を呼び出すとPromiseが返ってくる仕様。
Promiseを解決してデータを取り出す
Node.jsのStreamとは仕様が違う
Page 14
サンプルコード
Page 15
@domenicさんに聞いてみた
 Node学園祭の時にNodeのStreamとブラウザの
Streamの仕様を合わせてほしいと言ってみた。
 @domenicさん
「Nodeの時にStreamの仕様がいろいろぶれた反省が
あるから、ブラウザのStreamについては慎重に動いて
いる」
Page 16
まとめ
 Node.jsのStream APIの紹介と事例の共有
 ブラウザにもStreamが実装された。
Page 17
ありがとうございました!

Node.jsStreamについて