書籍「みんなのJava」を共同執筆、最近のフレームワークの紹介を書きました #minjava

「みんなのJava OpenJDKから始まる大変革期!」という本を共同執筆しました。

gihyo.jp

3/13日発売予定で、電子化の予定もあり gihyo.jp から購入するとDRMフリーです。

書籍について

ここ数年、Java に関する書籍はあまり出ておらず、 特にJava 11 以降 や OpenJDK のリリースモデル変更に関する最新情報などは、インターネットや情報雑誌などに頼らざるを得ない状況だったと思います。

Java の動向についてはリリースモデルの変更により、よりオープンになり継続的に改善が行われていくことになったのはとても良いと思います。
現職では AdoptOpenJDK のLTSであるJava11を使用していますが、特に問題は起きていませんし。 (リリースモデル変更時に色々と騒ぎになったのは、オラクル社のアナウンスが十分ではなかったとは今でも思っていますが。。。私もあの頃は調査で忙しかった覚えがあります)

とはいえ、次期LTSである Java 17 にはパターンマッチ、ヒアドキュメント、レコード型など魅力的な機能がてんこ盛りになるでしょうし(もしかしたらLoomも?) とても期待しています。 これはアップデートが2,3年に一度であったJava8 以前であれば考えられたなかったことです。 (もちろん、更新頻度が少なかったという部分に重きを置いていたところもあるだろうとは思いますが、アップデートがなくなる言語はいずれ死に体となる運命でしょうし)

「みんなのJava」は上記の内容のほか、ここ最近の Java を取り巻く変化とこれからについて書かれた久しぶりの新しいJava の書籍だと思います。 ぜひお手に取ってください。 (偶然にも同日にもう一冊、Javaの本が出版されるのですが、、)

執筆担当部分について

私の担当は 第6章の[新世代]軽量フレームワーク入門 で、ここ数年で登場した新しいフレームワーク、 Micronaut, Quarkus, Helidon についての記事を書きました。

2019年の春頃に著者のひとりのきしださんから新しい Java の本を書きたいので、 Helidon, Micronaut, Quarkus あたりの内容を担当してほしいとの DM が突然届き、 どうして私なんだろう? と思いつつも承諾しました。

一応、Micronaut についてはGAから3日後に紹介スライドをあげたり(1)、 GraalVM native image + AWS Lambda を試したり(2)していたので、 他のフレームワークも同じように手を動かしつつ、実際にその感触を確かめて記事にしてみたつもりです。

(1)

www.slideshare.net

(2)

qiita.com

1については、まだGraalVM native image が出る前だったので、軽量とはなったとはいえ Lambdaは厳しいかも、 からの2で、native image でJavaでもいけるかもみたいな変化があったので、 GraalVM の盛り上がりも見逃せないですね。

記事で解説に使用したソースコードは 下記の Github で公開しています。 執筆時のバージョンのものと、現在の最新バージョンに追従したもの、両方ともあります。

github.com

特に後者は、GraalVM 19.3r11 にも対応していて、Qurakusでも Java11 で natvie-image も生成できるものとなっています。

"軽量"フレームワークの軽量とは、今回の記事では起動速度やモジュールのサイズが従来よりも小さいという文脈で使っています。 起動が早いにも関わらず、機能も豊富であり (特に Micronaut, Quarkusは) 実用的なアプリケーションを作るのに十分な機能を備えていると思いました。 その仕組みについても解説しています。

フレームワークの紹介記事は、だいたい Getting Start +α な内容に留まりがちですが、 編集部からはより実用的な内容がほしいと要望があったので、私なりに実用的な内容を考えて、 ヘルスチェック、メトリクス、分散トレーシング、コンフィグレーションなど、アプリケーションの基盤的な機能を各フレームワークで設定するにはという観点で書いてみました。

というのも、ここ1,2年で感じたことですが、クラウドやコンテナの流行によりサーバーはなるべく単純化してアプリケーションを動かす箱となり、 従来であればサーバー側でやっていたような死活監視やメトリクス集計などの非機能要件に関する内容も、 フレームワーク側の機能として提供されているなと思ったからです。

また、フレームワークが提供する機能の変化も、最近の技術トレンドの変遷によるものなので、フレームワークの紹介と一緒に技術トレンドの変遷についても書きました。

というわけで私が担当した章は上記のことを考えて書いてみました。興味があればぜひお手にとってください。

あとがきのようなもの

それにしても、フレームワークのアップデートは速く、どうしても最新情報から遅れてしまいますね。 誌面には書けなかった最近のアップデートについて軽く触れておきます。

執筆期間はだいたい半年ほどでしたが、執筆開始当初は Quarkus がここまで流行になるとは思っていなかったですね。 初稿を出した後に、 Quarkus 1.0.0 が出た時はどうしようと思いました。
1.2.0 から GraalVM19.3r11 にも対応したので、 Java11で開発もnative image 生成もできるようになりました。
Extensionの充実度合いが執筆時から比べても段違いなので、今後注目の的になっていくだろうと思います。

Micronaut も 1.3 から Spring Data のような永続化レイヤーの Micronaut Data や、Kotlinコルーチン対応、GraphQL など、 Spring のように実用的な機能や開発効率の高いものんをどんどん取り込んでいます。

現時点は上記2つに押されがちに見える Helidon ですが、時期メジャーバージョンの Helidon 2.0 は Helidon SE へのDBクライアントや Helidon MP への native-image 対応など、より実用的なフレームワークとなるべく開発が活発に進んでいるようです。 個人的は Helidon SE には注目していて、サイズが小さかったり、プログラマブルにエンドポイントを構成できたりする性質は、高機能なリバースプロキシを作るのに向いているなと思ったりもしています。Helidon SE でサービスメッシュみたいなを作るのも面白そうだなと思います。