先月の初旬、SmartGWT 1.0がリリースされた(リンク)。SmartGWT(リンク)はSmartClient(リンク)のJavaScriptコンポーネントを使ってGWTアプリケーションを構築するためのAPIである。SmartGWTはSanjiv Jivan氏(リンク)によって作られた。Sanjiv氏はgwt-ext(リンク)の開発をけん引した開発者で、その後ライセンスに絡む問題により参加を取りやめていた。
InfoQではSanjiv Jivan氏とSmartGWT、そして新しいプロジェクトに対する考え方、gwt-extとの比較、新しいプロジェクトの計画などについて話をした。
SmartGWTが提供する主な機能は?
SmartGWT(リンク)はGWTに対してSmartClient (リンク) AJAX RIAプラットフォーム向けの完全なAPIを提供します。SmartClientは完全なウィジェットを提供するだけではなく、エンタープライズ・アプリケーションの構築時に生じる様々な難題も解決するという点でその他のAjaxライブラリとは一線を画します。データをロードして画面に表示するだけではなく、ユーザによる変更をサーバに通知し、変更によって生じる処理も行います。サーバ側での入力チェック、エラー処理、複数のコンポーネントにまたがるキャッシュの更新処理などです。
SmartGWTのデータと連動するウィジェット - ツリー、グリッド、カレンダなど - はツリーの並べ替え、カレンダ上でのドラッグといったユーザ操作へ包括的に対応していて、カスタマイズが容易で簡単なプロトコルによってデータを更新するために必要なサーバへのリクエストを自動で生成します。このことはSmartGWTの真価を理解するための鍵です。より詳細な情報についてはこちら(リンク)で確認できます。
他にもいくつか特徴的な機能があります。
- SmartGWTは必要に応じてサーバから行データを遅延ロードするだけでなく、ユーザが水平方向にスクロールした際に列データを遅延ロードする活動的なグリッド(リンク)*を提供します。多くのブラウザは多数の列を持ったテーブルのレンダリングを適切に処理出来ませんが、SmartGWTが提供するグリッドの遅延レンダリング機能はパフォーマンスを犠牲にすることなく大きなテーブルの表示処理を簡単にします。TreeGridは複数列、データ編集、ノードの遅延ロードをサポートし、さらに仮想スクロール機能はとても強力で多くのアプリケーションが必要とする機能でしょう。
- グリッドのソートとフィルタリングに対する順応性(Adaptive sorting and filtering)はとても素晴らしい機能です。データがローカル・バッファに納まる数にまでフィルタリングされると、それ以降のフィルタリングについてはサーバとの通信を行わずローカルにあるデータが利用されます。そしてローカルにないデータが必要になるとサーバを呼び出す状態へ透過的に戻ります。この機能はデータベースへの通信を削減しユーザに対して即座に応答することで、実世界での応答性とエンタープライズ・アプリケーションにおけるパフォーマンスに大きな違いをもたらします、
- 再ログイン。認証を要求するアプリケーションで、セッションがタイムアウトした状態でリクエストが発生した際にSmartGWTはユーザを再ログインへ誘導し認証に成功したらデータの損失なく元々のトランザクションを再開するようなワークフローを簡単に実装できるようにします。
SmartGWTとgwt-extの主な違いは何ですか?
それぞれの背後にあるライブラリが提供する機能に明らかな違いがあるのに加え、gwt-extではExtJSの一貫性のないAPIと型破りのレンダリングを"修正"するためのコードがかなり存在しています。一方SmartClientでは全てがあるべきように機能します。ウィジェット・コンポーネントの階層構造には一貫性があり、オブジェクト指向的なのでSmartGWTへの直接的な変換がとてもよく機能します。
SmartGWTは標準的なGWT 1.6のイベントAPIを使っているので以前のライブラリと比較するとより美しく柔軟性があります。結果としてもはやリスナやアダプタといったクラスを扱う必要はなくなりました。
もう一つの重要な違いはSmartGWTはSmartClientによって完全にサポートされているので、ユーザが機能追加を要求したり、バグを素早く処理したりサポートやトレーニングを受けることができ、妨害を受ける心配がないということです。さらに、ユーザは商用利用に向いているLGPLライセンスのライブラリの利益を享受することができます。これが何よりも優れています。
ExtJSとSmartClientの両方に取り組んでみて、二つのコンポーネント・フレームワークをどのように比較しますか?
ExtJSは確実に機能が豊富で鋭さがあります。だからこそExtがLGPLであった時代に私はgwt-extの開発を始めました。しかし、GWT-Extに取り掛かってみると多くの窮地や罠、未実装のレンダリング部分そして一貫性のないクラス階層がExt内に見つかったのでこれらの問題の一部を"修正"するためのコードを追加する必要があったのです。例えば、いくつかのレイアウトでは動的にコンポーネントを追加することができる一方で主要なレイアウトのいくつかではそれが出来ません。またウィジェットのプロパティの大部分がレンダリング後には変更できないというのも大きな問題の一つです。そしてユーザはしばしばプロパティを設定する必要が生じるのですが、その際にはメソッドを呼び出して設定する必要があるのです。
SmartClientは既に過去8年にも渡って開発されてきたものでとても安定していて事実上バグがありません。コンポーネント・モデルは一貫していてレンダリング後のプロパティ変更に対してとても動的に対応していて変更が即座に反映されます。そしてとても多くの機能があり、サーバ統合もよく処理されています。SmartClientのフォーラム(リンク)を見ればすぐに以下のような点が明らかになるでしょう。
- 「この機能は使えません/サポートしていません。」という記述を見ることはまずないでしょう。ユーザが求めるほとんど全てのものが手に入ります。
- 報告されているバグ件数はほぼゼロです。
- 回答されていない質問はありません。
さらに、Showcase(ショーケース)にあるサンプルのソースコードを見るとほんの少しのことで多くのことが出来るということが分かるでしょう。更新情報をサーバに送信することもできる一覧・詳細画面(master-detail screen)は、再利用可能なDataSource(データソース)の定義を使えばたった10行足らずのコードで作ることができます。
SmartGWTが一から作られたものではなくSmartClientのラッパーであることについてユーザに伝えたいことはありますか?
よくユーザはGWTで書かれたサード・パーティ製のライブラリは全て劇的に速く、メモリ・リークは絶対になく、全てのブラウザで完全にレンダリングできるという勘違いをしています。例えばGWTで一から書かれたサード・パーティ製のTableGrideはとても貧弱な上に、全てのブラウザで一貫した表示がされる訳でもありません。確かにGWTにはメモリ・リークを抑制するような側面もありますが、このことはGWTで書かれたサード・パーティ製のコードが100%リークの心配がないということを意味している訳ではないのです。大切なことはフレームワークのコードがよく出来ていて、慎重にチューニングされ、よくテストされているということです。.
真実は、SmartClientは速く、安定していてSmartGWTにとって素晴らしい基盤を提供しているということです。事実、私の経験からするとSmartClientの方が純粋にGWTだけで書かれたサード・パーティ製のライブラリよりもブラウザ間の不一致によく対応しています。SmartClientはオブジェクト指向に基づくスキン・システムによって精密で一貫したクロス・ブラウザなレイアウトを提供するので、CSSに関する深い経験やブラウザの特異性に関する知識を必要としません。.
あなたは5月にExtJSの認めがたいライセンス変更(リンク)のせいでgwt-extプロジェクトから離れる決意をしたとブログで表明しました。その判断はコミュニティにどのように受け止められたのでしょうか?
コミュニティはとてもよく理解してくれましたし、gwt-extの他のチーム・リーダ達もステップ・アップしてよい成果を上げています。一番大切なのはコミュニティが成長したということで、ユーザが他のユーザを援助しているのを見るのは素晴らしいことです。
gwt-extチームのリーダ達と話す機会があったのですが、彼らはgwt-extに限界を感じたユーザにとってSmartGWTへ移行する選択肢があるというのはとても健全なことであると表現していました。以降に興味があるユーザには援助します。もちろん、gwt-extプロジェクトも今のまま継続されるでしょう。
SmartGWTはあっという間に1.0まで進化しました。つい5月に開発を引き受けたばかりなのにです。gwt-extの開発で経験したことでSmartGWTに役立ったことは何かありましたか?
オープンソース・プロジェクトに貢献するということはほとんどの場合自己満足と、他の多くのユーザに使われるプロジェクトに携わることができるという「快感」でしかありません。さらに個人的な開発に役立つ貴重な学習経験にもなります。
技術的な側面からすると、SmartGWTのユーザが直面した様々な課題への対応にgwt-extの開発を通して学んだ内容を活かすことが出来ました。そして政治を持ち込まないプロジェクト、興味が湧くプロジェクトを選択することが重要であるということにも気が付きました。
Extのオーナーである合同会社(LLC)からしつこくメールが送信されてくるのは苦痛でした。彼らは私がもし彼らの計画に従わなければ私を相手取って訴訟を起こすと脅してきたのです。例えば彼らは私にGPLへの変更を要求し、さもなくば私のライセンス違反を荒探しすると言うのです。加えて、詳細は何も教えてもらえませんでした。また、彼らがgwt-extのフォーラムに投稿できるようにしないと24時間以内に彼らの弁護士から連絡があるという脅しもありました。彼らのライブラリの成長と人気を支えるために多くの努力を捧げてきた結果がこれでした。
一方これとは対照的に、SmartClientの人達はSmartGWTを全面的に支援してくれています。技術的な支援と彼らの傘下にあるSmartGWTにとっての安全な場所を提供してくれています。さらにLGPLというライセンスを変更するつもりはないという内容の公式な文書も書いてくれました。自分が最高のものだと考える技術製品に再び取り組むことが出来ることにとても満足しています。