読者の皆様へ: 皆様のご要望にお応えするべく、ノイズを削減する機能セットを開発しました。皆様が関心をお持ちのトピックを、EメールとWeb通知で受け取ることができます。新機能をぜひお試しください。
RxJSチームが6.0リリースを発表した。モジュラリティに対するプロジェクトとしてのアプローチの改善、パフォーマンスの合理化、アップグレードを容易にするための後方互換性パッケージの追加、TypeScriptユーザのためのコードマイグレーションのサポートなどが行われている。
RxJS 5から6へのマイグレーションを簡単にするため、rxjs-compatパッケージがこれらのバージョン間の互換性レイヤを提供する。
RxJS 6と互換性レイヤは、npm経由でインストールされる。
npm install rxjs@6 rxjs-compat@6 --save
互換性層により、コードを変更することなくバージョン6へのアップグレードが可能になるが、アプリケーションを本番稼働に展開する前にはソースコードを変更して、RxJSのソースバンドルのサイズを小さくするべきだろう。
RxJSの構造によるメリットとして、Angular 6のユーザは、Angular 6のng update
メカニズムを使ってrxjs-compatをアプリケーションに自動インストールすることができる。
モジュールのインポートパスが、いくつかのカテゴリに再編成された。
- rxjs: 生成メソッド、タイプ、スケジューラ、ユーティリティ
- rxjs/ajax: RxJS HTTPリクエストの実装
- rxjs/operators: パイプ構成の可能なRxJS演算子
- rxjs/testing: RxJSテストユーティリティ
- rxjs/webSocket: RxJS WebSocket実装
RxJSのTypeScriptユーザには、バージョン5から6へのインポートパスのリファクタを支援するrxjs-tslint
の使用が推奨されている。
もうひとつの大きな変更は、パイプ構成の可能なAPIを使用する演算子への移行である。従来のRxJSではプロトタイプオペレータを繋ぐチェーン構造を採用していたが、グローバルであるという問題や、WebpackのTree-Shaking機能を最適化する上での問題、Lintツールでの問題などを抱えていた。
例えば、RxJS 5の次のような例は、
source
.map(x => x + x)
.mergeMap(n => of(n + 1, n + 2)
.filter(x => x % 1 == 0)
.scan((acc, x) => acc + x, 0)
)
.catch(err => of('error found'))
.subscribe(printResult);
RxJS 6では次のようになる。
source.pipe(
map(x => x + x),
mergeMap(n => of(n + 1, n + 2).pipe(
filter(x => x % 1 == 0),
scan((acc, x) => acc + x, 0),
)),
catchError(err => of('error found')),
).subscribe(printResult);
プロジェクトのリーダを務めるBen Lesh氏は先日、RxJS 6について講演し、プロジェクトを変更した動機について説明した。
RxJSは、Observableを使用して非同期ないしコールバックベースのコードを構成する、リアクティブプログラミング用のライブラリである。JavaScriptの将来バージョンの一部としてRxJSのObservableを標準化する活動が始まっているが、Observable提案はまだ広い支持を得るには至っていない。
RxJSはApache 2ライセンスで使用することができる。詳しいことはRxJSのWebサイトを参照してほしい。RxJS GitHubプロジェクトを通じてのコントリビューションも大歓迎だ。
この記事を評価
- 編集者評
- 編集長アクション