Jake Wharton氏は、Square社のAndroidエンジニアであるが、2017年のEmerging Technologies for the Enterprise(ETE)カンファレンスでRxJavaでリアクティブな世界を管理するというプレゼンテーションをした。
プレゼンテーションの中心となるテーマは“システム全体を同期的にモデルできない限り、単一の非同期なソースが命令型プログラミングを壊す”というものだった。Wharton氏は命令型プログラミングは一度非同期データソースが導入されると壊れ始めると説明した。状態管理の負担はライブラリがそれを簡単にする代わりに開発者の責務となる。彼はこれをRxJavaでの単純な例で実演した。彼は基本的なソースであるObservable<T>
とFlowable<T>
で、これらのソースとデータや放出物を管理するオペレータをどのようにオブザーブするかを比較した。新しい“Flow”クラスを導入するJava 9とJEP 266の簡潔な議論で結論を出した。これはリアクティブなパブリッシュ-サブスクライブフレームワークをサポートするインタフェースをカプセル化するものだ。
Wharton氏はETEでSquareでの仕事とリアクティブシステムやRxJava、Kotlinについての考えをInfoQに語った。
InfoQ「Square社に勤めてどのくらいですか、現在の職務は何でしょうか?」
Wharton氏「ちょうど5年が過ぎたところです。
Square Cashアプリケーションに従事しています。これは友人や家族に送金するようなピア・ツー・ピアの支払いです。私はAndroidのモバイルチームにおり、Androidアプリを作っています。多くの人が知っている普通のSquare Registerという製品と比較するとかなり小さいチームで3人です。私は主にアーキテクチャやインフラストラクチャ、アプリの裏側にあるライブラリに集中しています。決してアプリで行き詰まったりスケーラビリティやシリアライゼーションの問題に遭遇しないように、チームの他の2人の開発者が構築しているものと新しい画面や機能を開発する方法において高い開発速度となることが目標です。製品自身がつねに現実的で早いペースで前に進めるためには、アプリのちょっとしたうんざりすることすべてがいつも役に立ちます。」
InfoQ「ほとんどの人はSquareはPOSの処理で親しんでいます。他にSquareはどんな製品やサービスを提供していますか?」
Wharton氏「Square Cashから離れて、POSは根本的に私たちの製品の氷山の一角です。私たちの製品はほとんどすべての業者に焦点を当て、ビジネスを実施する際にしなければならないことすべてが対象です。私たちは上品なレストランから複合ビジネスまでPOSアプリを使い何かを売っている人たちを対象としています。彼らは単にクレジットカードを読み取ることができるだけのアプリ以上のものを必要としています。第2の製品は従業員管理やスケジュール予約、請求書の追跡のようなものです。これらはビジネスがより大きくなると必要となる、POSのプロダクトの補完となるものです。小さなビジネス、もしくは個人の時でさえSquareを使って始めるというのがそもそもの考えです。ビジネスが成長しより大きくなると、オンラインへ拡大し、小売に進出し、複数の店舗を持ち、従業員を雇うといったことがあり、そのすべてで私たちのエコシステム内にいてほしいのです。こうした製品すべてを私たちは提供しているので、それらをまたがって実に密な統合ができ、ビジネスを管理するベストな体験を提供しようとしています。さもないと、こうしたことは少し退屈でありふれた作業です。私たちはそうしたことの多くをやろうとしています。」
InfoQ「Squareが他のPOSシステムと違うところはなんですか?」
Wharton氏「みなポケットにコンピュータをすでに持っているという事実を本当に受け入れています。あなたがしている多くのことのため、携帯電話でそうしたことをする能力を、アプリかWebサイトかに関わらず提供します。私たちの多くの競合は、伝統的と言えますが、彼らが構築した製品は10年から15年前の大きなビジネスのためのものです。そのためスマートフォンを持って歩き回っていなかった時代にはとてもぴったりでした。彼らのカスタマイズされたハードウェアを手に入れるためにはたくさんのお金を払わなければなりません。そして、それらは本当は魅力的ではなく、あなたのビジネスにのぞき窓を提供するぜいたくなオンラインサービスなのです。Squareはとても機動力があり、データ第一の企業です。すでに持っているiPadからか比較的安いハードウェアからかに関わらず、そうしたことすべてを排除しようとしています。 携帯電話で支払いを処理するために、費用がかからず、束縛のないハードウェア部品を提供します。基本的にまったく投資せずに支払いを処理し始められます。そのため登録障壁を低くすることはとてもモバイル第一でありますし、とてもデータ第一であるのですが、オンラインにすべてが存在し、毎日すでに使っているもの、携帯電話やコンピュータといったものを、そんなふうに制御しビジネスへの見識を得るために使えます。ほかのことは私たちは従来十分なサービスを受けていなかった市場を追い求めたということです。POSシステムを作っている銀行とこれらの企業は大型店や大きなレストランチェーンを望んでいました。彼らに投資のよりリターンを与えてくれるからです。小さな家族経営のお店や農産物の直売所や工芸展示で売っている個人かにかかわらず、こうした十分なサービスを受けていない小売業者の一体があります。どこかにコーヒーを買いに行けば、SquareのPOSハードウェアシステムを目にする可能性が高いです。こうした市場は現金のみだからです。」
InfoQ「RxJava 1.xとRxJava 2の主な違いは何ですか?」
Wharton氏「RxJava 1とRxJava 2の一番大きな違いはリアクティブなデータソースの主な2つのタイプです。2つある理由は1つはバックプレッシャーを許可し、もう1つはバックプレッシャーを許可しないためです。RxJava 1ではobservableはすべてリアクティブなタイプで、バックプレッシャー–速度を落とさせる能力–を公開していましたが、すべてのソースが実際にそれを引き受けるわけではありません。そのため時々リアクティブソースの速度を落とそうとすると、例外が発生しました。RxJava 2では、こうしたタイプは型システムで一方は速度を落とす能力があり、もう一方はないとわかるように分けられています。ほかの大きな変更は、複数の企業の努力によりリアクティブなライブラリのAPIを標準化したことです。これは“リアクティブストリーム”と呼ばれます。そのためRxJava 2はもとからこれらのインタフェースを実装しており、仕様に準拠したリアクティブストリーム実装として自身を公開しています。またライブラリ内部のアーキテクチャを改善しRxJava 1の元来のアーキテクチャにあったオーバーヘッドを軽減する機会でもあります。そのためより早くなり、より互換性があり、データソースがどのように振る舞うかについて型システムで多くの保証を得られます。」
InfoQ「ネットフリックス社の他に、リアクティブシステムを使っている企業はありますか?」
Wharton氏「ネットフリックスは間違いなく初期のRxJava 1の実装に出資していた大きな企業です。主なコントリビュータはみなネットフリックスで働いていましたし、RxJava 1の設計とデザインを開発しました。Lightbendがとても推し進めていることも知っています。彼らはAkkaを持っています。これは伝統的にアクターシステムとして考えられていたものですが、またリアクティブシステム準拠のシステムでもあります。これらの向こうに、ReactiveXのwebサイトに挙げられている企業があります。Androidの世界では、クライアントアプリケーションで間違いなくかなり人気があります。最近ではアプリを構築する多くの主な企業がRxJavaを使うでしょう。サーバサイドでは、すでに多くの主張のあるライブラリが使われています。そのためAndroidであったような急速な変化を見ることはないでしょう。
ネットフリックスはもっとも大きなものです。彼らの多くのオープンソース製品やライブラリはRxJavaの上に構築されています。彼らにはこのパターンを使ってシステムを構築する方法についての多くのコンテンツとブログ投稿があります。そのため私が見たところ間違いなくもっとも大きな企業なのです。」
InfoQ「リアクティブプログラミングやリアクティブストリーム、RxJavaは今後5年でどう進化すると見ていますか?」
Wharton氏「JVM側では、Java 9がリアクティブストリームプロジェクトが作成したものと互換性のあるインタフェースを導入しました。私たちはリアクティブストリームがサーバサイドでもっと使われるものと考えています。今JDKの一部となったからです。もちろん新しいFlow APIの実装が必要です。そう呼ばれているものの、今は1つも実装がないからです。基本的にJDKにはインタフェースがあるだけです。実際の実装はありません。そのため私たちはまだこれらの実装であるRxJavaやSpringのProject Reactorのようなライブラリが必要です。しかし事実JDKにあることで、おそらく多くのとても基本的なサーバライブラリ、この上にAPIを構築するSpringやNettyのようなものを見ることになるでしょう。それらはこの一貫したリアクティブストリームの方法でAPIを公開します。このことを越えて、クライアントサイドにとってはAndroid上でリソースに制約がある環境です。RxJava 2は手に入れられるもっともよいものである可能性が高いです。RxJavaやProject Reactorの将来のバージョンではJava 9に依存する可能性が高いからです。少なくとも今後5年間、これはAndroidでJava 9が出てそれを使い始めるのに十分出回るまでの期間ですが、RxJava 2を単に採用するライブラリ以外のものがたくさん開発されることはないでしょう。」
InfoQ「開発者がリアクティブプログラミングとRxJavaを学ぶはじめの一歩として何を勧めますか?」
Wharton氏「今やSpringの新しいバージョンはもとからリアクティブストリームを実装しているので、多くのドキュメントがサーバをAPIを使ってリアクティブな方法で構築する方法を紹介するものに更新されています。サーバ開発者にとって、ここが実際に動作する実装を見ながら作ったり動かしたりし始めるのによい場所でしょう。クライアントやAndroid開発者には、多くのコンテンツがあります。人々がしている講演やオープンソースのサンプルアプリを見ることができます。これらは本当に始めるのによい場所ですし、正直に言ってクリックするべきものです。実際に動かし始めたり、状況の背後で実際に起こっていることやこれらのコンポーネントがどのように相互作用しているのかということの感触をつかみ始めるまで、望めば多くのプレゼンテーションを見れますし、同じくドキュメントもたくさん読めます。この“アハ”体験であなたの脳は伝統的な命令プログラミングの手法からこのリアクティブな、プッシュベースの手法に切り替わり、この新しい手法で実際に考え始めることができます。こうなるまで、こうしたAPIで構築したり動かしたりしてみなければ理解は制限されるでしょう。
1つか2つ書籍も手に入ります。Ben Christensen氏は、ネットフリックスの最初の開発者ですが、初期のRxJavaのほとんどの作業を実施しました。彼はこの本で助けてくれました。これは数か月前に出たもので、たくさんの初歩的な内容があり、知る限りでは多くのドキュメントができなかった方法でこうしたことについて考える枠組みを作り上げる手助けとなります。読むとよいでしょう。」
InfoQ「他にあなた自身のことや仕事、何か他に見逃しているかもしれないことで読者に知ってもらいたいことはありますか?」
Wharton氏「最近でもっとも興味深いことの1つは、Kotlinがより広く使われていることだと思います。Kotlinは実際リアクティブプログラミングとうまく結びつきます。値が明らかによく起こるであろうnullになるかどうかをモデル化できるからです。しかしRxJavaとうまく協調する多くの言語プリミティブもあります。1つの例は制限されたクラス階層にできることです。これは基本的に抽象クラスと誰もサブクラスを追加で実装しないクラスの複数の実装です。これは重要です。いくつかの型をモデル化できるからです。そこではボタンクリックやユーザがキーボードで“Enter”を押したといったユーザインタフェースから来たイベントをあなたが保持できます。これらはともに同じ型のサブクラスにでき、Kotlin言語はこれをとても簡潔な構文で定義できるだけでなく、Javaでのswitchに似たとても便利な演算子を提供します。しかしswitchと異なり、デフォルトの場合が必要ありません。コンパイラがすでにこれら2つのイベントを処理しその型のサブクラスである他のイベントがないことを証明するからです。またスマートキャストのようなものもあります。そのためこれらのイベントそれぞれに対してブロックする場合自動的にイベントをその型へキャストします。そのためすべてが1つのパイプを通じて流れるアプリケーションでリアクティブストリームを構築しているとき、単一の型と異なるデータの断片を表すサブクラスを使う傾向があります。言語を持つことは型を定義するにあたり構文的には両方を返すだけでなく、Kotlin、つまり言語とRxJavaや何かのリアクティブライブラリを一緒に組み合わせていて、あなた自身の次のコールバックから型を取り出すときに構文的に大きな利点ともなります。」
InfoQ「Kotlinは最近すごい勢いに見えます。」
Wharton氏「Androidのモバイル開発が新しい技術に急速にジャンプするもう1つの事例です。RxJavaで私たちが経験したことに似ています。もう少し成熟すれば、世の中でサーバサイド開発とライブラリでも見るようになるでしょう。どんな理由であれ、これらより新しい言語と新しいライブラリが受け入れられるにはもう少し時間がかかります。そのためより多くのけん引を得るものとしてそれを見るのはよいことです。加えて、それらはきわめて互換性があるようすることにとても焦点を当てており、過去他の多くの代替JVM言語が見落としていた、きわめてよいツールを持っています。」
編集者注
Michael Redlich氏は2008年からETEの活発な参加者で、出席し、スピーカーをし、直近では2013年からETEの運営委員会メンバーです。
Rate this Article
- Editor Review
- Chief Editor Action