✏️

Javaの歴史と仕様概要

2024/09/30に公開

こんにちは、$@(ダラ~っと)です(๑Ò﹃ Ó๑)ゝ

はじめに

諸般の事情で、Javaの案件に携わり続けることになったので、基本的なところから勉強しなおそうかと思い立ちました。
今更!?ってことが多いと思うところもあるだろうけど、備忘録がてらストックしていこうと思います。

何がわかる?

  • Javaの歴史(概要)
  • Javaの仕様

Javaの歴史(概要)

Javaの歴史を時系列でまとめると、以下のようになります。

時系列

  • 1995年 - Java 1.0 リリース
  • 1998年 - Java 2(J2SE、J2EE、J2ME)の登場。JCP設立
  • 1999年 - 最初の JSR 公開
  • 2006年 - Java EE 5 リリース
  • 2009年 - Oracle が Sun Microsystems を買収
  • 2017年 - Java EE が Eclipse Foundation に移行、Jakarta EE の誕生
  • 2018年 - Jakarta EE 8 リリース
  • 2020年 - Jakarta EE 9 リリース(パッケージ名の変更)
  • 2022年以降 - Jakarta EE 10 リリース、Java SE も進化中

1. Javaの初期開発と標準化の開始(1990年代)

  • 1995年:

    • Java 1.0 リリース
      • Sun MicrosystemsがJavaをリリースし、Webアプレットとポータブルコードが注目される。
    • Java API が標準化され、最初のJava仮想マシン(JVM)もこの時期。
  • 1998年:

    • Java 2 プラットフォーム(J2SE、J2EE、J2ME)へ。
      これにより、エンタープライズ向けの Java 2 Enterprise Edition(J2EE) が登場し、サーバーサイドのJavaアプリケーション開発が本格化。

2. JSR(Java Specification Request)の導入とJCP(1990年代後半〜2000年代前半)

  • 1998年:

    • Java Community Process(JCP) が設立され、Javaの進化や標準化をコミュニティベースで管理するプロセスが導入。JSR(Java Specification Request)を通じて新しい仕様や機能が提案され、議論される仕組みが整う。
  • 1999年:

    • 最初のJSRが公開され、Javaの公式な仕様策定が開始される。JSRによって開発された新しい仕様は、その後 参照実装(RI)技術適合キット(TCK) によって検証される。

3. Java EEの発展とエンタープライズ仕様の標準化(2000年代)

  • 2000年〜2006年:

    • J2EE 1.2 から J2EE 1.4 がリリースされ、エンタープライズ向けJavaの普及が進む。特に、EJB(Enterprise JavaBeans)Servlet APIJMS(Java Message Service) など、サーバーサイド技術が進化。
  • 2006年:

    • Java EE 5 リリース。依存性注入を管理する CDI(Contexts and Dependency Injection) の導入や、Java Persistence API(JPA) が加わり、Java EEの標準化がさらに進展。

4. Javaの商標とJakarta EEへの移行(2010年代)

  • 2009年:

    • OracleがSun Microsystemsを買収し、Javaの商標や技術資産がOracleに移行。OracleはJCPの主導的な役割を引き継ぎ、Javaの開発を続ける。
  • 2017年:

    • Java EEがEclipse Foundationに移管され、Java EEからJakarta EEへのブランド変更が行われる。これにより、エンタープライズ向けJavaの仕様がEclipse Foundationの下で進化することになる。

5. Jakarta EEの登場と進化(2018年以降)

  • 2018年:

    • Jakarta EE 8 リリース。Java EE 8をベースに、Eclipse Foundationが新たな開発を進める。基本的な仕様はJava EE 8と同等だが、新しい仕様策定が活発化。
  • 2020年:

    • Jakarta EE 9 リリース。Javaパッケージ名の移行が行われ、javax.* から jakarta.* に変更。これにより、Jakarta EEとJava SEが技術的に独立した道を歩む。

6. 現在と未来(2020年代〜)

  • 2021年〜現在:
    • Jakarta EE 10がリリースされ、さらなるクラウドネイティブ対応や、マイクロサービス向けの拡張が進む。
    • Java SE も引き続き進化し、定期的なアップデート(例:Java 17 LTS)を提供している。
    • Jakarta EE も、JCPとJSRをベースに、よりモダンで拡張可能なエンタープライズ仕様としての発展を続ける。

Javaの仕様

Javaの技術仕様の策定プロセス

Java全体の標準化プロセスは、JCPが担っており、JSR、RI、TCKという要素を通じてJavaの仕様が策定、実装、検証されます。

JCP(Java Community Process):Javaの標準化プロセス全体を管理するフレームワーク
├─ JSR(Java Specification Request):新しい技術仕様を提案する文書
├─ RI(Reference Implementation):JSRで定義された仕様の参照実装
└─ TCK(Technology Compatibility Kit):仕様に対する互換性を検証するためのテストツール
  1. JCP(Java Community Process)

    • JCPの目的は、Javaの一貫性、互換性、品質を維持しながら、オープンで協力的な環境のもと、Javaを進化させることです。
    • JCPは、Javaの技術仕様を策定し、標準化するためのプロセスです
    • 1998年に導入され、Javaの進化を管理するために設立されました
    • Javaプラットフォーム(Java SE、Java EE、Java ME)全体の標準化を行うための枠組みで、コミュニティベースで運営されています
    • Javaに新しい技術や機能を追加する際には、このプロセスを通じて提案され、討議、承認され、最終的に標準化されます
  2. JSR(Java Specification Request)

    • JSRの役割は、Javaの技術標準を策定するための出発点であり、提案書として作成され、承認されたJSRに基づいて、技術仕様が正式に標準化されます。
      • 例えばJava SEの新バージョンに含まれる機能や拡張、あるいはJava EEやJava MEに新しいAPIを追加するためのプロセスを公式に開始するための提案書です。
    • JSRは、Javaプラットフォームに関する新しい技術や仕様の提案書です
    • JCPを通じて提案され、技術的な変更や拡張を行うための公式な文書です
    • JSRは、具体的な技術要件や新しいAPIの定義、既存の仕様の改善提案などを詳細に記載し、JCPコミュニティで審議されます
  3. RI(Reference Implementation)

    • RIの目的は、JSRで定義された仕様に基づいて新しい機能や技術が正しく実装されることを保証することであり、これによって他の開発者がその仕様に基づいた独自の実装を開発できるようになります
    • RIは、JSRで提案された新しい仕様や技術の動作例として実装される参照実装です
    • 新しい仕様がどのように動作するかを示すために、RIがJCPの一部です
    • RIは、新しい技術仕様が実際にどのように動作し、Javaプラットフォームに適用されるかを確認するための標準的な実装です
  4. TCK(Technology Compatibility Kit)

    • TCKの役割は、RIを含む全ての実装が、JSRで定義された仕様に従って正しく動作することを確認するためのツールとして機能することです
    • 互換性のある実装が作られることで、Java全体としての一貫性が維持され、異なるベンダーのJava実装でも共通の仕様に基づいた動作が保証されます
    • JSRで定義された仕様に対する互換性を検証するためのテストスイートです
    • TCKは、新しい仕様や技術がJavaプラットフォームの他の部分と互換性を保っているかどうかを検証し、仕様に準拠していることを保証されます

Javaの仕様

Java
└─ Java SE(Standard Edition)
    ├─ JDK(Java Development Kit)
    │   ├─ JVM(Java Virtual Machine)
    │   ├─ API(Application Programming Interface)
    │   └─ JLS(Java Language Specification)
    │
    ├─ JavaFX(外部モジュールとして利用可能なリッチUIフレームワーク)
    │
    ├─ Java EE(Enterprise Edition)→ Jakarta EE(Jakarta Enterprise Edition)
    │   ├─ Servlet(Web API)
    │   ├─ EJB(Enterprise JavaBeans)
    │   ├─ CDI(Contexts and Dependency Injection)
    │   ├─ JPA(Java Persistence API)
    │   ├─ JMS(Java Message Service)
    │   ├─ JSF(JavaServer Faces)
    │   └─ JAX-RS(Java API for RESTful Web Services)
    │
    └─ Java ME(Micro Edition)
         ├─ CLDC(Connected Limited Device Configuration)
         └─ MIDP(Mobile Information Device Profile)

以下の形式で、指定された要素の説明を一覧表にまとめました。

要素1 要素2 要素3 説明
Java SE Java Standard Edition。Javaの基本的なプラットフォーム。
Java SE JDK Java Development Kit。Javaプログラムの開発および実行に必要なツールセット。
Java SE JDK JVM Java Virtual Machine。Javaバイトコードを実行するための仮想マシン。
Java SE JDK API Application Programming Interface。Javaで標準的に利用できる機能の集合。
Java SE JDK JLS Java Language Specification。Java言語の文法や仕様を定義する公式文書。
Java SE JavaFX 外部モジュールとして利用可能なリッチUIフレームワーク。GUIアプリケーションの開発に利用。
Java SE Java EE→Jakarta EE エンタープライズアプリケーションのためのJavaの仕様。
Java EE→Jakarta EE Servlet Web API。WebアプリケーションのHTTPリクエストとレスポンスを処理するためのAPI。
Java EE→Jakarta EE EJB Enterprise JavaBeans。エンタープライズレベルのビジネスロジックを提供するコンポーネントモデル。
Java EE→Jakarta EE CDI Contexts and Dependency Injection。依存性注入のためのAPIで、オブジェクトのライフサイクルを管理。
Java EE→Jakarta EE JPA Java Persistence API。オブジェクトリレーショナルマッピング(ORM)を提供するAPI。
Java EE→Jakarta EE JMS Java Message Service。メッセージングプロトコルを使用してコンポーネント間の通信を行うためのAPI。
Java EE→Jakarta EE JSF JavaServer Faces。Webアプリケーションのユーザーインターフェースを作成するためのフレームワーク。
Java EE→Jakarta EE JAX-RS Java API for RESTful Web Services。RESTful Webサービスを構築するためのAPI。
Java SE Java ME Micro Edition。リソースが限られたデバイスや組み込みシステム向けの軽量Java仕様。
Java ME CLDC Connected Limited Device Configuration。Java MEでの軽量デバイス向け構成。
Java ME MIDP Mobile Information Device Profile。モバイルデバイス向けのAPIセットを提供。

JDKとJREの違い

JDK(Java Development Kit)JRE(Java Runtime Environment) は、どちらもJavaプログラムの開発や実行に関連していますが、役割が異なります。

1. JDK(Java Development Kit)

  • 用途: Javaプログラムの開発に必要なツールを提供します。
  • 構成:
    • JRE(Java Runtime Environment)を含む。
    • Javaコンパイラ(javac): Javaソースコードをバイトコードにコンパイルするためのツール。
    • デバッガ: プログラムのバグを調査・修正するためのツール。
    • その他の開発ツール: ドキュメント生成ツール(Javadoc)やアーカイブツール(jar)など。

2. JRE(Java Runtime Environment)

  • 用途: Javaプログラムを実行するための環境を提供します。
  • 構成:
    • JVM(Java Virtual Machine): Javaバイトコードを実行するための仮想マシン。
    • 標準ライブラリ: Javaプログラムで使用される標準のAPIやクラスライブラリ(例:コレクション、I/O、ネットワーク関連のクラスなど)。

主な違い

比較項目 JDK(Java Development Kit) JRE(Java Runtime Environment)
用途 Javaプログラムの 開発 および実行 Javaプログラムの実行
含まれる要素 JRE、コンパイラ、デバッガ、開発ツールなど JVM、標準ライブラリ

おわりに

Javaの歴史と仕様部分のざっくり概要をベースに、色々と積み重ねていけたらと思います。
今までは、仕様のプロセスなどの根底部分は、気にしてなかったですがこれからは全体的に知識を蓄えていけたらなと思います。

Discussion