Java 9のProject Jigsawとは?モジュールシステムの概要とメリットを解説
Java 9のProject Jigsawとは
Project Jigsawの最大の目的は、Java 9にモジュール(Modularity)という概念を導入し、開発者がモジュールを作成できるようにするとともに、その仕組みをJDK自体にも適用することでした。これにより、Javaプラットフォームは従来よりも柔軟で安全、かつスケーラブルな構造へと生まれ変わりました。
モジュラリティ(Jigsaw)がもたらす主なメリット
- 強力なカプセル化(Strong Encapsulation):モジュールは、外部利用が許可された部分にしかアクセスできません。module-info.javaファイルでパッケージが明示的にエクスポートされていない限り、そのパッケージ内のpublicクラスであっても外部からはアクセスできなくなります。
- 明確な依存関係(Clear Dependencies):モジュールは、requires句を使って利用する他のモジュールを宣言しなければなりません。この仕組みにより、必要なモジュールだけを組み合わせた小型のランタイムを構築でき、IoTデバイスなどの小規模な環境への展開も容易になります。
- 信頼性の向上(Reliable):実行時エラーを事前に排除できるため、アプリケーションの信頼性が高まります。例えば、必要なクラスが存在せず実行時にClassNotFoundExceptionが発生してアプリが落ちる、といった問題を起動時やビルド時に検出できるようになります。
Jigsawプロジェクトを構成する主なJEP(JDK Enhancement Proposal)
JEP 200 – モジュラーJDK
Java Platform Module System(JPMS)を活用し、JDKをビルド時・コンパイル時・実行時に組み合わせ可能な一連のモジュールへと分割します。
JEP 201 – モジュラーソースコード
JDKのソースコード自体をモジュール単位に再編成し、モジュールをコンパイルできるようビルドツールを更新します。
JEP 220 – モジュラーランタイムイメージ
JREおよびJDKのランタイムイメージを再構築してモジュール構造に対応させ、セキュリティ・パフォーマンス・保守性を向上させます。
JEP 260 – 内部APIの大部分をカプセル化
JDK内部の非公開APIの多くを、直接アクセスやリフレクション経由でも利用できないようにします。変更される可能性のある内部APIへの依存は大きなリスクとなるため、これらをモジュール内部に閉じ込め、正式にサポートされたAPIのみを公開対象とします。
JEP 261 – モジュールシステム
JVM、Java言語仕様、標準APIを拡張・変更することで、Javaのモジュールシステム仕様そのものを実装します。Jigsawの中核となるJEPです。
JEP 282 – jlink(Javaリンカー)
モジュールとその依存関係をまとめてパッケージングし、アプリケーションに必要な最小限の要素だけで構成された小型ランタイムを生成できるようにします。
module-info.javaの記述例
モジュールの定義は、ソースコードのルートに配置するmodule-info.javaファイルに行います。以下は基本的な記述例です。
module com.example.myapp {
requires java.sql;
exports com.example.myapp.api;
}このように「requires」で依存モジュールを宣言し、「exports」で外部に公開するパッケージを指定します。Project Jigsawの導入によって、Javaアプリケーションはより堅牢で管理しやすいものになりました。
-
JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説
StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T
-
JavaのArrayIndexOutOfBoundsExceptionとは?発生原因と対処法を解説
配列とインデックスの基本 配列(Array)とは、同じ型の要素を固定サイズで順番に格納するためのデータ構造(コンテナ/オブジェクト)です。配列のサイズ(長さ)は生成時に決定され、後から変更することはできません。 配列内の各要素の位置は「インデックス(添字)」と呼ばれます。Javaの配列は0始まりのため、最初の要素はインデックス0、2番目の要素はインデックス1、というように順に番号が割り当てられます。 配列の各要素へは、「配列名[インデックス]」という形式の式を使ってアクセスします。 System.out.println(myArray[3]); // 1457 が出力される たとえばサイズ7