【書評】みんなのJava OpenJDKから始まる大変革期! #minjava

技術評論社から最近のJavaの状況についてまとめた解説書が出ました。*1
光栄なことに献本をいただいたので、早速レビューをさせていただこうと思います。

gihyo.jp

紙版と電子版があって、電子版は技術評論社のサイト(Gihyo Digital Publishing)で買った場合はDRMフリーのpdf版およびepub版がダウンロードできます。AmazonではKindle版、楽天ではKobo版が買えるみたいです。この辺りのフォーマットは好みの問題もあるかと思いますが、Gihyo Digital PublishingはDRMフリーを貫いているので使い勝手がよくて重宝しています。

全体像

端的に言って、Java SEからJava EE、最近流行りのマイクロフレームワークまでを解説した本です。これを一冊読んでおけば、最近の動向は一通り頭に入ると思います。各章、この内容を聞くならこの人だろうと納得できる著者が名を連ねています。なぜそうなったのかといった背景にまで触れているので、初見でも理解しやすいかと思います。

広く浅く紹介することにフォーカスされているので、それぞれの技術に関する細かい解説は基本的にありません。この本はあくまで索引として、より深く知りたい人は、各解説の中で紹介されている情報ソースを辿るという使い方をするのがよさそうです。

第1章 - Java 9以降で起こった変化の総まとめ

著者は @kis@shinyafox のコンビ。
Java 9からJava 14までの言語仕様・ライブラリの変化から、Project Valhallaの解説、JVMの変更やJDK付属ツールの紹介まで、全部ちゃんと解説したらそれだけで1冊できてしまいそうな内容が、ぎゅっと一章にん詰まっています。最近の動向が非常に簡潔まとまっているので、Javaを使っている人にとっては必読の章です。ちょうど今月リリースされるJava 14の新機能までちゃんと押さえられているあたりは、さすがきしださんといったところですね。

第2章 - JDKディストリビューションを選ぶときの指針になる章

著者はOpenJDK警察ソムリエこと @yamadamn
OracleOracle JDKの商用機能をOpenJDKプロジェクトに寄贈し、ライセンス体系を変更したことによって、Java界隈ではJDKディストリビューションの群雄割拠時代が訪れました。それまでは何となくOracle JDKを使っていれば問題なかったわけですが、これからはプロジェクトで採用するJDKについて、ライセンスやサポート体制、個別機能の違いなどを考慮して、自分で選択しなければならないのです。

この章では、なぜそんな状況になったのかという背景をはじめとして、どんなJDKディストリビューションがあるのか、どういう観点で選べばいいのかなどが、具体的なJDKの名前を挙げながら紹介されています。各JDKの違いとか、事情を知っている人間が見てもややこしい。新しいプロジェクトに着手する際には、とりあえず手元に置いておきたい情報源になります。

第3章 - Java EE/Jakarta EEってどうなってるの?ってちょっとでも思ったらこれを読もう

著者は @khasunuma
前半は、エンタープライズJavaについて、これまでの成り立ちから、Java EEJakarta EEになった経緯までの解説。Java EEに興味がある人にとっては釈迦に説法的な内容にも感じられましたが、これまでの変遷をいま一度おさらいした上でJakarta EEに臨もうという人には非常に良いサマリーになっていると思います。
後半はJakarta EEについて。Jakarta EEで提供されるコンポーネントAPI単位で紹介されているので、全体像を把握するのはとても良いです。特にJava EE 8とJakarta EE 8の対照表は要チェック。Jakarta EE 9以降についてはさらっと紹介程度ですが、これは現時点ではまだ不透明な部分が多いので仕方ないです。

第4章 - そしてMicroProfileの動向もおさえておこう

著者は第4章と同じく @khasunuma
MicroProfileはJava EEをベースとしたマイクロサービス向けのAPIセットですが、これが生まれた経緯や、具体的なAPIなどについて紹介されています。全体像を掴むにはいいですが、Java EE/Jakarta EEとの違いや、ユースケースの違いなどが、もっと分かりやすく比較されているともっと良かったかなと思います。

第5章 - 最近なにかと話題のGraalVMについて知りたいならここ

著者はJVMになりたい男こと @jyukutyo
GraalVMというとネイティブイメージ生成の部分で話題に上ることが多い印象がありますが、実際にはそれだけではなくて、マルチ言語基盤や、高性能なJITコンパイラなど、様々な顔を持った極めて汎用的なツールになっています。なので「GraalVMとは」ということを簡潔に説明するのはなかなか難しいのですが、この章では少ないページ数でそのあたりをわかりやすく説明してくれています。具体的な使用例が掲載されている点も、初めて触る人にとってはイメージが掴みやすくて良いと思いました。

第6章 - そろそろ軽量フレームワークも使ってみようかな、という人のための章

著者は @kencharos
Javaのコア機能から少しはずれて「軽量フレームワーク」という点にフォーカスを当てている辺り、ほかの章とは毛色が違うかなと感じました。内容は、近年の動向から軽量フレームワークが登場した経緯や、押さえておくべき機能の概要を解説した上で、代表例としてタイトルにもあるMicronautとQuarkus、そしてHelidonという3つのフレームワークを紹介しています。
あくまでも第三者のユーザとしての目線されていて、強みは何かみたいな話というよりは、実際に使ってみるためのチュートリアル的な内容としてまとまっています。もう少し選択する上での基準みたいな話があってもよかったかなという感じもありますが、軽量フレームワークに触れる第一歩としては非常に良い参考文献になると思います。

*1:正式な発売日は2020年3月13日なので、本エントリーを書いた時点ではまだ先行販売期間でした。

Eclipse FoundationがJakarta EEプロジェクトに関するサーベイを実施中

去る2017年9月、Oracleはこれまで同社が主導していたJava EEの仕様策定および開発をEclipse Foundationに移行することを発表しました。
それに伴ってEclipse Foundationが新名称を決める投票を実施し、その結果をもって、今後は「Jakarta EE」の名称で開発が行われることが正式に決定しています。
https://mmilinkov.wordpress.com/2018/02/26/and-the-name-is/

現在Eclipse Foundationでは、今後プロジェクトを進めるにあたっての開発者向けのサーベイを実施中です。
Jakarta EE Developer Survey 2018

ごく簡単なアンケートです。期限は2018年3月30日11時59分(太平洋夏時間、日本時間では4月1日3時59分)まで。今後注力していくターゲットを考える上での重要な手掛かりになると思われるので、積極的に参加することをおすすめします。

GlassFish Server 3.1リリース

JavaアプリケーションサーバであるGlassFishの最新版、「GlassFish 3.1」が正式リリースされました。馴染みのあるオープンソース版は「GlassFish Server 3.1 Open Source Edition」というのが正式名称になります。下記サイトよりダウンロードできます。
GlassFish Server 3.1 Final

「Full Platform」にはJava EE APIのフルセットが搭載されています。「Web Platform」の方には、Java EE APIの中からWebアプリケーション開発に関連するAPIのみが含まれています。GlassFish Server 3.1にはOSGiベースのマイクロカーネルアーキテクチャが搭載されているので、Web Platformを選択した場合でも、後から簡単にFull Platformに変更することが可能です。したがってフル機能を必要としない場合には、Web Platformからはじめるのがスマートでいいかもしれません。

JSR 299: Web Beansの参照実装、初のベータ版リリース

Seam Frameworkの下で開発が進められているJSR 299: Web Beansの参照実装ですが、先週、初のベータ版が公開されました。
http://seamframework.org/WebBeans
本リリースについては開発者の一人であるPete Muir氏のブログが詳しいです。
ちなみにWeb BeansにはWeb Beans: Java Contexts and Dependency Injectionというリファレンスガイドが用意されているのですが、Muir氏によると現在は英語の他にドイツ語、韓国語、中国語(繁体字)、スペイン語、イタリア語に翻訳されているそうです。日本語も加わらないかなあ。

JSR 299: Web Beansの参照実装、初のベータ版リリース

Seam Frameworkの下で開発が進められているJSR 299: Web Beansの参照実装ですが、先週、初のベータ版が公開されました。
http://seamframework.org/WebBeans
本リリースについては開発者の一人であるPete Muir氏のブログが詳しいです。
ちなみにWeb BeansにはWeb Beans: Java Contexts and Dependency Injectionというリファレンスガイドが用意されているのですが、Muir氏によると現在は英語の他にドイツ語、韓国語、中国語(繁体字)、スペイン語、イタリア語に翻訳されているそうです。日本語も加わらないかなあ。

JSR 316のパブリックドラフトが承認投票を通過

Java EE 6の仕様であるJSR 316のパブリックドラフトがECによる承認投票を賛成多数で通過しました。反対はApacheのみ。ただし、ライセンスの問題については他のいくつかの団体もApacheと同様の意見を表明しています。
http://jcp.org/en/jsr/detail?id=316

OpenJPA 2.0 iteration 3リリース

OpenJPA 2.0 iteration 3がリリースされました。OpenJPAはApache傘下のプロジェクトで開発が進められているJava Persistence API 2.0の実装です。2008年10月31日時点でのJSR 317のドラフトをベースにしているとのことですが、新しいJPQLやCriteria APIをサポートするなど、Public Draftにもきっちり追従しているようです。
OpenJPA 2.0 iteration 3 is complete - OpenJPA - Apache Software Foundation

ちなみにJPA 2.0の正式な参照実装にはEclipseLinkが採用されることになっています。先日のOpen WebBeansもそうですけど、Apacheは参照実装とは並行して独自の実装を進めていく方向のようですね。ライセンス問題でJSRの承認投票に軒並み反対票入れてるのはどうかと思いますが(個人的には、それと仕様は別問題として扱うべきだと思う)、いずれにせよ基本となる仕様さえ守られるのなら選択肢が増えるのはいいことかな。