話題のSWTは本当に速いの?:安藤幸央のランダウン(19)
「Java FAQ(What's New)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします。(編集局)
いま話題のSWTとは?
昨今、高機能でかつオープンソースのJava開発環境として「Eclipse」が注目を浴びています。これは、もともとIBMが自社のJavaアプリケーションサーバ「WebSphere Application Server」に向けた開発ツールとして開発していたものが、よりオープンな形でJavaコミュニティに提供されたものです。現在では数多くのEclipse専用プラグインが続々登場しており、ほかのオープンソース開発ツールの追随を許さない勢いで進化し続けています。
ところで、現在Java開発ツールの多くは、すべてJavaで書かれていることをうたい文句にしています。Javaで、これだけのアプリケーションが実現するという一例としても参考になりますが、一方では高速に動作してほしい開発環境が、高速のCPUと大量のメモリを用意しないと快適な速度で動かないという声も聞こえます。
EclipseはJavaベースでありながら緩慢な動作とは無縁です。Eclipse自体もベースはJavaで書かれたアプリケーションですが、ユーザーインターフェイスの描画には「JFC(Swing)」を用いていません。オリジナルのグラフィカルユーザーインターフェイスライブラリ「SWT」(Standard Widget Toolkit)を採用することで、高速な動作を実現しているのです。
SWTは、各OSにネイティブに実装されており、非常に高速に動作します。対応プラットフォームは、大きく分けてWindows版、UNIX版(Motif/GTK)、MacOS X版がリリースされています。
Eclipseは、GUIにSWTを利用しているほかに、ネイティブ実装に「JNI」(Java Native Interface)を用い、Javaクラスとネイティブコードとを結んでいます。例えばWindowsの場合はSWTのDLL1個と、org.eclipse.swt.*クラスを用います。LinuxやUNIX系のOSならば、それぞれにSWTのシェアードライブラリが用意されています。Eclipse 2.1からは、SWTが分離され、単独のライブラリとしての提供も始まりました。
SWTのメリットとは
SWTの台頭は、クライアントサイドで動作するJavaアプリケーションにとっては朗報です。SWTベースのJavaアプリケーションは、Java Web Startによる起動、インストールとも親和性が高いのです。
ところで、SWTの登場でJava標準のグラフィックスインターフェイスであるJFC/Swingの役目はなくなってしまったのでしょうか? 決してそんなことはありません。SwingとSWTそれぞれにメリットやデメリットがあるため、それらを生かしたプログラム開発が求められます。
以下にSWTとSwingを比較してみましょう。
●JFC(Swing)のメリット
- Pure Javaであること
- Sun標準のため、プログラム開発における情報量が多い
- GUI部品に関する GC(ガーベジ・コレクション)が自動化されている
- HTMLレンダリング可能なコンポーネントの存在(柔軟な見栄えを提供)
- Java2Dと親和性のあるところ
- さまざまな機能を持ったクラスが用意されていること
●SWTのメリット
- 高速に動作する
- 軽量(メモリ使用量が少ない)
- OS固有のGUIと同様の操作感を持つ(各部品のサイズが変化することがない)
- TTML(Term Tree Markup Language)によるフォーマット済みテキスト表示が可能
- ほかの商用ライブラリに比べ、CPL(Common Public License)のため商用アプリケーションに組み込みやすい
●SWT対Swingの取捨選択要因
- 完全なるマルチプラットフォーム性を必要とするのか? しないのか?
- OS固有のユーザーインターフェイスを持った見栄えを求めるのか?
- Javaアプリケーションとして環境ごとに異ならない統一された見栄えを求めるのか?
- 目的のアプリケーションの動作環境(OS)によって検討
Swingの利点は、動作環境に影響されることなく一貫したユーザーインターフェイスを提供できる点にあります。また、開発者にとってもプラットフォームごとの違いをあまり意識しないで済むのも利点の1つです。そのことは一方、ダイアログなどの見栄え、細かい点でOS固有のものとは若干違う操作をユーザーに強いているということも考えられます。
SWTはSwingのすべての機能を持ったものではありません。SWTが軽量・高速だからといって、完全に置き換えが可能なものではないことに注意すべきです。SWTでは、Swingの80%くらいの機能が比較的高速に動作するというイメージを持っていただくのがよいと筆者は考えています。移植性がありながら、同一のものではない、ActiveX関連など、OS固有のAPI群が存在するのもSWTの特徴です。
また、例えばMotif環境にはツリー表示を行うウィジェットは標準では存在しません。OSにないウィジェットはSWTがエミュレーションするものもあります。一方、Windows のカレンダーウィジェットのような、共通で必要ないものはSWTに含まれていません。
またSWTのネイティブ依存性により、Javaの利点であるGC(ガーベジ・コレクション)が完全に生かせないことも憂慮されます。SWTではdispose()メソッドを用いて明示的にGUI部品の扱いをプログラミングしなければいけません。
SwingとSWTが混在したアプリケーションを作成することは無理ではないですが、プロセスやイベントの管理の複雑さからいって、あまり得策とはいえません。Swing自体もJDK 1.2時代に比べ、J2SE 1.4 時代になって、相当高速に動作するようになりました。Javaアプリケーションの開発の始めの段階で、目的と機能を明確にし、使用するAPIを選択するのがよいでしょう。
SWTは万能ではない
Webアプリケーションの世界には「8秒ルール」と呼ばれる基準があり、常に高速な動作・レスポンスが求められています。単なるベンチマーク値で動作速度について議論するのではなく、実際の使用環境下で、速く動いているように感じられることも重要です。
以下のポイントに着目して、実際にSWTとSwingを比較してみましょう。
- GUIが生成するまでの時間が短いか
- GUIが表示するまでの時間が短いか
- 部品(例えばリスト)が長いとき、短いときで差が小さいか
SWTの場合、Swingに比べて表全体をスクロールし終わるのに約2分の1の速度で済みます。その一方で最初の画面が表示されるまでの時間は、Swingの方が速いのです。これは暗黙的にどちらかのAPIを盲信してはならないことを示唆しています。
JavaのGUIツールキットは「AWT」(Abstract Windowing Toolkit)のみの時代から、Netscapeの「IFC」(Internet Foundation Classes)、Microsoftの「AFC」(Application Foundation Classes)、そしてSun標準の「Swing/JFC」(Java Foundation Classes)の登場と、さまざまな変遷を経てきました。Eclipseの広がりとともにSWTも注目を浴びるようになってきました。PocketPC環境で動作するSWTなど、使われ方も広がってきています。
開発者、ユーザーにとって、どのGUIツールキットが目的に最適なのか見極めつつ、ユーザビリティに長けたアプリケーションを開発することが求められています。
次回は7月9日の公開予定です。
プロフィール
安藤幸央(あんどう ゆきお)
1970年北海道生まれ。現在、株式会社エヌ・ケー・エクサ マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元 CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG の情報源となるWebページをまとめている。
ホームページ:
http://www.gimlay.org/~andoh/java/
所属団体:
OpenGL_Japan (Member)、SIGGRAPH TOKYO (Vice Chairman)
主な著書
「VRML 60分ガイド」(監訳、ソフトバンク)
「これがJava だ! インターネットの新たな主役」(共著、日本経済新聞社)
「The Java3D API仕様」(監修、アスキー)
Copyright © ITmedia, Inc. All Rights Reserved.