派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

知っておきたいJavaの話:Javaとは何か?

3月21日にJava 20がリリースされました。

と書くと「え?もうJava 20?」と驚く人もいるんではないでしょうか。

Javaは2018年3月にリリースされたJava 10からバージョンアップに対する考え方が変わって、毎年2回バージョンアップするようになっています。リリースまでの間隔が3年あったJava 8やJava 9と比べると1回のバージョンアップでの新機能は少ないですが、着実に変化を続けています。

しかしながら、実際に現場で使うJavaのバージョンをほいほいと上げていくことは難しく、Java 8を使う現場にいる人も多いのではないでしょうか。もしかするとJava 7を使っているという人もいるかもしれません。

そうすると、バージョンアップを傍目に見ながら、縁がないものとして目の前の業務に没頭しがちになります。ただ、直接新しい機能を使わなくても、その機能の考え方には役に立つものも多くあります。

この連載では、古いバージョンを使っているとしても役に立つ新しいバージョンの話や、入門書やブログなどであまり書かれていない基本的な話など、知っておきたいJavaの話をまとめていこうと思います。今回は初回ということで「Javaとは何か」をご紹介します。

【筆者】きしだ なおき さん
九州芸術工科大学 芸術工学部 音響設計学科を満期退学後、フリーランスでの活動を経て、2015 年から LINE Fukuoka株式会社勤務。著書に、『プロになるJava 』(共著、技術評論社)、『みんなのJava OpenJDKから始まる大変革期! 』(共著、技術評論社)、『創るJava[改訂第3版]』(マイナビ)など。

Javaって有償化されたんじゃないの?

最初に、気になっている人や誤解をしている人もいるかもしれない、Java有償化の話題をとりあげます。結論から言えば、今でもJavaは無償で自由に使うことができます。そして、Javaは確かに有償化されています。

2017年にバージョンアップの方針の変更と同時に、Javaを有償化する話が出て騒ぎになりました。実際にOracle社のサイトでダウンロードできるJavaを使ってWebサービスを運用する場合には、有償のライセンスが必要になります。

しかし、Javaで書いたプログラムでWebサービスを運用するときに、Oracle社のサイト以外で配布されているJavaを使うことも可能で、こちらは無償のものが多いです。そのため、今でもJavaは無償で自由に使うことができると言えます。

Javaとは何か

OracleのJavaとかOracle以外のJavaとか、わかりにくいですね。

この話をするためには「Javaとは何か」を説明する必要があります。Javaが指すものには次の4つが考えられるので、順に説明していきましょう。

1.商標としてのJava

「Java」はOracle社の商標です。勝手に商品名などに使うことはできません。

ここで「JAVA」ではないことに注意してください。履歴書やブログなどに「JAVA」と書いてしまうとJava経験が浅いように見えてしまいます。

少し前までjava.comには「あなたとJAVA」と書いてありましたが、これはもともと「YOU + JAVA」という標語であったものを日本語訳したものです。英語では強調のためにすべてを大文字で書くという文化があって、キャッチフレーズを大文字だけで書くということがありますが、それを大文字のまま日本語版サイトにもってきていたわけですね。今はjava.comのサイトからはJAVAという表記はなくなっています。

2.仕様としてのJava

Javaは元々Sun Microsystemsという会社で生まれましたが、広く使われるために多くの会社が関わって開発されてきました。

そこで、いろいろな会社が開発する製品の共通の仕様としてJavaを定義して、その定義に従ったプログラムを作ればどの製品でも動かすことができるということになっていました。

Javaの仕様として代表的なものに、プログラムを記述するためのJava言語、Java言語から使う共通の部品になる標準ライブラリ、そして作ったプログラムを動かすためのJava仮想マシンがあります。

これらのJavaの仕様は、いままではJSR(Java Specification Requests)としてまとめられて委員会形式で審査が行われて、参照実装(Reference Implementation: RI)を経て正式にリリースされていました。

けれども、多くの実装で共通に使えるようにするため、核となるような機能だけで不便であったり、逆に一部でしか使わないような機能がたくさんあってわかりにくかったり、理想を追いすぎて現実的ではなかったり、そしてその仕様をまとめるために時間がかかって時代遅れになるという欠点がありました。

今では、先にまず実装を行って、ある程度動くものをJEP(JDK Enhancement Proposal)としてまとめて仕様にしていくという手順になっています。

Memo
ところでJEPは元々はJava Enhancement Proposalでしたが、Oracleからの独立性を高めるため「Java」という商標を使わないJDK Enhancement Proposalになっています。
JEPはこちらにまとめられています。英語ですが、自動翻訳で概要を見てみると今後出てくる機能がわかっておもしろいと思います。
https://openjdk.org/jeps/0

3.実装としてのJava

元々はひとつの仕様をもとに複数の実装が行われていたJavaですが、現在のように複雑になったシステムの開発は難しいため、実用的なJava実装はひとつだけになっています。

そのひとつだけのJavaは、OpenJDKとしてオープンソースで実装されています。
https://github.com/openjdk/

ただ、GitHubには基本的にはソースコードしかありません。実際にプログラムを動かすには、ビルドされた実行ファイルが必要です。このとき、個人的に手元で動かすだけであればソースコードをダウンロードしてbuildコマンドを実行すればいいだけです。

けれども、業務で動かすプログラムというのは利用者のデータ処理や取引、コミュニケーションを確実に行える必要があります。そうすると、実際の環境でちゃんと正しく動くということが確認された実行ファイルが必要になります。

そこで、Oracle社をはじめさまざまな企業や団体が、OpenJDK上のソースをビルドしてテストを行ったディストリビューションを配布しています。

冒頭で書いた「Javaが有償化された」というのは、Oracle社の提供するJavaディストリビューションが有償化されたということになります。また「Javaは無償で自由に使うことができる」というのは、無償で使えるJavaディストリビューションを使うことができるということです。

Memo
そうなると「ではどのディストリビューションを使えばいいんだ!」という話になりますが、長くなるので次回説明したいと思います。
ひとつだけ挙げるとすれば、サイトやインストールの簡単さからAdoptiumが配布するTemurinをお勧めします。
https://adoptium.net/

4.技術エコシステムとしてのJava

最後に技術エコシステムとしてのJavaという話をしたいと思います。

エコシステムというのは、生態系のことですが、この場合は技術を維持発展させるために依存しあいながら活動を行う企業や団体、個人、そこから生まれるプロダクトを含めた環境のことです。

開発技術というのは、仕様や実行ファイルがあればいいというものではありません。実際の開発では標準ライブラリでは足りないことも多いので、標準以外にもさまざまなライブラリを使います。そしてライブラリがあったとしても、その存在を知られなくてはだれも使いません。技術を紹介したり解説したりするメディアが必要になります。

そしてそもそも、技術を使うエンジニアがいなければ、開発技術に意味がありません。エンジニアがその技術を使ってプロダクトを作ってこそ意味があるわけです。

そして、エンジニアが実際に使って意見や要望を出すことでよりよい技術になっていきます。実際に技術を使う人がいるということが改善のモチベーションにもなります。また、そのようなエンジニアが集まって意見交換を行うコミュニティも重要です。

そういったさまざまな企業や個人が相互に依存しながら技術を維持・発展させていくエコシステムとしてJavaがあります。

この連載もそのエコシステムのひとつであり、この記事をいま読んでいるあなたもエコシステムの重要な一部ということになります。そういったJavaのエコシステムがうまくまわるような情報を、この連載で提供できればいいなと思っています。