誕生から27年目を迎えたJava
プログラミング言語の
“レガシー言語”
Javaは誰が作っているのか
「Java」
Java言語やJVM、標準で含まれるライブラリなどの仕様は
さて、Javaのプログラムの開発や実行をするためには
現在、JDKの開発を担っているのは
実際の開発で使用するのはJDKディストリビューション
OpenJDKプロジェクトでは、その成果物としてソースコードを公開していますが、これはまだ各自のPCなどで実行できる状態にはなっていません。そこでJavaをサポートしている各ベンダーは、OpenJDKプロジェクトの成果物をベースにした実行可能なJDKのパッケージの提供を行なっています。このような形で各社がリリースしているJDKを
名称 | 提供元 | URL |
---|---|---|
Oracle JDK | Oracle | https:// |
Oracle OpenJDK | Oracle | https:// |
Temurin | Adoptium | https:// |
Amazon Corret | Amazon Web Service | https:// |
Red Hat build of OpenJDK | Red Hat | https:// |
Azul Zulu | Azul Systems | https:// |
Microsoft Build of OpenJDK | Microsoft | https:// |
Liberica JDK | BellSoft | https:// |
SapMachine | SAP | https:// |
この表に載せたJDKはいずれも基本的には無償で利用することができますが、無償利用できる条件やサポート期間などはそれぞれで少しずつ異なるので注意が必要です。特にOracle JDKとOracle OpenJDKの違いについては少し説明が必要かもしれません。
この両者は、いずれもOpenJDKの成果物をベースにしてOracleが実行可能なパッケージとして提供しているJDKディストリビューションであり、中身は実質的に同じものです。大きく異なるのはライセンス体系と無償利用できる範囲です。Oracle OpenJDKはOpenJDKと同じ
ライセンスが異なるのは、オープンソースのプロダクトとして無償提供されているOracle OpenJDKに対して、Oracle JDKはあくまでもOracleによる商用プロダクトという位置付けで提供されているためです。NFTCでは、商用・
他のベンダーでも、Oracle JDKと同様に無償利用できる範囲が制限されていたり、有償でサポート期間の延長や問い合わせ対応などを提供されているケースがあるので、特に商用利用する場合には要件に合ったものを選択するようにしましょう。
バージョンアップの方針とLTS
OpenJDKプロジェクトでは現在、半年に1度、3月頃と9月頃にJDKの新しいバージョンをリリースする方針を採用しています。本稿執筆時点の最新バージョンは2022年3月22日にリリースされたJDK 18で、次のバージョンであるJDK 19は2022年9月20日にリリースされる予定となっています。
OpenJDKでは、各JDKのバージョンのサポート期間を原則として
しかし実際のアプリケーション開発では、半年ごとに毎回バージョンを上げていくのは現実的に難しいというケースもあるでしょう。そこで3年
現在本番環境で利用されているバージョンはJDK 8またはJDK 11でしょう。JDK 8からJDK 11にかけは大幅な仕様変更が加わっているためなかなか移行が進んでいないという課題があります。その一方で、新規の開発ではJDK 11を採用する企業も増えているようです。JDK 17までくるとかなり魅力的な機能が多数追加されているため、次第に移行が進んでいくことが期待されます。
Javaの仕様はどのように決まっているか
現在のJDKは半年ごとに新しいバージョンがリリースされるという話をしましたが、このバージョンアップではバグ修正だけでなく、新しい機能の追加や、現在ある機能の改善といった機能拡張も行われます。このときにどのような機能拡張が行われるのかは、JDKの開発を行なっているOpenJDKプロジェクトによって決められます。
機能拡張を提案するJEP
もう少し詳しく説明すると、OpenJDKプロジェクトにはJDKの機能拡張を提案するJEP
どのバージョンを導入のターゲットにするのかは、重要度や開発の進行状況、他のJEPとの関連などを考慮して決められます。承認されたJEPを見るとターゲットバージョンが記載されているので、それでどのバージョンでどんな機能が導入される予定になっているのかを知ることができます。
これまでに提案されたJEPのリストは次のページで確認することができます。
また、それぞれのバージョンで導入された、または導入される予定のJEPについては、次の各バージョンごとのページで確認できます。
https://
たとえば本稿執筆時点での最新版であるJDK 18では、次に挙げるJEPが追加されました。
- 400:UTF-8 by Default
- 408:Simple Web Server
- 413:Code Snippets in Java API Documentation
- 416:Reimplement Core Reflection with Method Handles
- 417:Vector API (Third Incubator)
- 418:Internet-Address Resolution SPI
- 419:Foreign Function & Memory API (Second Incubator)
- 420:Pattern Matching for switch (Second Preview)
- 421:Deprecate Finalization for Removal
各JEPの詳細ページを確認すれば、機能の概要やターゲットバージョンに加えて、その機能が必要となる動機や基本的な使い方などを知ることができます。
JEPの中には、名称に
Java言語やJVMに関する変更に対しては
PreviewやIncubatorの機能は、プログラムのコンパイル時や実行時に特定のフラグを指定することで使うことができます。ただし、あくまでもプレビュー版であり、正式版になるまでの間に仕様が変更される可能性もあるので注意が必要です。本番環境での使用は推奨さfれていません。
Java SEの仕様策定
さて、JDKの機能拡張がどのように行われるかはわかりましたが、それではその元になるはずの仕様であるJava SEはどのように決まるのでしょうか。
Java SEの仕様策定は、
本来であればまず先にJCPで仕様が決定してから、それに従ってJDKが開発されるのですが、現在は開発速度を優先するために逆の手順が取られるようになっています。すなわち、OpenJDKプロジェクトがJEPをベースとしたプロセスに従って次期バージョンのJDKの開発を進め、それと並行してJCPに仕様の提案を行います。JCPでは、投票によって提案された仕様の承認を行います[3]。
たとえば、Java 18については
このように、Javaの新機能の開発はまずOpenJDKプロジェクトのJEPからスタートします。したがって、最近追加された新機能や、近い将来追加される予定の機能について知りたい場合には、まずはJEPを確認してみましょう。
Jakarta EEの最新動向
エンタープライズJavaの分野では、Jakarta EEの開発が進んでいます。
先ほど少し触れたように、Javaの言語仕様や標準ライブラリの仕様であるJava SEに対して、より大規模なアプリケーション向けの仕様として
現在、業務アプリケーションの開発で広く使用されているJava EE 8がリリースされたのは2017年9月のことです。その1年後の2018年9月に、それまでJava EEの開発を主導していたOracleは、Java EE 9以降の開発を中止してJava EEに関する成果物をオープンソース化することを発表し、その保守と開発を非営利団体であるEclipse Foundationが引き継ぎました。
このときOracleから寄贈された資産には、Java EE関連のAPIや参照実装であるGlassFishだけでなく、Technology Compatibility Kit
Jakarta EEの最初のバージョンであるJakarta EE 8は2019年9月にリリースされました。Jakarta EE 8は、Java EEからJakarta EEへのスムーズな移行を促進するために、Java EE 8と完全な互換性を保つことが優先されています。このために、Jakarta EE 8はJava EE 8とは名称こそ異なるものの、ソースコードの中身はほとんど変更されておらず、まったく同等の機能が維持されています。
Jakarta EE 8に続いて、2020年12月にJakarta EE 9が、2021年5月にはJakarta EE 9.
Jakarta EE 9はもともとJava 11での動作をサポートする予定でしたが、この対応がリリースに間に合わなかったため、ベースとするJavaのバージョンはJava 8になっています。これをJava 11をサポートするようにアップデートしたのがJakarta EE 9.
次期バージョンであるJakarta EE 10は、2022年第2四半期中のリリースを目指して開発が進められていましたが、本稿執筆時点ではまだリリースには至っていません。2022年7月6日時点では、開発メンバーから
Jakarta EE 10における大きな変更点としては、まずサポートされるJavaランタイムの最小バージョンがJava 11になるということが挙げられます。Jakarta EE 10はJava 8では動作しないので注意が必要です。Java 17での実行をサポートするかどうかは実装に依存しますが、Jakarta EE 9.
機能面での大きな変更としては、
新しく追加されるCore Profileは、主にマイクロサービスの開発および実行を対象として、最低限のAPIのみを含んだサイズの小さなプロファイルとなっています。このCore Profileの提供に合わせて、CDI
その他にも、各APIでさまざまな変更や機能拡張が行われています。変更点に関するより詳細な情報は、次のリリースプランのページを参照してください。
Jakarta EE 8から9.