= GWTの概要 = ※以下は現在の私の理解を元にしているものであり、正当性は保証できません。 GWT(Google Web Toolkit)はその名の通り、Googleがリリースするウェブアプリケーション作成のためのツールである。 特にEclipseに限定しているわけではなく、コマンドラインツールとしても使用できるのだが、ここではEclipseを前提とした開発環境を見てみる。 == 目的と特徴 == 主には、クライアントとしてAjaxウェブアプリケーションと、そのサーバサイドの両方を開発することを目的とする。 クライアントサイドのAjaxアプリは当然、htmlとjavascriptによるものである。特徴的な事柄としては以下。 === Javaからjavascriptへの変換 === * (ライブラリの中身に立ち入らない限り)javascriptは一切記述する必要が無い、すべてをJavaで記述することができ、Javaコードはjavascriptコードに変換される。つまり、Java+htmlで記述したクライアントコードがデプロイ時にはjavascript+htmlとなる。 * 開発環境においては、Javaとしてデバッグを行うことができる。ステップ実行さえも可能。 === GWT Deisgner === * Javaのウィジェットとして標準的なのものが用意されており(当然これらもjavascriptに変換される)、それらのレイアウトを行うためのGUIビルダが付属している。 * 上記のウィジェットが不足であれば、サードパーティ製のウィジェット(SmartGWT,GXT等)を使うことができる。 === RPC === * クライアントサイドとサーバサイドのRPC(Ajax通信)は独自の方式がサポートされている。これもソース上はJavaからJavaへの呼び出しであるため、異言語間のインターフェース変換を考慮する必要がない。シリアライザーションはJava標準の形式で記述できる模様。 * ただし、このRPCは必ず非同期で行われる。つまり、サーバサイドをコールしてその応答を待つことはできない(おそらくこれは単一スレッドしか使用できないjavascriptの制約によると思われる)。 === サーバサイドとデプロイ === * サーバサイドは通常のサーブレットコンテナ向けのものと、App Engineのものとに対応している。 * App Engine用のデプロイはEclipseから簡単にできる模様。 * サーブレットコンテナのデプロイ用のwarファイルの作成も(Eclipseからは若干面倒だが)可能。 === htmlの数 === 妙な表題だが、この環境では基本的にhtmlファイルはただ一つであることを前提にしており、htmlページ間を遷移することは想定していない(サードパーティ製のライブラリではそれができるものもある)。複数の「ページ」が必要であるなら、それらをJava製のウィジェットとして作成し、一つのhtml上で紙芝居のように切り替える必要がある。 === 表示上の制限 === GWTは、Java上のウィジェットに例えると、Swingではなく、むしろSWTの概念に近い。 Swingでは、表示されるすべてについてOSの機能を使わずに、「描画」を行っていた。例えば、ボタンの浮き出し形状などもSwingによる「描画」でしかない。これに対してSWTは「OSが用意するウィジェット」のラッパであるので、例えばボタンの形状についてOSの提供する形状以外の独自の形状を「描画」することはできない。 GWTはこれに似ている。GWTによるウィジェットはjavascriptコードに変換され、最終的にはjavascriptによるブラウザへの命令となり、それによってHTML要素やCSSの操作を行うため、(基本的には)ブラウザの用意する機能以上のものを実現することはできない(できなくもないだろうが、遅くなると思われる)。 ※javascript使いには普通のことらしいが、「ブラウザ上にロード済のHTMLやCSSを操作する」という概念になじみの無いものにはわかりにくいのだが、SWTのネイティブコンポーネントがHTML/CSSに置き換わったものと考えればよい。