Javaの成功はそれがよく出来た言語であり、扱う問題領域に対して一般的な用途向けの言語であるという事実の上に成り立っています。特に近代的なエンタープライズ・コンピューティングで長期間稼働するサーバ・サイドのコードを記述するのに、また、クロス・プラットフォームをサポートや安定性やセキュリティが重要な要素となるモバイル環境向けの開発にはJavaが優れた選択となります。とはいえ、他の一般的な用途向けの言語にも言えることですがJavaよりも特定の用途に特化した言語の方が向いているプログラミング領域があるのも事実です。例えば、技術面でも管理面でも新たな挑戦が必要となる近代的なデザインのGUIなどです。
管理面を見ると、複雑で巧妙なユーザ・インタフェースを作るには一般的に多くの役割の人が必要になります。グラフィック・アーティスト、情報アーキテクト、アニメータ、そしてプログラマです。ある人達は一人でこれら全てをこなすことが出来るかもしれませんが、そのような人は稀です。典型的には多くの人が開発に携わり、デザイナと開発者の間でのリソースのやり取りが深刻な問題となるのです。技術面を見ると、近代的なUIデザインはしばしば高度な技術知識を要求するものとなります。Swingのような洗練されたツールキットが、UIを作る際に使い方を覚えなければならない複雑なコントロールを開発者に突き付けるのです。さらにインタフェースの応答性は同時実行性に大きく依存します。このこと自体は問題ではありません - マルチスレッド・プログラミングはJavaでは直感的に扱えます - ところが、これによって透過表示やアニメーションを管理するために多くのボイラープレート(定型的な)コードが発生してしまいます。
Adobe社のFlexやMicrosoft社のSilverlightといった競合製品のあるリッチ・インターネット・アプリケーションの領域に乗り込むにあたって、Sun社にとって同社のJavaFXはJava開発者向けにこれらの問題の解決をするための戦略的な製品となります。JavaFXはデスクトップ、インターネット/モバイル・デバイス向けにリッチ・インターネット・アプリケーションを構築するための基本的なプラットフォームを提供することを目的としています。JavaFXはさらにSun社のJava製品市場との向き合い方に大きな変更があることを表しています。今回Sun社は単に底流にある技術要素に着目したのではなく完全なソリューションを構築することしたからです。現在の技術プレビューには2つの主要なコンポーネントが含まれています。まずNileプロジェクトはデザイナ/開発者間のワークフローに着目したもので、次にJavaFX ScriptはJavaのGUIアプリケーションを記述するための新しい宣言的な開発言語になります。
FlexとSilverlightはどちらも(MXMLとXAMLという)XMLを宣言的な言語としている一方で、Sun社は新しい新しいスクリプト言語、JavaFX Script、を開発することを選択しました。Sun社のStaff EngineerであるJoshua Marinacci氏はこの点についてSunがXMLの新たな方言を追加する計画はまったくなかったと話してくれました。
「私たちは多くの人が本気でXMLを嫌っていて、画面開発に最適化されたよりコンパクトな宣言的記法を求めているということに気が付きました。JavaScriptに慣れた開発者にとってJavaFX Scriptは簡単に選択できるものだと思います。」
JavaFX Scriptは宣言的で、静的な型付けのある、コンパイルを必要とするもので、Javaのスタンダードとマイクロ・エディションの上でユーザ・インタフェースを作るためのドメイン特化言語(DSL)です。JavaFX環境から現在のJavaのパッケージにアクセスすることが出来ます。JavaFXは二種類のユーザ・グループをターゲットにしています。
- 既にSwing慣れていてより早く、高い生産性でリッチなインタフェースを構築するための手段を探しているJava開発者
- JavaScriptやActionScriptといった他のスクリプト言語に慣れているWeb開発者
JavaFX Scriptには挿入や削除処理をするためのいくつかの便利な述語表現(例えば、insert 10 before x[1])を含む生産性の高い機能があります。他の一般的な問題もきれいに解決しています。例えば、UIコンポーネントをバックエンドにあるデータベースとバインディングする方法は直感的です。そして、イベント・トリガと呼ばれるリスナに似た機構によって変数の値が変更された際にイベントを発生させることもできます。
開発者に選択されるため、そして他の開発者のコードを追いやすくするためにSun社はJavaFXの可読性を高めることに情熱を注ぎました。しかしこの結果、一連の論理演算子についてJavaやJavaScriptではC言語スタイルの演算子が採用されているにもかかわらず、JavaFXではBASICライクな演算子が使われることになりました。例えば、JavaFXでは&&の代わりに'and'を、||の代わりに'or'を使います。さらに、後になって'!'もサポートすることになりましたが、'not'もサポートします。このことに慣れるのにたいした時間は掛かりませんが、ターゲットとしている開発者を思うとても驚きました。
他にも驚くことはあります。一つは、現在予約語となっている単語を使った変数や関数の作成をサポートしているにもかかわらず、自動でそれを認識することなく、引用符(French quotes)を使ってそれらを var <
「私たちはGUIというものに限れば、これによって多くのことが簡単になると気付きました。しかし多くの場合、開発者は一切サブクラスを作成する必要はないはずです。従って、心配には及びません。サブクラスの作成は主にコンポーネント開発者が使うためのものです。」
JavaFXではJava自身で親しまれたものの多くを整備しています。まず注目すべきなのは、Javadocに相当するJavaFXDocです。この整備によってドキュメント生成ツールは多くの変更を必要としました。HTMLに代わり、JavaFXDocではXML形式のドキュメントを提供するので後で別の出力形式に変換することが出来ます。現在の対応形式はXHTML1.0ですが、この2段階の処理によって将来的にはPDFやナレッジベースを作るためのデータベースといった形式をサポートする可能性を示唆しています。新しい出力形式はフレームを使用せず、CSSで簡単にスキンを作成することが出来ます。さらに、それぞれのプロファイルごとにフィルタリングすことも出来ます。例えば、JavaFXのAPIはcommon、desktopそしてmobileというプロファイルに分けられているので、ドキュメントもそれに合わせてフィルタをかけることが出来るのです。出力例がこちら(リンク)にあります。ここでも生産性に注力しているのが明らかで、JavaFXDocでは@examplesタグを使うことで、行内に使用例を示すことが出来ます。使用例となるコードは自動的にハイライトされて出力され、その後ドキュメント生成ツールがこのコードをコンパイルし、さらに実行した結果のスクリーン・ショットを生成したドキュメントに取り込みます。このようにしてドキュメント内のスクリーン・ショットが常に最新状態にと保たれる仕組みを提供しています。
私たちがMarinacci氏とツールの将来の計画について尋ねたところ、氏はSun社では検索機能に取り掛かっていることを認めました。しかし、この機能はバージョン1のリリースには含まれない見込みです。Javadocツールの中心部分に対する修正はJava 7へ向けた暫定的な処置で、JavaFXDocから得た多くの教訓が将来のJavadocに活かされるだろうということも話してくれました。
JavaFX Scriptは全てのJavaパッケージにアクセスすることが出来るだけではなく、新しいAPIを追加しています。キーとなる二つのAPIがあり、一つはmedia API(今のところネイティブ・ライブラリとして提供されており、バージョン1のリリースではクロス・プラットフォームに対応しているOn2社のTrueMotion(リンク)によって補完されています)で、もう一つはscene graph APIです。scene graph APIはSwingを使っていた開発者の典型的なGUIに対する考え方を変えるものです。ここではGUIは画面を構成しユーザの操作に反応する視覚要素の階層構造として表現されます。scene graphのモデルは視覚効果、自由変形(拡大縮小や回転)、アニメーションに対応しています。scene graphはグラフィック・オブジェクトを保持していてリフレッシュが発生するとそれらを画面に描画します。これによって再描画やキャッシュ、そして既存のJava2DのようなAPIでは当然だったその他の詳細については抽象化しています。このレベルで抽象化することでAPIが自動的に最適化をしたり、テクスチャや3Dオブジェクトなどをグラフィック・カード上に先読みしておくことが可能になりました。scene graph APIはJavaFXと密接に関連していますが、通常のJavaアプリケーションから使うことも出来ます。
Sun社はAPIを三つのプロファイルに分けていて現在はその中の二つが入手可能です。commonプロファイルは全てのデバイスで使うことのできるAPIで、scene graph APIとmediaコンポーネントを含みます。一方でdesktopプロファイルにはおなじみのSwingコンポーネントが含まれます。三つ目はmobileプロファイルで2009年内のリリースが期待されていて、モバイル機器向けの開発者にとって完全なアプリケーション・スタックとなる予定ですが、現段階では大まかな内容しか判明していません。
この記事を書いている段階で、common APIから省略されているものが一、二点あります。例えば、テーブル、タブ、テキスト・エリアそしてブック・パネル(本をめくる様な効果のある部品)といった物に相当するコンポーネントがJavaFXプレビュー版には含まれていません。今回のリリース・バージョンではより完全で安定したものとなるでしょう。Marinacci氏は以下のように述べています。
「Swingコンポーネントをサブクラスのノードへ移動することを検討しています。これによってアダプタ・クラスを使うことなくSwingコンポーネントをグラフィック・ノードと好きなように組み合わせることが出来るようになります。時が経てば(treeやtableのような)クラスはDesktopプロファイルにのみ含まれることになるでしょう。」
先行するAdobe社に追随するのではなく、新しい言語を開発しようという決断は勇気がありとてもいいことだと思います。JavaFX Scriptは楽しく取り組める言語ですし既存のアプリケーションに対しても多くの可能性を秘めています。例えばJavaFXデータ・フォーマット(FXD)は、Nileプロジェクトの一部ですが、JavaFX Scriptの宣言的なフォーマットのサブセットを使って画像データを表現しています。
SilverlightについてMicrosoft社は独自のツールセット(Expressionスイーツ)を提供し、Adobe社のCreative Suiteに対抗しています。Sun社もまた独自のツール(恐らく来年に公開)を開発していますが、まずはNileプロジェクトを通して一般的に普及しているツールをサポートする道を選びました。手始めにAdobe社のIllustratorとPhotoshopのサポートから始めるようです。
OS XとWindowsの両方をサポートしつつ、NileプロジェクトにはAdobe IllustratorとPhotoshop CS3向けのプラグイン、SVGコンバータ、そしてJavaFXデータ・フォーマット(FXD)のビューアーが含まれています。Adboe社のいずれかのツールで制作しているデザイナは通常通り画像データを制作した後でFXD形式に出力することが出来ます。ユーザはビューアー・ユーティリティを使って出力された画像ファイルが期待通りに出力されているかを確認することが出来ます。JavaFXスクリプト言語の開発者は一つの画像データを構成する複数のレイヤそれぞれにアクセスし、操作することが出来ます。この仕組みがあることで、基本的なコンポーネントに独自のスタイルを適用するにはまだ問題が残っている画像データをうまく扱うことが出来ます。この点についてSun社はCSSを利用するつもりのようで、CSSを使ってSwingコンポーネントにスキンを適用する機能はJavaFXのバージョン1のリリースに含まれる予定です。
これら全ての基礎となっているのはJava 6 Update 10(以前はコンシューマJREプロジェクトと呼ばれていました)です。デプロイ、性能、メモリ消費量の改善、そして組み込みのルック・アンド・フィール(Nimubus)といった全てがデスクトップ開発プラットフォームとしてのSwingを効果的に支えています。しかし残念ながらこのことは現在開発者にとって若干の制限となっています。Sun社はWindows向けと同様にLinux、Solaris向けにもupdate 10を提供していますが、その実装には決定的な違いがありアプレットのquickstarter、カーネルのインストーラ、そしてDirect3Dのパイプライン処理についてはWindowsプラットフォーム向けに限定されているのです。さらにApple社はJava 6を64-bit Intelで稼働するOSX 10.5向けに限定してしまっています。Marinacci氏は詳細については語らなかったもののSun社とApple社でOSXにおけるJavaとJavaFXのサポート状況の改善について協議していると語ってくれました。Marinacci氏はさらにダウンロード状況に関する最新情報も教えてくれました。
「JREは平均して毎月4-5千万件ダウンロードされていて、ピーク時には1億件になる月もあります。この中の95%以上はJavaSE 6のダウンロードになります。JavaSE 6 update 10が最終版になってから数カ月すると自動アップデートに移行しますが、そこでもこれと同じくらいの数字になると見込んでいます。さらにOmniture社によればインターネットに接続しているコンピュータの91%がJavaをインストール済みであるという情報もあります。」
FlashとSilverlightは共に完全にクローズド・ソースなプロプライエタリ・ツールで開発現場での採用の際に重大な障壁が残ります。さらに言えば、Flashではオーディオやビデオのコーデックのようなキー・コードの多くがサードパーティからライセンスを受けているのでAdobe社がSun社がJavaで行ったようにプロッタフォームを開示することはとても難しいでしょう。ライセンスは最終的に確定していないものの、Sun社はJavaFXをオープン・ソース・ソフトウェアとして入手可能な状態にすることを決めています。そして今までにコンパイラとscene graph APIをGPL v.2ライセンスの下でリリースしています。このことによってプラットフォームがリリースされた際の採用がより促進されるかもしれませんが、強力な挑戦者になるにはまだまだやらなければならないことがたくさんあります。
原文はこちらです:http://www.infoq.com/articles/jfx_preview
(このArticleは2008年11月10日に原文が掲載されました)