インターネットで「Java se」と検索すると、「Java SEとEEの違い」の他に「Java有償化」などが目に入りますが、Oracle社が公表したロードマップでも2019年からはJavaの仕様がガラリと変わっていることが分かります。
今回の記事ではJava SEとその他のバージョンの違いの他、Oracleが発表したリリースモデルの変更などについて解説していきます。
Java SEとは
Java SEってなんですか?他のJavaとの違いは?
Java APIの一つです。SEとは最も基本的なパッケージを指します。
まず最初にJava SEと他のものについての違いをご説明します。ざっくり言ってしまうと「API」の呼称です。
Javaには「Java SE」「JAva EE」「Java ME」の3種類のAPIがあります。
この3つの違いについては後述しますが、要するにこれらAPIのおかげでJavaでプログラミングしたものを動作させることができるわけです。
APIの違い
先ほどご紹介した3つのAPIについてもう少し掘り下げて紹介していきます。
Java SE
正式名称は”Java Standard Edition”。Java APIはこのSEの冠名があるものが標準のものとなってます。
基本的に必要と思われる機能だけを実装した最低限のAPIです。
Java EE
正式名称は”Java Enterprise Edition”。Java SEに、企業向けのWebアプリケーション開発用の機能を追加したAPIです。
サーバー関係のライブラリなどもこのJava EEには用意されています。
Java ME
正式名称は”Java Micro Edition”。こちらはあまり馴染みのない方が多いのではないでしょうか。
Java SEにモバイルデバイスや組み込み機器で動作するアプリケーションの機能を追加したAPIです。
J2SEやJ2EEという名前なら聞いたことがある方もいらっしゃいますよね。恐らくもう無いとは思いますが、「J2」という冠名がついているAPIはJava SEやJava EEなどの旧名称ですので、どちらでも変わりはありません。Java SEであれば旧名称はJ2SE、Java EEであれば旧名称はJ2EEとなります。
バージョンの違い
バージョンが変わるとどうなりますか?
バージョン毎に新機能が追加されたり開発に係わる仕様が変わったりします。
今ではJava SEも12までリリースされています。
バージョンが変わる毎に色々な仕様が変更されてきましたが、Java 10からはvarを使った型推論などが実装されました。
型推論
この方推論の実装によって、varで定義された変数は、格納した値によってデータ型を指定する必要がなくなりました。
詳しくは以下のようになります。
var list = new ArrayList(); // listはArrayList型と推論される var stream = list.stream(); // streamはStream型と推論される
拡張子の追加
Java 11からはjavaコマンドで拡張子が「.java」のファイルを直接実行できるようになりました(コンパイルしてから実行することも可能です。)。
>java HelloWorld.java
Java SEの有償化について
Oracle社が2017年に発表したリリースモデルにより、2019年4月からJavaに関するライセンスが有償化されました。
この発表を受けたユーザーの間では「今後はJavaが無料で使えなくなる」などの噂も飛び交いましが、実際には次のように変更されました。
長期サポート(Long term Support)の有償化
Java SEの「長期商用サポート(LTS)」が有償化されました。これに伴い商用利用するためにはOracle社とのライセンス契約が必要となります。
Oracle Java SE 8u201は商用利用可能な最後のOracle Java SE 8アップデートです。ただし、Oracle社は4半期毎にアップデートをリリース計画であるため、2019年4月中には新しいOracle Java SE 8アップデートがリリースされる予定です。その際、該当のアップデートで対応した未公表の脆弱性も発表されます。この2019年4月リリースのアップデートを商用利用する場合は、Oracle社とライセンスを取得する必要があります。サポート契約を結ばずにいた場合、Oracle社から高額なライセンス費用を請求される可能性があります。
公式サイトより抜粋
一般ユーザー向けには2007年よりOpen JDKというものが存在しますので、今後も無償で利用することが可能です。
リリースサイクルの短期化
Oracle社は公式サイトで「新機能が追加される6カ月に1回(毎年3月と9月)のフィーチャー・リリースに加え、脆弱性対策などを施したアップデート・リリースを各フィーチャー・リリースに対して2回提供します。」と発表しています。
これは長期商用サポートの有償化とリンクしている部分でもありますが、今まで2年周期だったリリースサイクル(何度かリリース周期に遅れのあったバージョンも存在)が短期間(必ず6ヶ月毎にリリース)で行われるようになります。
機能の追加
従来は機能の追加を目標として掲げていたに過ぎませんでしたが、新たなリリースモデルでは機能追加を固定と発表しています。このことから、今後は確実に何らかの追加機能が実装されるのではないかと予想されます。
- Oracle JDKのLTS版が有償化された
- LTSは3年毎、None LTSは6ヶ月毎のリリースサイクルに変更
- 6ヶ月毎のリリースで必ず何らかの機能を追加
- Open JDKの無料サポートの期間を変更(次期バージョンリリースまで)
今後注意すべき点
この項目では、有償化に伴い今後Javaを使用するにあたっての注意点について説明していきます。
None LTS版に移行する
Open JDKのバイナリはオープンソースライセンスで公式バイナリとして配布されていますので、当然様々なディストリビューターが存在していますし、これらの中には長期無償アップデートを提供している企業もあります。
Oracle JDKを有償化するとの発表がなされたことで、今までOracleJDKを利用していた方は無償版であるOpenJDKに移行することも検討する必要があります。
ただし、None LTS版のサポートが半年と制限されてしまったことで商用利用には難しくなったかもしれませんが、個人利用に限っては特に問題とはならないようにも感じます。
追加機能の内容を確認する
今までもそうでしたが、Javaのバージョンアップに伴う追加機能は重要なものが多くありました。
今後はそうした追加機能のリリースサイクルが6ヶ月になりますので、今までよりも更に速い速度で様々な機能が追加されていきます。
Javaでの開発をされる方は、必ずこの機能に目を通しておく必要が出てきますので、常に新鮮な情報を仕入れるように心がけましょう。
また商用機能と呼ばれるもの(今まで有償で提供されていたOracle JDKの機能)も、JDK 11から無償で利用できるように変更されました。このことから、一般ユーザーも一度Oracle JDKの機能を洗い出してみた方が良いでしょう。
まとめ
Java SEの有償化は世界中のユーザーにとって不安要素でしたが、蓋を開けてみれば意外にも一般ユーザーにとってはメリットの方が多いという結果になりました。
ただし新しいライセンスでは、いかなる場合であっても無償利用は個人利用・開発目的に限るという内容に変更されましたので、商用ベースで利用しているユーザーはOpen JDKのディストリビューションに切り替えるか”Oracle Java SE Subscriptions”の購入を検討する必要が有りますのでご注意ください。
APIとは「Application Programming Interface」の頭文字を繋げた略語です。日本語で書くと「アプリケーションをプログラミングするためのインターフェース」となります。プログラミングにおけるAPIとは、関数やクラスといった場合がほとんどです。