GraalVM
GraalVMプロジェクトの開発者であるOleg Šelajevさんは「GraalVM for Java developers」というセッションで、GraalVMについて紹介してくれました。
GraalVMはOracleが開発した多言語対応の仮想マシンで、そのパフォーマンスの高さから次世代の仮想マシンとして脚光を浴びています。2019年5月には本番運用可能バージョンである「GraalVM 19.0」がリリースされ、ますます多くの注目を集めています。
GraalVMは、GraalコンパイラというJIT(Just-In-Time)コンパイラとTruffleという言語インタプリタ実装用フレームワークを主要技術として含んでいます。
Graalコンパイラは、JVMCI(JVM compiler interface)を利用して作られたJavaベースのJITコンパイラです。C++で実装された従来のC2コンパイラの維持保守・拡張の難しさが改善された上、最適化技術の改良によりパフォーマンスも向上しています。講演では、JVMに関するさまざまなベンチマークの比較結果を紹介し、GraalVMの優位性を説明されました。
- Renaissance Suite Benchmark
- Better Java Streams performance with GraalVM
- Compiling Scala Faster with GraalVM
- Matrix Multiplication Benchmark(Java Keynote at Oracle Code One 2018)
Truffleは、任意の言語インタプリタを開発するためのフレームワークで、ソースコードを解析してAST(Abstract Syntax Tree)を生成するためのAPIを提供しています。GraalVMではこれを利用して、JavaやScala、KotlinといったJVM言語に加え、RubyやPython、JavaScriptなどのプログラミング言語の相互運用を可能にしています。講演では、GraalVMのJavaSctiptエンジンがECMAScriptに完全に準拠していることや従来のJVMベースのJavaScriptエンジンよりも実行性能が向上していること、また、RubyやRといった言語においても高い実行性能を持つことが強調されていました。
- Oracle GraalVM announces support for Nashorn migration
- Faster R with FastR
- Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby

さらに、GraalVMにはJavaソースコードをAOT(Ahead-Of-Time)コンパイルして、Native Imageと呼ばれる実行可能ファイルを生成するためのツールが付属しています。Native Imageでは、JavaソースコードはSubstrate VMという組み込みランタイムコンポーネント上で動作するマシンコードに事前にコンパイルされます。アプリケーション起動時のクラスロードや初期化処理が不要になるため、従来のJVM上で動作するアプリケーションと比較して起動が高速になります。
2019年6月現在、Spring FrameworkのNative Imageサポートは限定的なものとなっています。Spring Frameworkではリフレクションの利用やダイナミックプロキシによる動的なクラス生成を多用しており、Native Image化のためには追加の設定やコマンド引数の指定が必要です。Spring Frameworkの開発リーダであるJuergen Hollerさんは自身のセッションの中で、2020年 Q2にリリース予定のSpring Framework 5.3ではこうした設定を自動で行うことによりNative Imageを完全にサポートできるよう、GraalVM開発チームと協力して技術的課題の解決に努めていくと話してくれました。
マイクロサービス
マイクロサービスに関しては、世間の話題の高まりを裏付けるかのように昨年以上に関連セッションが増えており、多くの聴講者が集まっていました。
Kubernetes、Istioといったコンテナ技術を活用してクラウド上にマイクロサービスを実装するワークショップや、Spring Securityを活用してマイクロサービスの認証機能を実装するセッションなどが開催されており、省力的かつセキュアなマイクロサービス開発ノウハウに対する需要が年々高まっているように感じました。
マイクロサービスにおいて注目されているアーキテクチャの一つに「イベント駆動型アーキテクチャ」があります。
複数のマイクロサービスを有する大規模なシステムにおいて、サービス間の連携は欠かせません。しかしながら、従来のメッセージング形式ではサービス間の独立性を確保することが難しく、マイクロサービス化の利点を得辛いといった課題がありました。
イベント駆動型アーキテクチャでは、サービスはあるイベントを契機に特定の処理を行い、処理に応じたイベントを発生させることでさらに他のサービスが動作するため、他のサービスとの直接的なつながりを意識せずに設計することができます。
イベント駆動型アーキテクチャに関するセッションも多数ありましたが、その中の一つであるAllard Buijzeさんの 「Event-Driven Microservices with Axon and Spring Boot: excitingly boring」というセッションは、自転車レンタルシステムをAxonとSpring Bootを用いてイベント駆動方式で簡潔に実装するという、ライブコーディング形式の興味深い内容となっていました。
Axonはドメイン駆動設計、CQRS、イベント駆動アーキテクチャに基づいたアプリケーションを作成するためのプロダクトです。従来はAxon Frameworkという名称でしたがバージョン4以降はAxon Serverと合わせてAxonという名称を使用しています。
講演では実際に作成したシステムを動作させ、各イベントの内容を確認しながら、自転車の場所および貸出者の変化を分かりやすく可視化しながら実装していました。聴講者の名前を貸出者に入れるなどの工夫で会場は大きな盛り上がりを見せていました。
