Spring Framework 5.2/Spring Boot 2.2
カンファレンス期間の直前にSpring Framework 5.2、直後にSpring Boot 2.2が発表されました。Spring Framework 5.2/Spring Boot 2.2での主な強化ポイントとしては、ここ数年継続的に取り組まれている性能向上、リアクティブ対応、GraalVM対応が挙げられます。
Spring Framework 5.0以降行われている起動時間の短縮に向けたリファクタリングの一環としては、新たにMergedAnnotationsというAPIが導入され、Spring Frameworkのプログラミングモデルの特徴でもあるアノテーション処理の高速化が図られています。
また、@ConfigurationにおいてCGLIBのサブクラスを生成しないように制御できるようになりました。アプリケーション実行時にCGLIBプロキシを介して呼び出されるメソッドを削減することで、高速化が期待できます。
GraalVMに関するポイントとしては、リフレクションなどのための設定ファイルを用意し、コマンドライン引数を適切に渡すことで、SpringアプリケーションをNative Image化できるようになりました。5.3に向けてはこれらのコンフィグレーションの自動化に取り組んでいるそうです。
リアクティブ対応の強化に関しては、RSocketとトランザクション管理のサポートが挙げられていました。Spring Framework 5.2では@MessageMappingを付けたメソッドでRSocketのレスポンスのハンドリングができるようになった他、Spring Boot 2.2では新しいスターターであるspring-boot-starter-rsocketが用意され、RSocketを使用したサーバーアプリケーションの開発を簡単に始められるようになっています。他にも、WebFluxでKotlinのCoroutineがサポートされるなど、随所にリアクティブ周りの強化が見られます。
今後の展望としては、OpenJDKのProject Loomに触れていました。これまでのスレッドAPIが軽量ユーザーモードスレッド「Fiber」に適合することで、従来の同期プログラミングが新しい位置づけとなる可能性に期待が込められているようです。
Spring×Kotlinの現在と今後
Spring FrameworkコミッタのSébastien Deleuzeさんは、セッション「The State of Kotlin Support in Spring」で、SpringにおけるKotlin対応の現在の状況と今後のプランを紹介してくれました。
DeleuzeさんはSpring開発においてKotlinを使うメリットとして、Javaに比べて短く書けることや、Null Safetyであることなどを挙げています。SpringにおけるKotlinのリファレンスドキュメントに関しては現在Spring Frameworkのみ提供されていますが、来年にはSpring Boot、Spring Securityについてのリファレンスの提供を予定しているそうです。Spring Dataはプロジェクトの数が多いこともあり、来年中にすべてを提供することは難しいものの、少なくともSpring Data JPAやSpring Data JDBCについては提供したいと話していました。
Springの機能を利用するためのDSLとしては、Spring Boot 2.2よりWebFlux Coroutines router DSL、WebMVC router DSL、MockMVC DSLがサポートされていますが、Spring Security DSLはまだ実験的に提供されている段階です。こちらも来年には正式に提供したいとのことでした。
コルーチンのサポート状況についても言及がありました。Kotlinのコルーチンは非同期処理をシンプルに書くことができることから、リアクティブプログラミングにも適しています。もちろんKotlinを利用する場合でもJavaの場合と同様にリアクティブAPIの使用が可能ですが、今後はコルーチンを使用する方法がKotlinのリアクティブプログラミングのデフォルトになるとのことです。まだSpring MVCの@RequestMappingなど一部の機能ではコルーチンをサポートしていませんが、来年にはサポートする予定だと話していました。
また、本セッションでは関数によるBean定義を利用する実験的なプロジェクトであるKofu(注釈:Kotlin and functionalの略)を用いたライブコーディングも行われ、既存のauto-configurationを書き換える様子が披露されました。これはあくまで副作用とのことですが、Kofuを使用する方がメモリ消費量は少なく、起動も速いとのことです。DeleuzeさんはKofuをSpringBoot Kotlin DSLに統合するのが自分の希望だと語り、セッションを締めくくりました。
起動時間の比較(Spring by Pivotalの「The State of Kotlin Support in Spring」より引用)
その他にもKotlinに関するセッションはいくつかあり、Todd Ginsbergさんの「Write Less Code with Kotlin and Spring Boot」などのKotlinを初心者向けに紹介するようなセッションは立ち見が出るほど盛況でした。一方でKotlinについて本格的に触れるようなセッションはそれほどの聴講者はおらず、Android×Kotlinに比べるとSpring×Kotlinのユーザはまだマイノリティであると感じました。上記のとおりさまざまなサポートが現在進行形で整っているので、今後の展開に注目したいです。
