SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java 9で「変わること」と、Javaのこれまで

Java 9のリリースとこれまでのトレンドを振り返る

Java 9で「変わること」と、Javaのこれまで 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

新しいJavaのモジュール機能「Project Jigsaw」

 Javaにおけるモジュールとは一体何でしょうか。Javaでモジュール管理といえば、MavenやGradleなどを思い浮かべる方が多いのではないかと思います。また、Eclipseなどで採用されているOSGiを想像する方もいるでしょう。

 これまでのProject Jigsawの経緯を知っている方は、このモジュール機能がMavenやOSGiなどと一緒に議論されていたこともあったことを知っていると思います。つまり、これらのモジュール機能と新しいモジュール機能の役割が違うことを把握すると、Project Jigsawの目的がお分かりいただけるでしょう。

 プログラムの実装から実行までの工程と、既存のモジュール機能との関係性を記したのが図2です。

図2 ソフトウェアの行程とモジュール機能
図2 ソフトウェアの行程とモジュール機能

  モジュール管理といえば、多くの方がMavenを使っています。Androidの場合はGradleが標準であるため、そちらを使っている方も多いでしょう。これらは主にビルドするために使われているツールです。

 IDEによっては、ツールの設定ファイルを読みこみ、コーディング時に自動でチェックする機能もあります。そのため、コードを書く際にも役に立ちますが、これはあくまで作業を楽にするための位置づけです。

 また、作るアプリケーションがどのライブラリに依存しているかを記しているため、ビルド時の設定ファイルはそのためのドキュメントという側面も持っています。

 ただし、あくまでも主役はコーディング後のビルドで実施するJARファイル構築や、必要なリソースファイル等のパッケージングであるため、実行後のサポートは何もありません。そのためビルド時には不要であるものの、実行時に必要となるライブラリのチェックはできません。

 一方でOSGiは、実行後に一部分だけの機能を追加するケースや、追加した機能のみを更新するケースにも対応しています。Eclipseを使っている方がそれらの追加機能をプラグインと呼んでいることからも、モジュール管理よりもプラグイン機能の管理と表現したほうが、より分かりやすいかと思います。そのため、ここまでのモジュール管理機能を必要としているケースは少ないかもしれません。

 最も大きな違いは、MavenやGradle、OSGiといったどんなモジュール管理機能であっても、これまでのモジュール管理はあくまでもコアのJavaライブラリの上に構築されていたということです。従って、これらのモジュール機能ではあくまで既存の機能の拡張でしかありませんでした。

 しかし、サーバー側とクライアント側ではセキュリティで求められる方向性も多少異なり、Javaそのもののセキュリティにまで需要は広がり始めています。例えば、アプリに含まれる未使用のライブラリやJavaのコアAPIを使い、セキュリティホールへ攻撃するケースです。これは、ライブラリの正規の機能を悪用する場合もありますし、ライブラリが潜在的に持っている不具合の場合もあります。

 この問題を踏まえて、Javaのパッケージごとに機能へのアクセス指定ができるようになったことが、今回のモジュール機能の大きな特徴です。また、コアのJavaライブラリに対してモジュール管理がされているため、内部的にはかなり大規模な変更が行われています。そして、その変更は同時に言語仕様にまで及んでいます。

 また、必要最低限のJRE環境のカスタマイズまでできるようになりました。これらの機能はソフトウェアの安全面と実行環境のスリム化に大きく寄与します。今後、Javaはスマートフォンやその他のより小さいデバイスに向けて、さらなる最適化が進んでいくでしょう。

 ただし、MavenやGradle、OSGiに備わっている機能はないため、もし必要であれば併用する必要があります。

手軽にコードを実行可能な「JShell」

 「JShell」とは簡単に言えば、Javaコードをコンパイルすることなく即時に実行できる環境です。ただし、このツールを使った実運用が想定されているわけではなく、あくまで学習、もしくはちょっとした検証のために実行できる環境です。このような環境をREPL(Read-Eval-Print-Loop、対話型環境)といいます。

 一般的にJavaの開発者や学習者は、何らかのIDEを使い、そこでコードを記述していると思います。そのような方は必要性をあまり感じないかもしれませんが、今ではREPL環境が用意されている言語が一般的になりつつあり、最近では学習面まで考慮されています。

 Javaもこの流れの中で今回、REPLであるJShellが用意されました。これまでリスト1のコードを実行するには、mainメソッドを定義し、javacでコンパイルし、さらにその後実行しなければなりませんでした。これではコードの実行の確認までかなりの工程が必要になり、手間がかかります。しかし、JSehllを使用すると図3のようにサンプルコードがすぐ動くようになります。

リスト1 Javaのサンプルコード
System.out.println("Hello World")
図3 JShellの実行例
図3 JShellの実行例

 本記事のような技術記事を読んだりするケースでも、実際のサンプルコードがそのまま実行できるようになるため、学習者はより手軽に学ぶことができます。

 もちろん、ちょっとしたコード検証でも活用できるため、すでにJavaを本格的に使っている方にとっても有効なツールであることは間違いありません。

 また、このJSehllはツールとしてではなく、APIとして利用することも可能です。そのため、今後はブラウザから実行できるツールが世に出てくると思います。

次のページ
「Reactive Streams」とは

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Java 9で「変わること」と、Javaのこれまで連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10459 2017/10/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング