JavaFXはバージョン2.0でJavaに回帰した ─米OracleでClient Java Groupのバイスプレジデントを務めるNandini Ramani氏は12月1日、日本オラクルで行われた「Java Developer Workshop」の基調講演にてこう言い切った。10月にリリースされたJavaFXは、Oracleの下ではじめて公開されたバージョンでもある。単なるRIA環境から真のクロスプラットフォーム環境へ。本稿ではRamani氏の講演から、JavaFX 2.0の現状と今後の展望についてその概要を紹介したい。
JavaFX Scriptの廃止で完全に"Javaクライアントのひとつ"になったJavaFX
Nandini Ramani氏
「昨年、Oracleは"JavaFXをJavaに戻そう"というコンセプトの下、JavaFX Scriptをやめて新しいAPIに置き換えることを宣言した。そうして誕生したのがJavaFX 2.0」とRamani氏は語る。Javaエコシステムの一環にJavaFXを完全に組み込むことで、SwingデベロッパなどもJavaFXのリッチな環境を利用できるようになり、JRubyやGroovy、Scalaなどの動的言語からJavaFXへのアプローチも可能になっている。JavaFX Scriptを廃止したことでいくつかの機能は利用できなくなったが、「 バインディングなどの互換性は可能な限り保持している」( Ramani氏)という。
JavaEEのミドルウェアと連携もOracleの下ならでは。エンタープライズデータの可視化に今後は積極的にJavaFXが取り入れられそうだ
Ramani氏はJavaFX 2.0の主な特徴を以下のように挙げている。
Android、iOSでも動作する完全なクロスプラットフォーム
100% Pure JavaなAPI、既存Java環境との完全な統合
Qunatum Toolkitなど豊富なツールセット
開発生産性の向上
FXMLに代表される使いやすいユーザインターフェース
Ramani氏は「とくに、新しいUI記述言語のFXMLをもっていることがJavaFXの最大のメリット。また、すべてのJava IDEが利用できるという点も新しいJavaFXならでは」と強調する。デプロイメントのメカニズムがJavaとまったく一緒であるという点も、JavaFXがJavaファミリの派生ではなく一部であることを象徴している。
リスト1 JavaFX版“ Hello World!” をJavaで書いた場合
public class JavaFXExample extends Application {
@Override public void start(Stage stage) {
Scene scene = new Scene(
LabelBuilder.create()
.text("Hello World!")
.layoutX(25)
.build());
stage.setTitle("Welcome to JavaFX!");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
リスト2-1 JavaFX 2.0版“ Hello World!” をFXMLとJavaで書いた場合:FXML
<BorderPane>
<center>
<Label text="$helloworld"/>
</center>
</BorderPane>
リスト2-2 JavaFX 2.0版“ Hello World!” をFXMLとJavaで書いた場合:Java
public classFXMLExample extends Application {
@Override public void start(Stage stage) throws Exception {
stage.setTitle("FXML Example");
Parent root = FMXLLoader.load(getClass().getResource
("example.fxml"),
ResourceBundle.getBundle("r.fxml_example"));
stage.setScene(new Scene(root));
stage.show();
}
}
既存のJavaFX資産を可能な限りサポート、2D/3Dグラフィクスも美しく表示
以下、JavaFXで新たに搭載された機能のうち、注目すべきものをいくつか挙げておく。
FXML
XMLベースのUI記述言語。強力なスクリプティング機能により、JVMベースの動的言語からのJavaFX利用を可能にする
Prism
強力なハードウェアアクセラレーションを行うグラフィックパイプライン。Java2Dのサポートも(将来的には2Dのパイプラインを置き換えたいとのこと)
Glass Window Toolkit
ネイティブウィンドウ環境をサポートするツールキット。AWTのリプレース。Prismと連携して動作する
2Dと3Dのサポート
フルで3Dサポートはまだだが、2D/3Dともにトランスフォーマが可能に
メディアサポート
GStreamerベースのメディアフレームワーク。VP6/MP3、ローレテイテンシなオーディオ、アルファチャネル、フルスクリーンビデオなどをサポート。パフォーマンスも大幅向上。MicrosoftのKinectとの連携なども開発中
Webコンポーネント
WebKitベースのHTMLレンダリング、DOMアクセス、XMLパーサは独自のもの。レンダリングエンジンはWebKitすべてを使っているのではなくハイブリッドな状態、WebKitよりサイズは小さい
Swingアプリケーションとの互換性
JavaFXコンテンツをSwingアプリに埋め込むことも、既存のSwingアプリにJavaFXのWebViewやハイパフォーマンスなグラフィクスを取り入れることも可能
まとめると、JavaFXで開発されたWebアプリケーションは「既存のWebテクノロジとの親和性が高く、パフォーマンスも高速、デベロッパにとっても開発しやすく、そして新しいユーザエクスペリエンスを届けることができる」( Ramani氏)ということになる。
JavaFXは2Dと3Dをミックスしても見た目もパフォーマンスも劣化しないのが特徴。3Dでオブジェクトを作成し、2Dでオーバーレイ、空間のローテーションなども簡単に
ビジネスアプリケーションでのJavaFX普及も!?
Ramani氏はJavaFXの今後について、「 モジュラー化/軽量化をさらに進めていく。フットプリントはダイナミックでもスタティックでも小さくなくてはいけない」としている。おそらくモバイル環境や組み込みアプリケーションでの普及を強く意識していると思われる。GPUの進化やマルチコア化がさらに進んでいる状況も織り込み済みだろう。また、講演中何度も「Swing、AWTとの互換性保持」を強調して語っており、既存のJava環境からのマイグレーションを積極的にサポートする姿勢を明確にしている。「 プラットフォームが違ってもAPIは同じ。これがJavaの強み」とRamani氏は語るが、JavaFXは次のJava 8に含まれることになっており、完全にJavaファミリに一体化することになる。
もうひとつ、Oracleならではの姿勢が「ビジネスアプリケーションにおけるJavaFXの普及」だろう。RIAの世界では、Adobeが現在、モバイル版Flashの開発中止で矢面に立たされているが、Flashほどデスクトップで普及していなかったことは逆にOracle/JavaFXにとってプラスに働く材料かもしれない。たとえばSilverlightを擁するMicrosoftは来年リリース予定の「SQL Server 2012」においてSilverlightを使ったインターフェース「PowerView」を搭載するが、同様にOracleが抱える豊富なビジネスアプリケーションにJavaFXが採用されれば、ビジネス市場でのJavaFX普及に大きなはずみがつくことも考えられる。Ramani氏は「Swingアプリケーションがエンタープライズの世界ではたくさん残されている。これらのJavaFXへのスムースな移行を支援したい」としており、Swingインターフェースとの統合も近い将来視野に入れているとしている。
JavaFX 2.1は2012年半ばのリリースが予定されている。今後もオープンソースでの開発をもとに、新しい機能強化が続けられていくとしている。将来的にはJCPを通じた標準化なども実現する可能性が高いそうだ。