SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

RxJavaによるリアクティブプログラミング入門

RxJava 2.xで導入されたReactive Streams

RxJavaによるリアクティブプログラミング入門(3)


  • このエントリーをはてなブックマークに追加

 この連載はRxJavaを使って、リアクティブプログラミングにおけるポイントやRxJavaが持つ機能について学んでいくことを目的としています。前回は現在の安定板であるRxJava 1.xで実際に簡単なサンプルを実装してみましたが、今回は次期バージョンとなるRxJava 2.xを使って実装するためのポイントについて見ていきます。特に、2.xになって対応することになったReactive Streamsとは何か、バージョンが上がったことによって主にRxJavaの何が変わったのかについて見ていきます。

  • このエントリーをはてなブックマークに追加

対象読者

  • Java経験者(初心者可)
  • RxJava未経験者
  • リアクティブプログラミング未経験者

 ※ただし、前回までの連載を読んでいる前提です。

2.xへのバージョンアップについて

 RxJavaのバージョンが1.xから2.xに上がった背景にReactive Streamsの適用があります。Reactive Streamsとはどのライブラリやフレームワークを使っているのかに関係なく、データストリームを非同期で扱えるようにするための共通の仕組みを提供するもので、そのためのインタフェースを提供しています。

 ちなみにReactive Streamsが提供するのはインタフェースのみで、実装は各ライブラリやフレームワークに委ねられます。

 RxJavaの今回のバージョンアップでは、このReactive Streamsの実装とともに、まったく新しく実装しなおすことでパフォーマンスの改善も図っています。基本的にはReactive Streams自体がRxJavaの影響を強く受けているので、根本的な仕組み(データストリームの扱いや生産者と消費者の関係など)には大きな違いはありませんが、後で説明するバックプレッシャーの仕様に基づき、それに関するAPIに対しての差異が入っています。そのため、1.xから2.xに移行する際に単にパッケージ名やクラス名を変えるだけではなく、それらのAPI周りの変更も必要になります。また、RxJava内部の作り自体はスクラッチから始めたと公式に述べられているように、今までとは別物と思った方がよいでしょう。

 さらに、前のバージョンである1.xでは他のライブラリに対しての依存はありませんでしたが、今回はReactive Streamsを実装しているため、Reactive Streamsのjarが必須になります。

 また、RxJava 1.xとRxJava 2.xではルートとなるパッケージが完全に異なっています。

バージョン パッケージ
1.x rx
2.x io.reactivex

 そのため、RxJavaの異なる2つのバージョンを同じプロジェクト内に混在させることは可能ですが、そのプロジェクトがRxJavaに依存しているライブラリーを使っている場合、そのライブラリーがどのように対応しているかによって混在するのが難しい場合もあります。また、異なるバージョンを混在させることが可能でありRxJava 1.xもしばらくは公式にサポートされるようになっていても、運用や保守を考えると、混在させるのはRxJava 2.xへの移行時など一時的な場合に限定したほうがよいでしょう。また異なるバージョンのクラスを同じソース上に混ぜ合わせたりするのも後で管理が大変になり、クラス名の衝突も発生したりするので避けた方がよいです。

 また、「RxJava」の表記について今後の連載では、「RxJava」とだけ表記している場合は基本的にバージョン2.xについて述べていることにします。もしバージョンの違いについて明確にする場合は、例えばバージョン1.xについて述べる場合は「RxJava 1.x」とバージョンを表記するようにしています。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Reactve Streamsとは

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
RxJavaによるリアクティブプログラミング入門連載記事一覧

もっと読む

この記事の著者

須田 智之(スダ トモユキ)

十数年間おもにSI企業にシステムエンジニアとして携わり、現在はフリーランスに。企業向けのシステム開発のかたわら個人でのモバイルアプリの開発やIT分野の記事も執筆。RxJava 2.0に対応した著書『RxJavaリアクティブプログラミング』が2017年2月16日より発売中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9699 2016/10/31 18:23

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング