本記事のレポーター陣
岩塚卓弥、岡田敏、鈴木源吾、持田誠一郎(所属は全員 NTTソフトウェアイノベーションセンタ)
Spring Festとは
Spring Festは、Spring Frameworkに関する国内最大規模のイベントであり、JSUG(日本Springユーザ会)主催で年に一回開催されています。
朝一番目の基調講演と昼のランチセッションを除いて基本的には4並列でセッションが開かれ、参加者は自分の興味のある内容を選択して聴講することができます。年々参加者が増加している影響もあり、人気のセッションでは立ち見になってしまう参加者も多く見られました。
今年の新しい試みとしては、参加者にスポンサーのノベルティ入りのオリジナルのトートバッグが配布されていました。参加無料のイベントとしては豪華な参加特典になっていたように思います。
基調講演と、セッション「Spring Boot with Kotlin, functional configuration and GraalVM」
Spring Fest 2018の基調講演は、Spring FrameworkのコミッタであるPivotalのSebastien Deleuzeさんから「The State of Spring, Java and Kotlin」というタイトルで行われました。
基調講演で語られた内容の大部分は、本イベントの一か月前に米国で開催されたSpringOne Platform 2018の主要なトピックを凝縮したものとなっていました。
以下に関しては、本稿のレポーターの一部が執筆に参加しているSpringOne Platform 2018のレポートにまとめられているので、そちらを参照してください。
- JavaとSpring Frameworkのバージョンの対応関係
- Spring Framework 5.1での改善点
- Spring Framework 5.2の計画
- R2DBCやRSocketといったリアクティブプログラミングに関する最新状況
ここでは上記以外でSebastienさんが語った内容について少し詳しく紹介したいと思います。
まずはKotlinについてです。基調講演のタイトルにも含まれているように、今回のSpring FestではKotlinは非常に重要なキーワードになっていました。Sebastienさんは基調講演の他に「Spring Boot with Kotlin, functional configuration and GraalVM」というセッションでも、Kotlinを使ったSpring Bootの利用の仕方について、ライブコーディングも交えながら分かりやすく最新の状況を紹介してくれています。
現状では、KotlinはAndroid向きの開発言語というイメージを持つ方も多いと思います。しかし、SpringにおけるKotlin対応を取り仕切るSebastienさんからは、SpringではKotlin対応をしっかりやっていく、Webアプリ開発でKotlinをどんどん使ってほしいという強いメッセージが感じられました。
その背景には、他の言語やフレームワーク(Go、Node.js、Rubyなど)との競争という側面があります。リリースサイクルが半年ごとに短縮されたことでJavaの進化の速度も上がっていますが、やはり基本の設計が古いJavaと比較するとKotlinのシンタックスは非常に簡潔で、Javaのやや冗長なシンタックスに苦手意識を持つ開発者にも受け入れやすいものとなっています。
Kotlinを利用してSpring Bootアプリケーションをよりライトウェイトに開発することを目指した、Spring Fuという新たな実験的プロジェクトも立ち上がっています。Spring Fu自体はインキュベータープロジェクトという位置付けであり、Spring FrameworkやSpring Bootといったトップレベルのプロジェクトへ盛り込んでいく機能を成熟させることを目的にしているとのことです。
Spring FuではKofu (for Kotlin and function)というKotlinによるDSLが提供されています。Kofuでは従来のアノテーションによるBean定義などのアプリケーション設定に代わり、lambdaを用いた関数的な設定を宣言的に行うことができます。Spring Fuの機能を用いることでアプリケーションをより高速に起動させ、かつ省メモリで動作させることが可能になるそうです。Javaユーザ向けにはJafu(for Java and function)というJava DSLも用意されています。
その他、詳しく紹介はされませんでしたが、Spring FuではKotlinのコルーチンを用いたノンブロッキングな処理の記述のサポート機能についても開発されているとのことでした。
もう一点取り上げたい内容は、Oracleからリリースされた多言語対応仮想マシンであるGraalVMに関するものです。GraalVMを使用するとJavaアプリケーションをネイティブコンパイルすることができます。コンパイルされた実行可能ファイルにはGraalVMのコンポーネントの一つであるSubstrate VMが組み込まれ、JVMを使用することなく動作します。
Sebastienさんは基調講演で実際にSpring Bootアプリケーションをネイティブな実行可能ファイルへとコンパイルするデモを見せてくれました。コンパイルされたアプリケーションの起動にかかった時間はなんとわずか0.006秒でした。これは起動に数秒を要する通常のSpring Bootアプリケーションではまず考えられない、常識を覆す速さであり、参加者からは驚きの声が上がっていました。
GraalVMによるネイティブコンパイルはSpring Framework 5.1からサポートされていますが、Spring Framework 5.2ではさらなる改善が予定されています。
Spring Bootアプリケーション起動を超高速化する手段ができたことで、これまで起動時のオーバヘッドがネックとなっていたようなケースでも躊躇なく利用できるようになり、ますますさまざまなシーンで利用可能になっていくことが予想されます。
これらの技術はまだ発展途上の面もありますが、JavaとSpringの発展にとって大変重要な内容であると感じられました。