Google Waveの開発ツールとして使われているという
Google Web Toolkit。さて、いかほどのものか、ちょっと触ってみることにした。
いや、正確にはGoogle Web Toolkitは出始めの頃に一度味見はしているが、その時は挫折した。挫折した理由を詳しくは覚えていないが、恐らく以下のようなことだったんだろうと思う。
・当時持ってたPCでEclipseを動かすのは少し荷が重かった
・当時のGWTコンパイラの吐くコードがいまいちだった
(結局、自分でJSを書く方が良かった)
・JavaとJSで挙動が変わり、デバッグが困難だった
(特に、Javaでは問題無く動くのに、JSで躓くケース)
Google Web Toolkitでググると2-3年前の紹介エントリーばっかりヒットして、最近の日付ではほとんどblogの記事がヒットしないことから、世間の評価も大体似たようなものだったのだろうか?ようするに、日本ではGoogle Web Toolkitなんてほとんど使われていないのだろう。
誰も使わないから情報が少ない、情報が少ないからますます使われない、という負のスパイラルに陥ったツールに何で今更注目したのかと言えば、Google WaveというかHTML5アプリケーションの開発ツールとして大化けする可能性があると思ったからだ。
ご存知のように、HTML5によってネイティブアプリと同等の機能を持つWEBアプリケーションを開発することが可能になる。もちろん、実際にはまだまだネイティブアプリとの差は大きいのだがユーザ体験を別にすれば、WEBアプリでも済むんじゃないかと思われるアプリが多いのも事実のように思われる。
そんな、HTML5のアプリケーションを開発するにあたって、開発言語がJSというのは個人的にはかなり心もとない。しかし、GWTによってJavaで開発でき、しかもクロスブラウザ対策はコンパイラの方で自動的にケアされるのだとすれば、それはかなり嬉しいことに違いない。
そう言えば、これだけWEBアプリケーションに傾倒しているGoogleが、次期ECMA Scriptの標準化の際にES4支持に回らなかったのは、GWTのコンパイラを対応させる負担を考えたことと、ハナからJSでアプリを記述するつもりが無かったからに違いない?
そんな個人的に赤丸急上昇中のGWTだが、HTML5に本格的に対応するのはGWT2.0かららしい・・・
GWT2.0の目玉機能としては、
・OOPHM
GWTの泣き所はコンパイルタイムらしい。なので、開発段階では、いちいちJSにコンパイルせず、これまでは、ホストモードブラウザを使ってデバッグをしてた。これはブラウザのような体裁をしてはいるが、実際にはGWT/Javaのデバッグ専用アプリだ。
こいつの問題は、本物のブラウザじゃないので、各種プラグイン(GearsとかFireBugとか)などが使えない点だ。でも、OOPHMを使うとブラウザ上でGWT/Javaを実行できるようになるらしい。こいつがどれくらいありがたいのかは、実際に大掛かりなアプリを作ってみないとわからんだろうな・・・
・コンパイル時画像処理
何のことだ?と思ったが、どうやら画像リソースをコンパイル時にいい感じに処理してくれるみたいだ。例えば、複数のアイコン画像をレイアウトは崩れないように1つにまとめてくれるとか。これによって、実行時に画像のロード時間の短縮をはかるようだ。すごいね。
・実行時ロード
アプリケーション開発者が処理の切れ目を指定することにより、JSを適切に分割し、アプリの初期ロードサイズを押さえる。分割されたコードは、その処理が本当に必要になった時点で読み込まれ、実行される。うーん、リーズナブル。
・XML形式でGUIを記述
UiBinderという機能?により、Flex開発者にはお馴染みのMXMLのような感じで、GUIをXML形式で記述できる。個人的にはFlexアプリケーションを作る場合でも、なるべくMXMLは使わない派なので、注目度は低いのですが、デザインとロジックの分離という意味では、今風な開発ができるようになったということだろうか?
まぁ、後付けだからか、MXML + ActionScriptほど洗練された書き方では無いようだ。
と言ったところだが、全て以下のビデオの受け売りなので、詳細はご自身でもお確かめください。(約1時間の英語でのビデオなので、多分、勘違いしてるところは沢山あると思われ)
http://code.google.com/intl/ja/events/io/sessions/GwtPreviewGoogleWebToolkit2.html
GWTでは、まだチュートリアルを動かす以上のことをやっていないので、実際の開発にどれくらい有効かの検証はできていないけど、Googleは来るHTML5に向けて着々と手は打ってる感じやね。
ということで、GAE/Jもあるし、もうちょっとGWTで実開発でどんなこと出来るのか、しばらく使ってみて実験することにする。
実際、GAE/JとGWTは相性がかなり良さそうである。全てJavaで記述できることから、まずは全ての処理を記述し、プロファイリングの結果、クライアントサイドで実行するには重たい処理などを簡単にサーバーサイドに持って行くことが出来そうだ。
Google IO 2009でも、処理をクライアントとサーバーの両方で実行可能なように作っておき、クライアントで実行時に処理時間を計測し、時間がかかり過ぎる場合には、次回の実行時からサーバー側で行うというデモをやっていた。ユーザーはもちろん、どっちで実行しているのかなど気にする必要は無い。
個人的にも、クライアント側のUIをFlash/Flexで作る場合は、これまで通りのGAE/Pythonで作り、GAE/JはHTML5アプリを作る場合に使おうと思う。