Quarkusについて(@関ジャバ勉強会)
この投稿の概要
JavaのWebフレームワークQuarkusについて、Java最新フレームワーク特集@関ジャバというイベントで勉強できたのでまとめます。
当日のスピーカーはRed Hat/Java Champion/Microsoft MVPのEdson Yanagaさん。 肩書きがすごい。 デモ中心の発表で、とにかくポイントがわかりやすかった印象です。
Quarkus(クォーカス)とは?
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 Code、IntelliJ IDEA用のプラグインが整備されていて快適に開発できる
- quarkus-maven-pluginを使えばHibernateなどをエクステンションとして簡単に依存追加できる
- Panache(パナッシュ)というライブラリで永続化が便利らしい
- よくあるRepository的なインタフェースだけでなく、ActiveRecord的なインタフェースも使える(
Developer.listAll()
のような)
- よくあるRepository的なインタフェースだけでなく、ActiveRecord的なインタフェースも使える(
- Springからの移行が容易
Java/JVMやクラウドの歴史との関連
同日、楽天の椎葉さんによるMicronaut(こちらもJavaフレームワーク)に関する発表がありました。 その内容とも併せると、Java/JVMアプリやクラウドの歴史が垣間見えて勉強になったので、自分の理解を簡単にまとめておきます。
クラウド以前
強力なオンプレサーバーで長時間サービスが動き続けていた。そのため、
- サービスの起動はまれで、ブートが遅くても気にならない
- 時間が経ってウォームアップが十分になれば、JVM上で高いパフォーマンスを発揮
- メモリは必要ならたくさん積めば良い
一方クラウドネイティブ時代
コンテナ・マイクロサービスなどの流れもあいまって、サービスは小さいサーバーで頻繁に起動/終了されるのが普通になってきている。すると
なので
以下の特徴を持つQuarkusやMicronautなどのフレームワークが、時代に合わせる形で発展してきている。
- 起動が早い
- メモリフットプリントが小さい
- ネイティブバイナリも使える
所感
自分個人は業務ではWebフレームワーク選定などはしないので、そのあたりの事情が知れて勉強になりました。
また、時代とともにWebフレームワークへの要求が変化してきている、ということも興味深かったです。
既存のSpringやPlayなどのフレームワークがそのあたりの変化にどう反応しているのか、Quarkus、Micronaut以外のフレームワークについて、GraalVMについてなど、知らないことも多いので折を見て調べていこうと思います。