セッション「Cloud Native Java」
基調講演で登壇したJosh Longさん(以下、Joshさん)は、「Cloud Native Java」と題したセッションも行いました。 彼は、昨年度の日本Springユーザ会(JSUG)主催イベント「Spring In Summer」や、 JSUG勉強会でも来日して講演しているので、ご存じの方もいらっしゃるのではないでしょうか。 また、昨年11月から米O'reillyより、Joshさんが執筆中の書籍『Cloud Native Java』がEarly Release版として同社のWebサイトで販売されています。
このセッションでは、スライドはほとんど使われませんでした。 代わりにJoshさんは、Spring Bootのひな形を生成するサイト「Spring Initializr」を利用し、ライブコーディングで Spring Bootアプリケーション、Configサーバ、Edgeサービスなどを瞬く間に構築してみせ、会場を沸かせました。 聴講者には、Spring Bootを使うとクラウドネイティブなアプリケーションがいかに簡単に開発できるかがよく伝わったと思います。 ライブコーディング中にアプリケーションが動作しなくなるという、ライブならではのトラブルがあったのですが、 すぐに原因を見つけて修正した冷静な判断力はさすがの一言です。
全体を通じて、Spring Bootの開発スピードの速さを体感する場となりました。
セッション「Spring Cloud on AWS」
Amazon Web Services(AWS)の各種サービスをSpringで効果的に利用する方法について、 Spring Cloud for AWSのコミッタであるAgim Emruliさん(以下、Agimさん)が講演しました。
Agimさんは「依存性の注入(Dependency Injection)」 「アスペクト指向開発(Aspect-oriented Dev)」「可搬的サービスの抽象化(Portable Service Abstractions)」 という3要素により、オブジェクトをシンプルにして扱うのがSpring流のプログラミングスタイルであると述べ、これを「Spring Triangle」と表現しました。
Spring Cloud for AWSはこのような要素を取り入れ、 Springユーザーが慣れ親しんでいるスタイルでAWSのサービスを利用できるように設計されているそうです。 例として、Springのプレースホルダを用いてAmazon EC2のインスタンスの管理情報をインジェクションする機能や、 Springのキャッシュ抽象化機構を通してAmazon ElastiCacheを利用する機能などが紹介されました。
AWS CloudFormationとの連携機能の紹介もありました。 AWS CloudFormationは、AWSリソースの設定をテンプレート化しておき、プロビジョニングするためのサービスです。 Spring Cloud for AWSは、AWS CloudFormationが各リソースに対して 自動生成する物理名を解決する機能を備えているため、開発者は物理名を意識せずに 論理名を使ってリソースにアクセスできるようになっています。
その他にもさまざま機能が紹介されましたが、全体として、Springユーザーであれば自然と使いこなせるよう工夫されているように感じました。 AWSに載せるアプリケーションを開発する際、使用を検討してみてはいかがでしょうか。
セッション「A Lite Rx API for the JVM」
このセッションでは、Project ReactorのLeadであるStéphane MaldiniさんとCommiterのSébastienさんが、Reactive APIに関する説明を行いました。
最初に、「Reactiveとは何か」から解説がありました。 Reactiveとはイベントドリブンシステムに有益な定義であり、 Reactive Manifestoで明確に定められています。 この定義に則って、即応性、耐障害性、弾力性、メッセージ駆動を備えたシステムを「Reactive Systems」と呼びます。
また、Reactiveプログラミングでは、「Reactive Stream」と「Reactive API」という2つの技術要素を備えた環境で行う必要があり、処理は非同期、ノンブロッキングで実行されるものとなります。そのため、Reactiveプログラミングのコードは関数型になるのが一般的とのことです。
Reactive Streamとは、非同期処理の中でデータの流れを定義したもので、次の4つのAPIから成ります。
- Publisher
- Subscriber
- Subscription
- Processor
これらはすでに様々なライブラリで取り込まれており、JDK 9のjava.util.concurrent.Flowクラスにも含まれています。
Reactive APIとは、ストリームを流れるデータの加工をするためのもので、次のような複数のライブラリが存在します。
- Reactor 3.0
- RxJava 1.x
- Akka Stream 2.x
これらのうち、Reactorが最新のAPIです。Springとのエコシステムを構築し、既存のSpring MVCなどと同様の使い勝手を実現しているため、 スムーズに使い始められるとのことでした。
そして、「Mono」や「Flux」といったReactorの中心的なAPIを紹介した上で、GitHubで公開されているハンズオンで実際に触ってみましょう!という案内がありました。
Reactiveプログラミングは最初の一歩を踏み出しにくいかもしれません。 まずは上記のハンズオンを使い、コードレベルで体感すると理解が進むのではないかと思います。
