Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2017/10/19 14:00

 2017年9月にJava 9がリリースされました。この世に出てから20年以上が経過したJavaは、さまざまな技術トレンドを作ってきました。今でも広く使われている言語であることは間違いありません。本連載ではJava 9がリリースされたこの機会に、Javaのリリースの歴史とJava 9のリリース内容の概要を紹介していきます。1回目となる今回は、これまでリリースされたバージョンを簡単に振り返り、Java 9の変更点について全体像を解説します。

目次

はじめに

 2017年9月にJava 9がリリースされました。Javaという名前で初めて世の中に出てきたのは1995年なので、それから20年以上も経過したことになります。これまでJavaは、いろいろな技術のトレンドを作ってきました。

 最近では、Java自体がITのトレンドとして扱われることも減りました。そのためか、なかなか細かい内容まで広く取り扱われることがなくなってきました。しかし、Javaが広く使われている言語の一つである事実に変わりはありません。

 2000年からJavaを触っている筆者としては、Javaはサーバーサイドの言語である先入観がありますが、Android世代の技術者にとってはスマートフォンのための言語といった側面もあるでしょう。Javaという言語に期待する機能なども、それぞれの用途によって違うと思います。そのため、それぞれの機能やこれまでの機能についても、目的別に考慮して見る必要があります。

 本連載ではJava 9がリリースされたこの機会に、これまでのJavaのリリースとトレンド、そしてJava 9の新機能を紹介します。今回は概要のみですが、次回以降Java 9で変わった具体的な内容について解説する予定です。

対象読者

  • Javaに携わる開発者
  • これからJavaを学ぼうと思っている方

これまでのJavaのリリースと技術のトレンド

  Java 9のリリースについて紹介する前に、これまでのJavaのリリースについて、関連する時代の流れを踏まえ、図1に表しました。

 Javaと密接な関係がある技術キーワードやブラウザの進化が分かるように、Internet Explorer(IE)のバージョン、そしてAndroidのバージョンの変遷も併せて記しました。

図1 Javaのこれまでのリリース内容と技術トレンド
図1 Javaのこれまでのリリース内容と技術トレンド

 2000年ごろからWebシステムは本格的に使われ始めました。2007年に入りクラウドがトレンドになるまで、この時期はクライアントサーバーシステムからWebシステムへの転換期でした。そのため、サーバーサイドの技術に対しても大きな注目と需要があり、多くの開発者にとってJavaはサーバーサイドのための言語といえる状況でした。

 ただしその後、Webシステムが広く使われ始めると、既存のクライアントアプリケーションに似た操作性が望まれるようになり、「RIA(Rich Internet Application)」というキーワードが出てきました。例えば、マイクロソフトの「Silverlight」やアドビの「Flash」などです。そして、アドビではさらにFlashの技術を使ってアプリが作れる「AIR」もリリースしました。HTMLとJavaScriptだけでは実現が難しい仕組みをRIA技術で補っていたわけです。この時期、Javaも「JavaFX」をリリースしています。

 その後、RIA普及の流れは止まってしまいましたが、現在のWebアプリには多大な影響を及ぼしています。

 その後もJavaは、ビックデータを扱うためにHadoopで採用されるなど、クライアント側よりも中央集権型のシステムとして順調に成長していくことになります。

 その間に、サン・マイクロシステムズ社がオラクル社に買収されたことや、Androidにおけるオラクルとグーグルの間の問題が発生したこともあり、クライアント向けの開発言語として最適化されないまま時が経過しました。一方で、クライアント技術はネイティブアプリだけではなく、Webブラウザが急速に進化したことによって、JavaScriptを使った多機能なWebアプリが普及していきました。つまり、リッチなクライアントが当たり前の時代になったのです。

 こうした背景を元に、Javaもこれまでの中央主権型サービスへの最適化から、リッチなWebアプリといったクライアント側への対応、さらにIoTなどの小さなサービスに適した性質が望まれてきています。Java 9はまさに、この声に応えるべくリリースされたバージョンともいえます。

 この流れを踏まえ、これまでのJavaのリリースについて改めて振り返ってみましょう。

J2SE 5.0のリリース内容

 J2SE 5.0では以下の内容がリリースされました。現在のJavaの骨格がこのリリースで固まったといえるのではないかと思います。

  • ジェネリクス
  • アノテーション
  • JMX
  • enum型/拡張for文/可変長引数/オートボクシング

 これらの機能を使わないJavaプログラミングは、すでに不可能といっても過言ではありません。そのため、現在普及しているライブラリはこれらの機能を前提にしたものがほとんどで、最低でもJ2SE 5.0以上のバージョンが必須となっているでしょう。

Java 6のリリース内容

 バージョンが分かりにくいことから表記方法が変わりました。J2SE 1.5と比較するとそれほど大きな変更はありません。デスクトップ関連API以外では通常のプログラミングに直接的な影響を及ぼす内容は少なく、成熟度を上げてきた印象があります。

  • デスクトップ関連APIの改善
  • スクリプトの実行
  • コンパイルAPI
  • XMLのサポート強化(JAXB、JAX-WS)
  • 自作MXBeanのサポート

 スクリプトの実行ができるAPIも提供されました。実際にJDKで実行できるのはJavaScriptのみですが、他の言語も実行できるようにAPIが定義されています。

 また、リリース内容とは直接関係がありませんが、以前よりJavaVMはJRubyやScalaの実行環境として認知されつつあり、言語と実行環境が区別され始めたのもこの頃でした。

 コンパイルAPIではJavaコードをコンパイルするためのAPIが提供され、例えばJSPエンジンの実装しているミドルウェアなどに大きな影響を与えました。さらに、XML関連の技術の標準化もされつつあります。管理面ではMXBeanというアプリケーション内部のリソースや負荷などを把握する為の監視ポイントを自分で作成できるようになっています。

 これまで、各ミドルウェアなどが独自の仕様で提供していた機能などが標準機能として取り込まれたのも、このようなAPIが公開されたのも、まさしくJavaが運用面まで重要視された環境であったことを示しています。

Java 7のリリース内容

 これまでの流れを踏襲し、コーディングしやすいように機能改善されたリリースです。

  • try-with-resources
  • ジェネリクス(ダイヤモンド記法)
  • 例外のマルチキャッチ
  • switchで文字列指定可能
  • JavaFXを標準で追加

 Java 7は比較的小さなリリースです。Javaがかなり成熟してしまったこともあると思います。また、このリリース前にJavaの開発がサン・マイクロシステムズ社からオラクル社に移行したことも関係しているのかもしれません。

Java 8のリリース内容

 ラムダ式が最も大きな変更です。ラムダ式、もしくはクロージャといった記述方法が使われるケースが増えてきたために、Javaでも同様に記述できることが望まれていました。

  • ラムダ式(クロージャ)
  • Stream API
  • Optionalクラス(NullPointerExceptionの抑制等)
  • インターフェースのデフォルトメソッド
  • 新しいDate and Time API
  • タイプ・アノテーション

 Java 8は「いかにコーディングがしやすいか」ということを中心に考えたリリースであったといえます。特にラムダ式は、既存の無名クラスなどが必要な場合にコード量を少なくできます。こうした記述方法は主にイベント処理で使われることが多く、クライアントアプリケーションで使われるケースも増えてきていました。また、サーバーサイドでもイベントドリブン型の処理という概念が広まってきたことが、機能追加の背景にあったと思われます。

 Stream APIでは、リストのようなコレクションに対して行っていたデータの加工、フィルタといった処理が、さらに分かりやすく記述できるようになりました。

 ラムダ式やStream APIを使って記述をすると、例外処理などが記述しづらくなり、場合によってはわかりにくくなるケースもあります。しかし、例えばAndroidなどのクライアントアプリケーションのようにUIイベントに対する処理をたくさん記述するケースでは、そのたびに無名クラスを定義するのは煩雑です。また、プログラマ自身がデータの生成から処理まですべて把握可能な場合もあり、その場合、データの例外処理をある程度省略することが可能です。このようなケースではコードの見やすさがより重要視されます。

 このように、利用シーンと目的に応じて記述方法が柔軟になった点においては、開発者にとってより扱いやすくなったといえるでしょう。

 そして、Javaのリリース内容が「機能の追加」から「同様の機能がどう記述できるか」といった方向性に変わってきたことがうかがえます。

Java 9の主なリリース内容

 Java 9は、当初の予定よりも約1年遅れてのリリースとなりました。その大きな原因として、「Project Jigsaw」と呼ばれるJavaをモジュール化する機能の追加がありました。この機能はJavaの骨格を変えてしまう程のインパクトがある変更です。Java 7のころから話は上がっていたものの、毎回延期されてきました。それがJava 9でついにリリースされました。それを含め、以下の点が変更されました。

大きな変更点
  • モジュール機能(Project Jigsaw)
  • JShell(Project Kulla)
  • Reactive Streams(JEP 266)
細かい変更点
  • Compact Strings(JEP 254:Compact Strings)
  • コレクションの改善(JEP 269:Convenience Factory Methods for Collections)
  • try-with-resources構文の追加(JEP 213:Milling Project Coin)

 また、これ以外にも細かい変更点が多々あります。詳細は、オラクルから提供されているJava 9の変更点を参照してください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Java 9で「変わること」と、Javaのこれまで
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5