JRE(ジェイアールイー)とは | 意味や読み方など丁寧でわかりやすい用語解説
JRE(ジェイアールイー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ジャバ実行環境 (ジャバジッコウカンキョウ)
英語表記
JRE (ジェイアールイー)
用語解説
JREはJava Runtime Environmentの略称であり、Javaプログラミング言語で開発されたアプリケーションを実行するために不可欠なソフトウェア環境である。Javaの最大の特徴である「Write Once, Run Anywhere(一度書けば、どこでも動く)」という思想を実現する上で、中心的な役割を担っている。Javaで作成されたプログラムは、特定のオペレーティングシステム(OS)やCPUが直接解釈できるマシン語ではなく、バイトコードと呼ばれる中間形式のファイルとして配布される。このバイトコードはプラットフォームに依存しないため、Windows、macOS、Linuxといった異なる環境でも同じプログラムを動作させることが可能となる。しかし、バイトコード自体はコンピュータが直接実行できないため、各OS上でバイトコードを解釈し、その環境に適したマシン語に変換して実行する仕組みが必要となる。その役割を果たすのがJREである。したがって、システムエンジニアを目指す者にとって、Javaアプリケーションがどのようにして様々な環境で動作するのかを理解する上で、JREの概念は基本中の基本と言える。エンドユーザーの視点では、特定のJava製ソフトウェアを動かす際に「Javaをインストールしてください」と表示され、意識せずにJREをインストールした経験があるかもしれない。
JREは、主に三つの主要なコンポーネントから構成されている。その中核をなすのが、Java仮想マシン(JVM: Java Virtual Machine)である。JVMは、その名の通り、ソフトウェアによって仮想的に構築されたコンピュータであり、Javaバイトコードを実行するためのエンジンとして機能する。プログラムが実行される際、JVMはバイトコードを一行ずつ読み込み、それを実行環境のOSやハードウェアが理解できるネイティブなマシン語に変換(この処理をジャストインタイムコンパイルと呼ぶこともある)しながら実行する。このJVMがOS間の差異を吸収する層として機能するため、開発者はOSごとの細かな違いを意識することなく、一度作成したプログラムを様々なプラットフォームで動作させることができる。また、JVMはメモリ管理も自動で行う。特にガベージコレクションという機能は、プログラム内で不要になったメモリ領域を自動的に検出し、解放してくれるため、開発者がメモリリークといった厄介な問題に悩まされるのを防いでくれる。
二つ目の構成要素は、Javaクラスライブラリである。これは、プログラミングで頻繁に利用される基本的な機能をあらかじめ部品(クラス)として集めたもので、Java API(Application Programming Interface)とも呼ばれる。例えば、ファイルの読み書き、ネットワーク通信、文字列操作、データ構造(リストやハッシュマップなど)、グラフィカルなユーザーインターフェース(GUI)の作成といった、多くのアプリケーションで共通して必要となる機能が標準ライブラリとして提供されている。開発者はこれらのライブラリを利用することで、複雑な機能をゼロから実装する必要がなくなり、効率的かつ高品質なアプリケーション開発が可能になる。JREには、これらのライブラリが実行時に利用できる形で含まれている。
三つ目は、上記以外にJREの動作を支えるための設定ファイルやプロパティファイルなどのサポートファイル群である。これらが一体となってJavaプログラムの実行環境を形成している。
初心者が混同しやすい用語に、JRE、JDK、JVMがある。これらの関係を正確に理解することは重要である。JDK(Java Development Kit)は、Javaアプリケーションを「開発」するためのソフトウェアパッケージである。JDKには、Javaのソースコード(.javaファイル)をバイトコード(.classファイル)に変換するコンパイラ(javac)や、プログラムのバグを発見し修正するためのデバッガ(jdb)など、開発に必要なツール一式が含まれている。そして重要な点として、JDKはJREを内包している。つまり、JDKをインストールすれば、開発したプログラムをその場で実行し、テストすることも可能である。一方、JREはJavaアプリケーションを「実行」することに特化した環境であり、JDKからコンパイラなどの開発用ツールを取り除いたものである。したがって、開発者はJDKを使用し、アプリケーションの利用者(エンドユーザー)はJREをインストールするというのが基本的な役割分担となる。そしてJVMは、前述の通りJREの一部であり、プログラム実行の心臓部である。この関係は、JDKがJREを含み、JREがJVMを含むという階層構造(JDK ⊃ JRE ⊃ JVM)として捉えると分かりやすい。
Javaアプリケーションを実行する際には、JREのバージョンも重要となる。Javaは継続的にバージョンアップされており、新しいバージョンでは言語仕様の追加やライブラリの機能向上が行われている。あるアプリケーションがJava 17で開発された場合、その実行にはJava 17以降の互換性のあるJREが必要となる。もしJava 8のような古いバージョンのJREで実行しようとすると、必要なクラスやメソッドが見つからずにエラーが発生し、プログラムは動作しない。そのため、使用するアプリケーションが要求するJREのバージョンを確認し、適切な環境を準備する必要がある。
近年、Javaのライセンス体系や配布形態に変化が見られる。特にOracle社が提供するJDKの商用利用が有償化されたことをきっかけに、OpenJDKをはじめとするオープンソースのJava実装の利用が広がっている。また、Java 9で導入されたモジュールシステムにより、アプリケーションに必要なモジュールだけを組み込んだカスタムランタイムを作成できるようになった。これにより、アプリケーション自体に軽量な実行環境を同梱して配布する形態が増え、エンドユーザーが別途JREをシステム全体にインストールする必要がないケースも多くなっている。このようにJREのあり方は変化しつつあるが、Javaプログラムを実行するための環境であるというその本質的な役割は変わらない。