Help us understand the problem. What is going on with this article?

RxJava 2.xについて

More than 3 years have passed since last update.

本稿では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. 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away