ストリームとは?
ストリームの定義
「ストリーム」とは、時間の経過とともに順次発生するデータの流れを指します。これは、一定の順序で次々に現れるデータの集合体とみなすことができます。
従来のプログラミングにおける代表的なストリームの例
- ファイル読み込みのデータ(例:Node.js の ReadableStream)
- ネットワーク通信(HTTPレスポンスなど)
- ユーザーの入力やイベント(マウス移動、クリック、キーボード入力)
RxJSにおけるストリーム
RxJSでは、こうした時間経過とともに発生するデータを Observable(オブザーバブル) を使ってストリームとして扱います。Observableは、非同期データ、同期データ、イベント、時間ベースの処理などをすべて「ストリーム」として抽象化するための仕組みです。
Observableの利点:
- 型安全に記述できる(TypeScriptとの親和性)
- 宣言的にデータの流れを表現できる
pipe()
による操作チェーンが可能subscribe()
により明示的に購読できるunsubscribe()
によりキャンセル可能
従来のストリームとの比較
特性 | 従来のストリーム | RxJSのObservable |
---|---|---|
対象 | ファイル/ネットワーク等に限定されがち | 任意の非同期/イベント/状態変化 |
イベント対応 | イベントリスナーで都度処理 | fromEvent でストリーム化 |
キャンセル | 方法はまちまち | unsubscribe() で統一管理 |
合成/変換 | 手続き型コードで個別実装 | 演算子(map , filter など)で簡潔に記述 |
Observer・Subscriptionとの関係
- Observable:データの供給元(ストリームの源)
- Observer:データの受け取り手(next, error, complete を持つ)
- Subscription:購読の制御ハンドル(購読・解除・リソース管理)
ObservableとObserverは、コールバックを通じて接続され、Subscriptionにより制御されます。
まとめ
RxJSの中核である「ストリーム」の概念は、非同期処理を扱う際の強力な武器です。Observableを使うことで、さまざまなデータソースを統一的に扱い、宣言的かつ柔軟にデータフローを記述できます。
イベント処理との関係
RxJSでは、DOMイベントも fromEvent
を使ってストリームとして扱うことができます。
従来のイベントリスナーとの違いを比較することで、ストリームの概念がより明確になります。
TIP
実際のコードを交えた従来のイベント処理とRxJSの比較は、イベントのストリーム化 を参照してください。