Quarkusについて(@関ジャバ勉強会)

この投稿の概要

JavaのWebフレームワークQuarkusについて、Java最新フレームワーク特集@関ジャバというイベントで勉強できたのでまとめます。

当日のスピーカーはRed Hat/Java Champion/Microsoft MVPEdson Yanagaさん。 肩書きがすごい。 デモ中心の発表で、とにかくポイントがわかりやすかった印象です。

Quarkus(クォーカス)とは?

quarkus.io

Javaの最新Webフレームワーク。

"Supersonic Subatomic Java"というキャッチフレーズ。Supersonicは動作の速さ、Subatomicはメモリフットプリントの小ささの比喩かな?

高速なHot Replace

発表では"Developer Joy"というメッセージと共に、開発が快適なことがとにかく強調されていた。

./mvnw compile quarkus:devで開発サーバーが立ち上がり、locahost:8080にリクエストするごとに差分チェック・再コンパイルされる。 少なくともテストプロジェクトだと確かに速い。

2019-11-27 04:42:28,836 INFO  [io.qua.dev] (vert.x-worker-thread-4) Hot replace total time: 0.232s

JVM/ネイティブバイナリ両対応

JVM用のjarも吐けるし、GraalVM用ネイティブバイナリも吐ける。 ネイティブ用はmvn package -Pnativeで。 ネイティブバイナリは実行高速だけど、コンパイルはかなり遅いとのこと。*1

その他の特徴

  • VS CodeIntelliJ IDEA用のプラグインが整備されていて快適に開発できる
  • quarkus-maven-pluginを使えばHibernateなどをエクステンションとして簡単に依存追加できる
  • Panache(パナッシュ)というライブラリで永続化が便利らしい
    • よくあるRepository的なインタフェースだけでなく、ActiveRecord的なインタフェースも使える(Developer.listAll()のような)
  • Springからの移行が容易

Java/JVMクラウドの歴史との関連

同日、楽天の椎葉さんによるMicronaut(こちらもJavaフレームワーク)に関する発表がありました。 その内容とも併せると、Java/JVMアプリやクラウドの歴史が垣間見えて勉強になったので、自分の理解を簡単にまとめておきます。

クラウド以前

強力なオンプレサーバーで長時間サービスが動き続けていた。そのため、

  • サービスの起動はまれで、ブートが遅くても気にならない
  • 時間が経ってウォームアップが十分になれば、JVM上で高いパフォーマンスを発揮
  • メモリは必要ならたくさん積めば良い

一方クラウドネイティブ時代

コンテナ・マイクロサービスなどの流れもあいまって、サービスは小さいサーバーで頻繁に起動/終了されるのが普通になってきている。すると

  • ブートが遅いと厳しい
  • ウォームアップ・JITコンパイラに頼りづらくパフォーマンスが出づらい
  • IaaSだとメモリが高い

なので

以下の特徴を持つQuarkusやMicronautなどのフレームワークが、時代に合わせる形で発展してきている。

  • 起動が早い
  • メモリフットプリントが小さい
  • ネイティブバイナリも使える

所感

自分個人は業務ではWebフレームワーク選定などはしないので、そのあたりの事情が知れて勉強になりました。

また、時代とともにWebフレームワークへの要求が変化してきている、ということも興味深かったです。

既存のSpringやPlayなどのフレームワークがそのあたりの変化にどう反応しているのか、Quarkus、Micronaut以外のフレームワークについて、GraalVMについてなど、知らないことも多いので折を見て調べていこうと思います。

参考資料

*1:実際試そうと思ったけど、MacでGraalVMのnative-imageインストールに手間取ったのでまた後日