この国では犬が

本と芝居とソフトウェア

RxJava Night #rxjnight に参加しました

火曜日は、千駄ヶ谷ピクシブさんで開催された RxJava Night #rxjnightに参加していました。
ジャバリアクティブあなたと。

前日までずっと 10 人くらいキャンセル待ちでさっぱり動かなくて、「こら無理やな……」とか思っていたのですが、前日夜あたりにドドッと枠内になだれ込みました。
こういうこともあるのですねえ。

あらまし

近ごろ色々なところで Reactive だの、Reactive Extensions(Rx)だの、Functional Reactive Programming(FRP)だの、リアクティブという言葉を耳にする機会が増えてきていて、気になっていました。

たとえば Play Framework の公式サイトの右上には、さも誇らしげに【We Are Reactive】というラベルがついていたりとか*1、6 月に参加した第六回 #渋谷java第六回 #渋谷java に行ってきた - この国では犬がコードを書いています)では、@yo_waka さんがずばり RxJava について LT をされていたりとか。

そんな折、最近マルチスレッドプログラミングがマイブームらしい同僚が「RxJava の勉強会あるんですよー、でももういっぱいだから諦めますけど」とか言うので「マジで、でもキャンセル出るんちゃん」ていってとりあえず申し込みしたところ(のち同僚も申し込みしていました)、前述の通り晴れて参加することができました。

参加してみた結果としては、理解も多少は深まったし、RxJava の現状というか、どういう人が興味を持っていてどういう風に使っていこうとしているのかってことがわかって、とても実り多い勉強会だったと思います。

というわけで、簡単に各発表の紹介、というか簡単な感想を述べていきます。

分かった気になるはじめての RxJava

@kirimin さんの発表。

初 LT とのことでしたが、構成もこなれてたし無理がなくて、いい感じでした。

内容は RxJava のほんとに入門のところで、件の同僚に教えてもらった Web+DB Press の記事とか、件の同僚に教えてもらったブログ記事とかで予習はしていたので、おおむね知っている内容ではあったのですが、このあとに続く様々な LT への導入としてはぴったりのものだったと思います!

Rx on Android

@yo_waka さんの発表。

RxJava の Android 向けバインディングを提供してくれるライブラリ、RxAndroid の紹介でした。

@yo_waka さんが所属する freee では、MVVM のつなぎとして RxJava を使用しているそうで、実用にもとづく知見は Android で RxJava を使ってみたいという向きにはかなり有用なものなのではないかと思います。(ただ、僕自身は Android 触ったこともないのですが……)

Think about API orchestration with RxJava

@rejasupotaro さんの発表。

シンプルな REST API とシンプルとは限らないクライアント要求とのあいだをつなぐ API Orchestration を、RxJava でやってみたという内容でした。

背景の説明から始まって、終盤にはコードが出てくるのですが、たぶんかなり色々なことをやっているコードがスライドの一画面に収まるのが美しい、と感じます。

レジャスポ太郎氏、今までは Twitter で「ジャバ」って言ってるイメージしかなかったのですが、はじめて実物を見て、背景の説明から実際のコードまで、10 分弱であそこまでわかった気にさせられるのはすげえ、と感じて認識を新たにしました。

RxJava初心者の私が良いと思ったやり方、素敵だと思った資料など

@RyotaMurohoshi さんの発表。

  • RxJava を使い始めるにあたって、Groovy が結構相性よさそう

ということと、

  • RxJava の本家である C# の Reactive Extensions についての記事も結構参考になりそう

ということを伝える内容でした。

たしかに、Java 8 から入ったラムダ式なしで RxJava を使おうとするとかなり苦しい、というかやってられない感じになりそうですが、Groovy のクロージャを使うことでかなりラムダ式に近い書きごこちを得られるみたいです。

しかも Groovy 2.4 以降は Android で使えるらしく、Android の人にも朗報ですね。

また、Reactive Extensions についての記事、というのは言われてみればそうだよなという感じで、盲点でした。「RxJava」じゃなくて「Rx」について調べるほうが、たしかに基本的なところの情報は充実していそうです。

Vert.x から見た Reactive Streams

@grimrose さんの発表。

Akka Streams、Reactor、RxJava、Ratpack といった非同期ストリーム API の標準化を目指す Reactive Streams と、ノンブロッキングでイベント駆動のプラットフォームである Vert.x との関係を色々と説明する内容でした。

Vert.x のことも(Reactive Streams のことも)よくわかっていないので、さすがに 10 分で十分理解できたとは言えないのですが……、Vert.x にとって Reactive Streams が有用な存在、ということのようです。

詳細については丁寧な発表資料が公開されているので、ご参照ください。

ブログもあります。

RxJava 素人が管理画面で試してみた

@just_do_neet さんの発表。

RxJava を管理画面で試してみた、というタイトル通りの事例紹介でした。

具体的には数十インスタンス(? うろおぼえですが……)規模の AWS サーバの監視画面で、とても逐次処理では追いつかない、ゆえに非同期処理を行いたい、という、RxJava にうってつけと思われる課題です。

まずは Executor を使った例から始めて、最終的に Stream API + lambda + RxJava という組み合わせに落ち着く頃にはやはり随分簡潔に記述できていて、(Stream API + lambda +)RxJava の抽象化能力、表現力の高さが感じられました。

本題と関係ないですが、第八回 #渋谷java第八回 #渋谷java でスレッドダンプについてお話ししました - この国では犬がコードを書いています )でお見かけした @komiya_atsushi さんといい、スマートニュース、手練れのエンジニアがひしめいている印象があります……。
たのしそう。

lambda と RxJava

taichi さん(@ryushi)の発表。

RxJava はふつうに書くとつらいので、Java 8 なら lambda を使うとよい、Java 8 が使えなければ Groovy を使うとよい、という内容でした。

……これまでの発表と内容がかぶっていました……。
かぶって、凹まれていました。

それだけ、ふつうに書くとつらい、ということですね。

taichi さんは、先にも触れた Web+DB Press で「Java の鉱脈」という連載を持たれている方で、その第一回が RxJava の話だったため、私も(同僚から借りて)読んだのですが、それをいいことに懇親会で色々と教えていただきました。

The History of Reactive Extensions

@neuecc さんの発表。

先に @RyotaMurohoshi さんも「RxJava を知るために、Reactive Extensions のことを知るのもよいのでは?」とおっしゃっていましたが、これがまさに、Reactive Extensions の歴史の話でした。

これがまたたいへん面白い。
FRP というものは以前からあったけれど、それを粘り強く実用可能な実装にまで落とし込んだのが Rx だった、という説明にはちょっぴし感動してしまいました。

その先に、RxJava があるわけですね。

まとめ

なかなか盛り沢山な勉強会だったため、ブログも盛り沢山になってしまいました。

この勉強会のことを知った当初は「りあくてぃぶってなにーぜんぜんわからんー」の状態のままだったのですが(気にはなっていたにも関わらず……)、予習したり、参加したりして、おぼろげながら僕の中でモデルができてきたように思います。

どういう場面で役に立ちそうか、というイメージもそれなりにわいてきて、たいへん有意義でした。
懇親会では先述のように taichi さんに RxJava の特徴とかについて伺ったり、同僚とどういう場面で使えそうか話したりしていました。

最後に、会場を提供してくださった株式会社ピクシブさんおよび主催の @hotchemi さん、ありがとうございました。

進行もスムーズでしたし、懇親会のピザもうまかったしビールもうまかったです。(よいビール率が高くてよかった……)
懇親会では、お名前がわからないのですが、ピザやビールを各テーブルに適切に配分し続けるホスピタリティに溢れた方がいらっしゃったのが印象的でした。

*1:これ、スマホで見るときかなり邪魔です