Java9正式リリース
2017年9月にJava9がリリースされました。Java8が2014年3月にリリースされてたので約3年半のメジャーアップデートになりました。
かなり出遅れた感がありますが、勉強メモとしてJava9についてまとめてみることにした。
全ての変更点を網羅できていないので自分が大事だと思った部分のみピックアップしています。
古いOSのサポート終了
Java9からは32bitのOSには提供されなくなりました。
WindowsServer2012以前のOSで32bitのOSで動いているサーバでは要注意です。
まだまだ開発の現場(特に大規模な業務アプリ)ではWindows7の32bitで開発している現場も多いイメージですが、実態は皆さん64bitに移行してるんですかね。
REPFツール
Pythonを使ったことがある人にはわかりやすいと思いますが、コマンドラインから色々できるアレがJavaにもやってきました。
REPFとはRead-eval-print-loopの略です。
コマンドライン上でjshellと入力してSystem.out.println("Hello World");で実行すれば結果が表示されます。
簡単なサンプルプログラムならわざわざクラスを作って動作確認する手間が省けて良いですね。
Unicode8.0対応
業務アプリであまり絵文字を使う機会はないと思いますが、今回Unicode-8.0に対応したことで幅広く新しい文字を利用することが可能になりました。
Androidアプリなどスマホ系での幅が広がるかも!
乱数生成の強化(DRBG)
今までJava標準のRandom関数(java.util.Random)と暗号用に強化された乱数ジェネレータ(RNG)を提供しているSecureRandom関数(java.security.Random)の二種類でした。
これに加えて今回追加されたDRBGはNIST-800-90Arlというものに定義されている乱数ジェネレータです。
NISTはアメリカ国立標準研究所と呼ばれるところで米国政府機関でも利用されています。
SHA-3対応
こちらはセキュリティ対応の強化としてハッシュアルゴリズムのSHA-3に対応しました。
SHA-3も上記のDRBGと同様にNISTで定義されているものです。
Javaアプレットの非推奨化
最近ではほとんど見る機会は減ってきたJavaアプレットですが、Java9でついに正式に非推奨となりました。
モジュール化システム「Project Jigsaw」
Java9の全てと言っても良いんじゃないのかと。
モジュール化システムのJigsawの歴史としては2009年から始まっています。
長い時間をかけ、偉い人やらすごい人達が血と汗と涙を流しながらついにJava9でリリースされました。(血と汗と涙を流したかどうかは知りませんが。)
そもそもモジュールって何だろ。。。
モジュールとは、機能単位、交換可能な構成部分という意味の英単語。システムの一部を構成するひとまとまりの機能を持った部品で、システムや他の部品への接合部(インターフェース)の仕様が規格化・標準化されていて、容易に追加や交換ができるようなもののことを意味する。
参考:IT用語辞典
システムを機能単位でまとめたものの単位と考えればいいですかね。
Javaではパッケージと呼ばれるグループで機能をまとめます。そしてパッケージをまとめてJARファイルを作成し、ライブラリとして提供する仕組みが利用されています。
今までじゃダメなんですか?何が問題なの?
- 機能ごとに可視性が設定できない
機能ごと(Jar単位)で可視性が設定できないため、本来Aシステムだけで使うはずのものが予期せずBシステムで使われて予期せぬ例外が発生することが考えられます。
- ライブラリ間の依存関係が設定できない
とあるa.jarを使うためにはa1.jar,a2.jarと複数のjarファイルが必要である場合に、開発者はどのjarファイルが足りていないかを都度調査して突き止めていく必要があります。
この問題を解決するために、jigsawではモジュールの依存関係を定義して設定しておくことで、開発者がどのライブラリを必要としているかを調べる手間が省けるようになりました。
だからこそのパッケージ管理!
上記で書いた問題を解決するために長い時間をかけてJigsawが作られました。
プライベートで隠蔽できる範囲が広くなったことで公開できる範囲が広がったり、環境構築で毎回悩まされるライブラリ依存問題を解消することで開発の初動が早くなったりと色々便利になる(はず)のです。
最後に
まだリリースされて間もないため業務でJava9を採用する所はまだ少ないかもしれませんが、これから新規開発するプロダクトやこれからJavaを勉強する人には良いタイミングだと思いますので是非Java9を使ってみてください!
そして僕に色々教えて頂けると嬉しいですm(_ _)m ← 他力本願
まだまだ勉強不足で薄っぺらい内容ですが最後まで読んで頂きありがとうございました。
間違っている部分もあるかと思いますのでご指摘頂ければ幸いです。