L is Bエンジニアブログ

ビジネス用メッセンジャーdirectのエンジニアによるブログ

LisBエンジニアブログ

ビジネスチャットdirectのエンジニアブログ

Spring Fest 2018 に一般参加者として参加してきました

こんにちわ、サーバーの Java プログラムを書いている持田(@mike_neck)です。

f:id:mike_neck:20180802004547p:plain

先日(2018/10/31)開催された Spring Fest 2018 に一般参加者として参加してきました。こちらはそのカンファレンスレポートになります。

Keynote

Sébastien Deleuze による Spring Framework 、 Java 、 Kotlin の今を紹介するキーノートです。ここ最近のトピックを完結にまとめているものでした。主なトピックとしては次のとおりです。

  • Java のリリースサイクル
  • Kotlin 1.3 の概要
  • Spring 5.1 の概要
  • Spring Boot 2.1 の概要
  • Spring の今後のアップデート(Kotlin Coroutineへの対応など)
  • GraalVM でのアプリケーション高速化
    • Spring Boot アプリケーションを GraalVM でネイティブイメージにして起動を高速化する
  • R2DBC
    • Spring Data R2DBC
  • Rsocket
    • Reactive streams BACK PRESSURE over the network
  • Spring Fu/Spring KoFu/Spring JaFu
    • アノテーションをやめて明示的なコンフィギュレーションにすることで起動の高速化/メモリフットプリントを小さくする

キーノートでしたので、わりと広めの内容を扱っていましたが、今後の Spring の方向性として、起動をもっと速くする、Kotlin、Reactive(Kotlin Coroutine)があげられると思います。

Spring Data for Apache Geode で RDB いらずのアプリ開発をしよう!

山河 征紀さんによる Spring Data for Apache Geode の入門セッションです。以前からインプレース・データ処理が気になってはいたのですが、僕自身が不勉強すぎて入門すらしていなかったので、ちょうどよいセッションでした(以前に JJUG CCC で Java Cache のセッションがあったのですが、理解できていなかった)。

Apache Geode は Hazelcast や Infinispan 、 Oracle Coherence と並ぶインメモリーデータグリッドと呼ばれるミドルウェアで、 Java のオブジェクトをそのままの形で保持するデータストアとして利用できます。データレイヤーが柔軟なためスケールアウトしやすい、イベント駆動処理ができるなどの特徴があります。雑に言えばキャッシュです。

Spring Data は様々なデータストアに対して一定のプログラミングモデルによるアクセスを提供するライブラリーです。 Spring Data for Apache Geode においても、 Geode 固有の設定などを隠蔽して、他のデータストアと変わらないインターフェースで操作を可能にしています。

といった Spring Data for Apache Geode の基本的な説明から始まり、具体的な実装方法を紹介していくという内容でした。個人的にいくつか疑問が残ったところがあるものの、そちらは今後実際に手を動かして確認していくということにして、取っ掛かりとして非常に良いセッションでした。

実際のプロジェクトで Spring アプリを Kotlin で開発して得た気づき集

事実上の Kotlin エヴァンジェリスト 長澤太郎 さんのサーバーサイド Kotlin に関するセッション。立ち見が出るほどの人気セッションで改めて Kotlin への関心の高さがわかるセッションでした。主な内容は以下の通り。

  • Kotlin 用の Spring にて提供されている拡張関数
  • Kotlin で Spring 開発であるあるな事例(Bean Validation とか)
  • WebFlux を Kotlin Coroutine でやる場合の具体的な記述方法
  • Spring Fu
  • テストの書き方
    • JUnit5
    • AssertJ
    • mockK

本セッションでは値の検証に Bean Validation が取り上げられていましたが、個人的には Pivotal の 槙さん が開発する Yavi(「ヤヴァイ」と読む) を組み合わせるのがよいかと思いました。

Knative: Serving your Serverless Java Service on Kubernetes the 12-Factor way

Red Hat の Kamesh Sampath さんによる Knative のセッションでした。現在故あって Serverless を実現するソフトウェアを探していてちょうどよいかと思って受講してみたのですが、あまりに Knative のこと等知らなすぎてちょっと理解できませんでした… とはいえ、 OpenWhiskNucliofission というソフトウェアがあることがわかったので、あとで調べてみます。

Pivotal 認定講師が解説! 基礎からの OAuth 2.0 と Spring Security 5.1 による実装

Pivotal 認定講師(Pivotal が提供する Spring の研修の講師ができる) 多田真敏 さんによる Spring Security の特に OAuth 2.0 に関する部分に特化した解説のセッション。ここ最近は OAuth 2.0 を忘れつつあったので復習のつもりで受講しました。ざっと概要部分をまとめると以下の通り。

  • Spring の OAuth 対応は現在は Spring Security 5 にまとめられているが、以前は Spring Cloud 〜 とか Spring Security OAuth など各ライブラリーで個別に実装されていた。
  • Spring Security OAuth2 はドキュメントが貧弱かつ OAuth2 の仕様で未定義の部分に独自実装している箇所があり理解するにはコードを読むほかがない
  • Spring Security 5 の OAuth2 対応は、一部が未実装
    • クライアントは対応済み(SSO等)
    • リソースサーバーは対応済み
    • 認可サーバーは未実装
  • 認可サーバーに関しては現在(2018/10/31)のところ次で対応する
    • Spring Security OAuth2 を使う
    • 認可サーバーのサービスを利用する
    • 認可サーバーのミドルウェアを利用する

Spring Boot with Kotlin, functrional configuration and GraalVM

Sébastien Deleuze による(本日2回目の)セッション。最初はキーノートの振り返りでした。Spring Fu 、 Spring KoFu 、 Spring JaFu および GraalVM による起動時間の短縮方法の紹介。

  • Spring Fu の解決する課題
    • 起動を速くする
    • 明示的なコンフィギュレーション手段を提供する
    • ネイティブアプリにする(そして起動を速くする)

Spring や Spring Boot ではデフォルトの Codec が Jackson であるのは(知らなくてもいいけど)Conventionとなっているのに対して、 Spring Fu では codec ブロックで明示的に指定する必要があったり、 Autowired で自動でインジェクトされてた(ゆえに、何がインジェクトされるのか知らないと意図しない動作になることがある)Bean も、 beans ブロックにて明示的に生成するようになるあたりが今までの Spring のやり方と Spring Fu でのやり方で異なる箇所のようでした。

業務で使いたい WebFlux による Reactive プログラミング

日本で3人目(4人目)の Java Champion である 谷本心 さんによるWebFluxの解説のセッションです。

僕自身は Spring 5 のリリース以来個人で Spring WebFlux および Reactor の勉強をしていたので、学習内容のレビュー的な位置づけとして受講したセッションになりました。前半は Reactor の入門で、後半がマイクロサービスにおける WebFlux + WebClient の利用例の紹介というセッションでした。マイクロサービスにおけるN + 1問題(DBでやる2回にリクエストをまとめて発行する方法がアンチパターンになる)というのがあるんだなということがわかりました。


感想

L is B のサーバー群では残念ながら Spring をほとんど利用していないため、直接的には本カンファレンスの内容が業務には適用できませんが、 Spring プロダクトは最新の考え方や技術を積極的に取り込むため参考になるところが多く、有意義な時間が過ごせたと思います。


L is B では Java のプログラムを書いて、ビジネスでのコミュニケーションをブーストさせたいエンジニアを募集しています。 僕とトゥギャザーしてワークしたい君は、 こちら(ツイッターの画面に飛びます) または こちら にアクセスしてエントリーしよう!