リアクティブプログラミングはどんなものか

本記事は
はじめてのアドベントカレンダー Advent Calendar 2023
参加記事です。

こんにちは。株式会社クラス システム開発本部の青木です。

今回は弊社のバックエンドでRxJavaを採用しており、その考え方であるリアクティブプログラミングについてご紹介できればと思います。

まず、私自身はRxJavaについてはクラスに入社して初めて使用しましたし、リアクティブプログラミング自体初めてでした。
そんな私のようにRxJavaやリアクティブプログラミングに触れたことのない方に向けて触りだけでも知ってもらえるような内容にできればと思います。

最近のイベントやデータの増加に対処するための手段として、リアクティブプログラミングが注目されています。
スマートフォンの普及によりマップアプリやECサイトなど様々なサービスが多くの情報を処理する必要が出てきており、さらにリアルタイムでの反映が求められることが珍しくなくなりました。
そういった場合に有効な手法になります。

なぜ多くの情報を処理する場合やリアルタイムでの反映が必要な場合にリアクティブプログラミングが有効なのかについて簡単に説明します。
私が今まで行ってきたようなプログラミングでは、

  1. 何か処理が行われる

  2. 処理内データを要求

  3. データを取得できるまで待機

  4. データが全て取得できれば処理を行う

という流れが多かったと記憶しています。
この流れので中で何が問題かというとJavaなどの基本的にブロッキング処理を採用している言語で"データを取得できるまで待機"という部分が問題になることが多いかと思います。データが大きければ大きいほど取得に時間がかかり、処理時間に大きな影響を与えてしまうことになります。
さて、リアクティブプログラミングではどのようになるかというと、

  1. 何か操作が行われる

  2. データの取得を開始する

  3. データの用意ができたものから対応した処理を行う

という流れになります。
データが通知される度に関連した処理が実行されるという考え方になっています。マップアプリをイメージしていただくとわかりやすいかと思います。マップアプリでは画面の範囲内のデータを取得するようになっており、地図を移動するとデータを取得できたところから順番に表示されていくと思います。

そして、このリアクティブプログラミングをJavaで行うためのライブラリがRxJavaとなっています。他にもJavaにはSpring WebFluxなどのライブラリがありますが、今回は弊社で使用しているRxJavaをメインに書いていきます。
RxJavaとはReactive ExtensionsというMicrosoft社が作成したライブラリをNetflix社がJavaで使用できるように移植したライブラリになっています。
これらのライブラリの根幹の考え方として、Observerパターンがあります。Observerパターンについて軽く説明しますと、観測対象(=Subject)と観測者(=Observer)の2つの役割が存在します。そして、観測対象の状態が変化すると観測者に通知されるというものになっています。
簡単にではありますが、このような考え方でライブラリが作成されています。そして、JavaではRxJavaを利用することでリアクティブプログラミングが可能になります。

リアクティブプログラミングについて簡単に説明をしてきましたが、私自身まだまだ理解できていない部分が多いです。
私が経験してきた内容とは考え方も、コードの書き方も大きく異なるところが多く苦戦中です。
ただ、これからこの考え方や技術は多く使われるようになると思われるため、少しでも知っておくことは良いことだと思うので、頑張って身につけていきたいですね。

この記事が気に入ったらサポートをしてみませんか?