RxJava 2.xについて

  • 24
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

本稿ではRxJavaの2.x系について紹介します。間違っている箇所があればご指摘下さい。

TL;DR

  • 2.x系はReactive Streams準拠に作りなおした実装 (Reactive StreamsとReactive Manifestoは別物)
  • ついでに1.x系よりもハイパフォーマンスな設計を目指している
  • Java 1.8以上を対象としていて、将来的には1.9(JDK9)のFlow APIにも対応する予定がある
  • 当分は1.x系と平行して開発していくので、2.x系に急いで乗り換える必要はない(まだ実用段階ではなさそう)

2.x系の開発の動機

Javaの非同期ストリーム処理の実装は、RxJava, Akka Streams and Reactorなどなど複数あります。少し前に、これら非同期ストリーム処理の基盤部分の標準化をしようという動きがあって、Reactive Streamsというプロトコルが生まれました。既にreactive-streamsという実装もあり、最近1.0を迎えています。:tada: :tada: RxJavaもReactive Streamsに準拠したかったのですが、そのためにはPublicなインターフェースも変える必要がありました。そこでRxJavaのチームはReactive Streams準拠の別実装を2.x系として作ることになった..というのがどうやら経緯のようです。

ちなみに1.x系をReactive Streamsに変換するRxJavaReactiveStreamsというライブラリもあります。これを使うとReactive Streamsとの相互変換が可能で、Reactive Streamsが用意しているTCK1と呼ばれるテストスイートをパス出来ます。

Flow APIって?

Reactive Streams準拠のAPIがFlowという名前でJava1.9(JDK9)に入るそうです。今のRxJavaの2.x系実装はreactive-streamsに依存していますが、java1.9(JDK9)がリリースされたら、1.9+用にreactive-streamsをFlow APIで置き換えた実装が提供されるそうです。もちろん1.8用にはreactive-streams使った現行の実装も提供され続ける予定はあります。 Flow APIの現状についての詳細はメーリスのやりとりを御覧ください。

Flow APIが使えるようになればRxJavaはオワコン?

どうもそんなことはないようです。Reactive Streams(Flow)自体はとても薄い実装な上、冗長なので何かでラップしたくなるでしょう。特にflatMap, merge, filter, take, zipなどのオペレータも提供されてないし、他の非同期処理ストリームと上手くやり取りが出来ません。なのでユーザーは何かしらの非同期ストリーム系ライブラリ(RxJava Akka..)を使う必要があるのではないかと言うことでした。というかAndroidでJava 1.9(Flow API)はいつ使えるようになるんだろう。。

おわり

ざっくり2.x系について把握できたでしょうか? Java本体にReactive Streamsが取り込まれるのは非常に良い流れだと思います。2.x系がAndroid環境をサポートするかはわかりませんが、どうにか使える未来がくるといいですね! 楽しみに待っていましょう。

関連記事


  1. The Technology Compatibility Kit (TCK) is a standard test suite for conformance testing of implementations.