先日(3/11)、技術評論社刊 「みんなのJava OpenJDKから始まる大変革期!」 を弊社牧野のもとに献本いただきました。
以下、そのときのやりとり
牧野「『みんなのJava OpenJDKから始まる大変革期』を献本いただきました!」
私「明後日発売の本じゃないですか!」
周り「せっかく献本頂いたたんだし速攻読んで書評を書いてツイートをしましょう!」
… 翌日 …
周り「そろそろツイートしようと思いますが読みました?」
隣の席の若手「ざっくり読んだのでこんな感じで簡単な感想書きました」
私「手元にまだありません」
隣の席の若手「私さんどうぞ」
私「」
という感じで空気を読んで書評を書くことに。
が、さすがに発売前には間に合わなかったので、機動力のある若手にツイート を譲りましたが、この週末を利用してようやく読むことができたので、遅ればせながら書評(というか感想)を書いていきます。
結論からいうと、「Java が OpenJDK としてオープンソースとなったことで、Java の進化が加速していることがわかり、Javaの躍動が感じられる本」でした。
内容と感想
全6章に渡る本ですが、各章ごとにテーマ・内容が異なっているので各章ごとに書きます。
第1章 Java 9 から 14 までに起こった変化から見るこれからのJava
ちょっと前に混乱をもたらした Java のライセンス変更は記憶に新しいですが、それ以外にも、Java 界隈では Java9 以降現在にいたるまで様々なことがありました。短期間にたくさんのことがありすぎて、情報がオーバーフローしてしまった方もいるのではないでしょうか(少なくとも私はそうでした)。また、その情報も、テック系ブログをはじめ、さまざまなところに分散していて、まとめるのも大変でした。
この章では、その Java 界隈の状況の変化が見通しよくまとめられています。
内容としては、Java 界隈の変化を押さえ、Java 開発体制から、Java9 〜 14 までのリリース内容概要、新しい言語仕様の紹介、これからの機能などがわかりやすくまとめられています。
過去と比較して、何ができるようになったかが把握できるのもさることながら、紹介されている機能・仕様が「何故そのようになっているか」にも言及されていて、現在の Java の機能がいかに使いやすくなっているかがよく理解できました。
第2章 JDKに関する疑問と不安解消! JDKディストリビューション徹底解説
Java リリースモデルの変更があり、その後、雨後の筍の様にたくさんのJDKディストリビューションが現れました。これらのディストリビューションのうち、どれを業務で利用するか迷った経験をお持ちの方は多いのではないでしょうか。
この章では、JDKディストリビューションの歴史から、現在どのようなJDKディストリビューションがあり、どのような特徴をもっているのかが網羅的に解説されています。さらに、どのように選ぶべきかという方針についても言及されています。
これを読んでおけば、JDKディストリビューション選択時のステークホルダーに説明する材料に困ることはないでしょう。
個人的には、BellSoft Liberica JDK が初耳だったので、ちょっと試してみたいと思っています。
第3章 JavaEEからJakartaEEへ 新しいEnterprise Java
20年ぐらい前にJ2EEを使っていましたが、そのときは設定が多く、柔軟性が少ない堅い印象。Java EE7 のときはてらだよしおさんが JJUG ナイトセミナーですごく推してた記憶。その後は進化が滞っていて、今後は余り使うことはないだろう。個人的にはそんな印象の Java EE ですが、 近年開発が再び動き出しています。そんな Enterprise Java の過去から現在についてまとめられています。
この章では、Enterprise Java にフォーカスして、その歴史やアーキテクチャの変遷、最新の Jakarta EE 8 の機能について、網羅的に解説されています。
序盤の歴史の部分は、J2EE を触ったことのある私からすると歴史書的な印象もありましたが、Jakarta EE8 の新機能の部分では、モダンな Java フレームワークの機能を積極的に標準化していこうとする姿勢がよくわかり、変わろうとしているんだ、ということが感じられました。
Enterprise Java の標準としてまとまることで、より開発しやすくなることに期待します。
第4章 MicroProfile が拓く Java のマイクロサービス
前章をうけて、Java EE から派生したマイクロサービスのためのAPI、MicroProfile について書かれています。マイクロサービスは流行っていますが、実装パターンは様々で、開発に時間がかかってしまう印象です。そんなマイクロサービスの実装でみんなが苦労している部分を標準化しようというのが MicroProfile です。
この章では、MicroProfile が産まれた経緯と、その実装方法、機能、そして今後の発展について説明されています。
マイクロサービスとして開発するかどうかは要件によってかわるかとは思いますが、いざマイクロサービスを利用する、となったときにこうした標準があることは助かると思いました。個人的には、今後の発展に含まれていた、「Reactive対応」「LRA対応」が興味深かったです。とくに、LRA(Long Running Actions)についてはマイクロサービスを作る上でいつも悩まされていたことなので、今後の動向に注視していきたいです。
第5章 ネイティブイメージ生成で注目! Java も他言語も高パフォーマンスGraalVM
昨年行われた JJUG CCC などのイベントでも、GraalVM と名のつくセッションは人気でした。その事実からもわかるように、GraalVM は、おそらくいまJava開発者の間でもっとも興味が惹かれている技術ではないでしょうか。
しかし、昨今のFaaS勃興の背景から、GraalVM はどうしてもネイティブコンパイラにフォーカスしがちです(私もその一面しか見ていなかった感じです)。しかし、GraalVMはそれだけでなく、多言語実行環境としての一面もあります。
この章では、GraalVM と HosSpot VM の内部構造を比較し、Graal VM がどのように動作しているのか、如何にして多言語実行環境を実現しているのか、ネイティブコンパイラがどのように動作しているのか、などが記載されていて、いままで曖昧だったGraalVMの全体像が明確に見える思いでした。
また、GraalVM の具体的な適用事例も幾つか紹介されており、この中でも興味深かったのは、リアクティブストリームを使ったアプリケーションにおいて、JITコンパイラをGraalVMのものに置き換えることで、最適化が図られる可能性があるという内容でした。
このことが必要になる大規模なプロジェクトはそう無さそうですが、今後の引き出しとするためにも、手元で試してみたいと思います。
第6章 マイクロサービス、クラウド、コンテナ対応
最後は、最近のJavaというより、Java界隈のフレームワークについての内容です。
Javaのフレームワークは、現在では Spring Boot が隆盛を極めているように思えますが、システムのクラウド化にともなうフレームワークに対する要求の変化から、新しい軽量なフレームワークが数多く誕生しています。その中から、Micronaut / Quarkus / Helidon を実際の実装・コード例を通して紹介しています。
実際に記載されている内容通りに手を動かすことで、ハンズオン的に各フレームワークの機能を知ることができますが、個人的に重要と感じたのは、最近のフレームワークに求められているものについての記事でした。
昨今のクラウドやマイクロサービスが求められているなかで、新しい軽量フレームワークには可搬性(Portability)や観測性(Observability)、非同期処理などが求められているとのこと。とくに「観測性」については、強く言及されている印象で、私も業務中、実装しているときに忘れがちな側面ではあるので、紹介されている軽量フレームワークを試しながら、どのように実現されているのかを確認したいと思います。
まとめ
Java開発をやってきた人の中には、長く進化が止まっていた時代のイメージから、「枯れた技術で長く続ける」という発想を持っている人もいるかと思います。しかし、時代は移り、Java は半年ごとに機能追加が行われ、常に新しいパラダイムを取り込むようになりました。
そうした状況の中、この本は、Java 開発者が今まさに読んでおくべきものだと感じました。一年後では遅いです。なぜなら、今の Java は進化を続けていて、数年後には、この本に書かれていることに加えて、さらに新しいパラダイムがやってきているかも知れません。
Java を使う開発者である我々も、常に新しい技術を学んで、この先生きのこれるようにしなければなりません。また、世の中のシステムが陳腐化することも避けたいです。
この本の序文において、著者の一人であるきしだなおきさんは以下のように書かれています。
Java はみんなで作るものになりました。
この言葉は、言語開発者にだけ向けられた言葉ではないと思っています。
我々開発者も、新しい技術を学び、学んだ知識を共有して、よりよいシステムをつくれるようにしていきたい。
この本を読んでその思いを新たにしました。