Twitterからの引用)目玉は新概念のモジュールです。モジュールはある意味破壊的な変更でもありつつ既存のパッケージの仕様の問題を解決する上で非常に効果的な新概念だと感じています。今回はこのモジュールを理解する上で役に立った情報を私なりに整理してご紹介します。モチベーション私の担当プロジェクトでは社内向けのAPIと管理システムがJavaで組まれており10年以上運営しています。運用上の問題として、根幹となる共通機能は単体テストコードがあまり充分ではなくおまけにライブラリのJarの依存関係が非常に複雑になっているため、変更時に予期せぬ影響が発生しがちです。モジュールという新しいカプセル化と依存関係の定義方法です。ついてはモジュールという新概念をどう適用するかが非常に重要になってきます。本稿ではこの課題について1つの指針を紹介したいと思います。流れは以下の通りです。新機能のまとめJava9の新機能は例によってとても多いです。紹介記事がたくさんあるため、1番コンパクトに特徴的な10点を綺麗にまとめたスライドを紹介します。細かい機能でもかなり改善点があるためまだよく調べていない方はぜひご一読ください。bitter_fox本稿では非常にインパクトの大きい変更であるモジュールについてだけ扱います。さんのプレゼン動画です。非常に平易な英語で英語字幕もあります。60分とやや長めです。サイトから近い内容のものを見つけましたので以下にリンクを貼っておきます。http://openjdk.java.net/projects/jigsaw/talks/adv-modular-dev-j1-2015.pdf今回はこの動画のエッセンスを日本語で紹介したいと思います。これが本稿の中心的な内容です。モジュールについて基本的なことを簡単に確認します。そのメリットは、スコープをより細分化して定義しカプセル化を強化できることと、依存関係を明示的に定義しコンパイル時にチェックできることと言えます。記載することで定義できます。導入に既存コードの変更は必要ありません。以前ではリフレクションを使えば詳細にアクセスが可能でした。モジュールの定義ファイルを作成すると完全に隠蔽できるようになります。カプセル化の強化の理解に、以下がとても参考になります。(これは先ほどの動画内のプレゼン資料の一部です。範囲がさらに詳細にきめ細かく設定できるようになりました。以下のように細分化されました。パッケージは外から参照可能でした。選択せざるを得ませんでした。モジュール化はパッケージの親ディレクトリ以下全体を制御し、パッケージを読むことができる範囲を特定のモジュールにのみ限定することができます。カプセル化強化の最たるメリットはプレゼン中に紹介されたこの図です。ヴァージョン1に依存しています。ヴァージョン2に依存していることがわかりました。クラスパス内に2つ含める必要が出てきてしまい、コンパイルが通らない(または実行できたがどっちが読まれているのかわからない)状況が発生します。)このバージョン混在問題はモジュール化によって解決できるようになります。次のメリットは「信頼できる依存関係」です。あるケースを考えてください。抜けていても通ります。ないと実行時に例外が発生するケースがありました。コンパイル通っているのになんなんだよっていう。モジュールの記述を行うことでこうした依存関係をすべてコンパイル時に網羅的にチェックできます。)長年の悩みがついに仕様的に解決できるようになるわけです!ワクワクしてきませんか?なんかモジュールいけるんじゃないかって思えてきませんか?具体的な議論に入ります。基本的なサンプルコード完全な初学者に向けて、以下のサイトからの引用で1番簡単なコードを用いてモジュールの使い方を紹介します。ここは既に最低限の理解がある方は読み飛ばしても大丈夫です。そのファイルの中でパッケージの公開状態を定義します。モジュール情報ファイル。