Java 8によるイノベーション

開発者の生産性を向上し、モノのインターネット(Internet of Things)から
クラウドまでの各種アプリケーションをサポートする最新のJavaプラットフォーム。


オラクル・コーポレーション Javaプラットフォーム、およびIoT担当バイスプレジデント、ナンディニ・ラマニ

 Javaプラットフォームの最新リリースであるJava 8は大規模なアップグレードであり、これに合わせて仮想マシン(VM)、コア言語、ライブラリも進化している。オラクル・コーポレーションのJavaプラットフォーム、およびIoT*1担当バイスプレジデント、ナンディニ・ラマニが、Java Platform, Standard Edition*2 8(以下、Java SE 8)、Java Platform、Micro Edition*3 8(以下、Java ME 8)を含む、Java 8の新機能を解説する。

――Java開発者に大きな変化をもたらすといわれているJava 8のおもな機能には、どのようなものがありますか。

ラマニ Java言語だけでなくJavaライブラリにおいても大きな進化を遂げています。Javaプログラミング・モデルにおけるこれまでで最大のアップグレードであり、ラムダ式*4やデフォルトメソッド、日付と時間の新しいAPI、JavaScriptエンジンNashorn、コンパクト・プロファイルなどの新機能が含まれています。

――ラムダ式はクロージャとも呼ばれますが、どのようなものですか。なぜこれほど注目を集めているのでしょうか。

ラマニ 優れたプログラミングというのは、適切な抽象化を見つけることと関係があります。Javaはデータの抽象化がきわめて容易な言語ですが、ビヘイビアの抽象化には改善の余地がありました。たとえば、「このコレクションのすべてのマッチング要素についてこの処理を実行し、その後あの処理を実行する」といったことを開発者が効果的におこなえるようにすることです。ラムダは、こうした断片的なビヘイビアを記述したり、データだけでなくビヘイビアも、あるメソッドから別のメソッドに渡せるようにするうえで、これまで欠けていたツールです。こうした処理は内部クラスによってある程度は可能でしたが、扱いにくかったり、大量のボイラープレート・コード*5が必要になったりしていました。ラムダによって開発者は日常的に書くコードを簡素化できますが、大きなメリットが得られるのは、やはりJava SE 8で導入された、コレクションAPIでの新しい集約操作と組み合わせた場合です。ラムダがこれほど大きな進歩といえるのは、言語とライブラリの組み合わせがあるからこそ。これはきわめて重要です。

 たとえば、java.utilの新しいストリーム・ライブラリは、どうすればJavaのコードでより関数的なアプローチを取れるかを示しています。その結果、プログラマーは問題の「内容」に集中でき、以前よりもコンパクトかつエラーが起こりにくいコードを記述できます。このアプローチで得られるメリットの1つは、コードを逐次的または並列的にしなくても記述でき、しかもコード全体を書き直さずに逐次実行と並列実行を切り替えられることです。ユーザーが並列実行を求めている場合は、ライブラリ側がパーティション分割、タスク分解、スレッド・スケジューリングを処理してくれるので、解決すべき問題の「内容」に集中できるのです。これは、こうしたプログラミング・スタイルのメリットの1つにすぎません。

――こうしたメリットを手にするために、新しいライブラリに切り替える必要はありますか。

ラマニ その必要はありません。これは、デフォルトメソッドと呼ばれるJava SE 8の新しい言語機能のメリットで、後方互換性を損なわず既存のライブラリを進化させ、長期的に新しい機能を獲得できる仕組みになっています。これらの機能を、Java開発者が日常的に使用しているコレクション・ライブラリに追加しました。

「言語、プラットフォーム、APIの一体化、
Java言語とライブラリの革新が進められています」

――ラムダは開発者の日々の仕事のやり方を変えるということですか。

ラマニ そのとおりです。コードをより、コンパクトにできるだけでなく、先ほど説明したストリーム・ライブラリのようなライブラリと組み合わせることで、開発者はよりシンプルでメンテナンスしやすいコードが書けるようになり、パラレリズムの扱いが容易になります。

――Date & Time APIの重要な点は何でしょうか。

ラマニ 異なるマーケット向けの国際化やローカリゼーションへの対応が必要な場合、開発者にとっての複雑さが軽減されます。Javaにはこれまでも日付と時刻のAPIがありましたが、現代的な手法で徹底的に設計し直す時期でした。

――Nashornについてはどうですか。

ラマニ Javaプラットフォームに付属するJavaScriptエンジンを最初から書き直したものです。開発者がJavaとJavaScriptの両方を使いたい場合、Nashornを利用することで、パフォーマンスの大幅な向上やJavaコードとJavaScriptコードとの相互運用性の確保が可能になります。

――Java SE、Java ME統合の背景を簡単に説明してもらえますか。それに向けてJava 8ではどのような対策が講じられているのでしょうか。

ラマニ Java MEは、リソースに制約があって、Java SEの利用が適切でない場合があるデバイスや、ネットワーク接続機器のためのJavaプラットフォームの規格です。Javaを小型の組み込みデバイスや小規模なユースケースに幅広く対処できるようにしています。

 私たちは、言語、ツール群、ライブラリ、APIを1つにまとめようとしています。Java MEとJava SEとの調整で、統一されたJava開発モデルが生まれ、コードやスキル、ツール群を、システム規模にかかわらず、Javaプラットフォーム全域に適用できるようになります。900万人以上の開発者やパートナーがいる広大なJavaの世界で、どんなイノベーションでも容易にスケーリングできます。

 Java ME 8はメジャーアップデートであり、Java SEとJava MEの調整に向けた大きな一歩です。Java MEはジェネリックス、アノテーション、アサーション、列挙型、マルチキャッチといった最新のJava SE 8の言語機能のほとんどをサポートしており、最近のJava SEのVM機能やクラスファイル・バージョンもサポート。共通のツール群を使用できます。さらに、コレクション、イベント、StringBuilder、ロギングをはじめとするAPIやインタフェースなど、Java SEのおもなAPI、ライブラリや、NIO(New I/O)のサブセットも追加されています。

「ラムダによって開発者は日常的に書くコードを簡素化できますが、
大きなメリットが得られるのは、やはりJava SE 8で導入された、
コレクションAPIでの新しい集約操作と組み合わせた場合です」

――コンパクト・プロファイルは、こうした統合にどのように関係していますか。

ラマニ コンパクト・プロファイルは、Javaクラスライブラリの適切に定義されたサブセットを、そのサブセットだけを必要とするアプリケーションで使用するための方法です。つまり、小さなアプリケーションを書くだけなら、JRE(Java実行環境)全体をインクルードする必要がありません。コンパクト・プロファイルによって、JREのサイズが問題になる環境など特定のニーズに対処できます。

――IoTについてはどうでしょうか。Java MEは、IoTのデバイスを構築したい開発者に何をもたらしますか。

ラマニ IoTは大きなチャンスになりますが、ソフトウェア開発、とくにその展開に関しては課題もあります。それは、広範囲かつ断片的に広がる組み込みプラットフォームで、どのようにコードを効率的に開発するか、過酷な環境で実行されることが多いソフトウェアの堅牢性や安全性をどう保証するかです。

 通常、組み込みソフトウェアの開発では、専門的なスキルとプラットフォーム特有のツール、低レベルのネイティブ・プログラミングが必要です。開発時のネイティブ・プログラミング手法は断片化されているため、Java ME 8は組み込みソフトウェア専用の規格として、デバイスの複雑さを開発者に見せることなく、一貫性と信頼性を備えたアプリケーション・プラットフォームを提供しています。OS、デバイスドライバなどの複雑さは抽象化によって排除されるため、開発が容易になります。Java ME 8ランタイムは効率性に優れスケーラビリティが高いため、開発者はアプリケーションの再コンパイルや移植をしなくても、組み込みソリューションでアプリケーションとビジネスロジックの移行や再利用をおこなえます。これは、実世界では小さなマイクロコントローラ・タイプのデバイスにまず着手し、最終的にはゲートウェイのような影響力の大きいシステムに行き着けることを意味します。

 Java ME 8には、あらかじめ統合されたソフトウェア・プロビジョニングと管理、柔軟で堅牢なセキュリティ・モデル、標準の通信プロトコルなど、高度な組み込み型の展開でニーズが高まっている標準化された多彩な機能が含まれています。

――Java 8に関して、もっとも期待できるのはどのようなことでしょうか。

ラマニ 言語、プラットフォーム、APIの一体化、Java言語とライブラリの革新が進められているので、Javaプログラミング・モデルそのものにとって大きなアップグレードといえます。また、開発者が、小さなデバイスからデータセンターまで利用できるアプリケーションを簡単に書いて展開できるようにしたいと考えています。Java SE 8とJava ME 8は、その目標に向けた大きな節目となるリリースなのです。

*1 Internet of Things:モノのインターネット
*2 Java仮想マシンやJava APIなど基礎となる標準的な機能で構成されるJavaの機能セット
*3 モバイルデバイス、および組み込みデバイス上で稼動するアプリケーション向けに最適化されたJavaの機能セット
*4 関数型言語と呼ばれるプログラミング言語における関数を定義するための記法で、より簡潔なコードの記述や追加の機能を渡すことによるメソッドの変更、マルチコア・プロセッシングのサポートの強化などのメリットが得られる
*5 1つのソースコードに繰り返し記述される少しずつ異なるソースコードの断片

ページの先頭へ