Google Web Toolkit

Google Web Toolkit (GWT) は、Javaを使ってウェブ用Ajaxアプリケーションを開発できるオープンソースのJavaソフトウェア開発フレームワークである。Apache License 2.0でライセンスされている。

GWTは再利用可能で効率的なAjaxソリューションであることを強調しており、すなわち非同期RPC、履歴管理、ブックマーク、ブラウザ間の移植性の良さなどを特徴とする。

 歴史 
GWT version 1.0 RC 1 (build 1.0.20) は2006年5月16日にリリースされた。Googleは2006年のJavaOneでGWTを発表した。

+ リリース履歴 バージョン 日付 GWT 1.0  2006年5月17日 GWT 1.1  2006年8月11日 GWT 1.2  2006年11月16日 GWT 1.3  2007年2月5日 GWT 1.4  2007年8月28日 GWT 1.5  2008年8月27日 GWT 1.6  2009年4月7日 GWT 1.7  2009年7月20日 GWT 2.0  2009年12月8日 GWT 2.1.0  2010年10月19日 GWT 2.2.0  2011年2月11日 GWT 2.3.0  2011年5月3日 GWT 2.4.0  2011年9月8日 GWT 2.5.0  2012年10月25日 GWT 2.5.1  2013年3月9日 GWT 2.6.0  2014年1月30日 GWT 2.6.1  2014年5月10日 GWT 2.7.0  2014年11月20日 GWT 2.8.0  2016年10月20日 GWT 2.8.1  2017年4月24日 GWT 2.8.2  2017年10月19日 GWT 2.9.0  2020年5月13日 GWT 2.10.0  2022年6月9日

 開発 
GWTを使うとAjaxアプリケーションをJavaとJava用開発ツールを使って素早く開発できる。そして、そのアプリケーションを配布する際には、GWTクロスコンパイラがJavaからJavaScriptへの変換を行い、オプションで高度に最適化された（読みにくい）コードも生成できる。

GWTは単にインタフェースまわりの開発にとどまらず、JavaScriptを使った任意の高機能クライアントを構築できる。GWT開発者は、GWTは単なるライブラリではなく、新たなAjaxライブラリの実装というだけではないことを強調する。そのオープンエンドの哲学は徹底しており、多くのアーキテクチャ上の決定がGWTを利用する開発者に委ねられている。GWTの目的を記した文書を見ると、GWTの役割と開発者の役割をわかりやすく解説している。例えば、履歴トークンはGWTが管理するが、履歴トークンがアプリケーションの状態とどう対応するかは開発者に委ねられている。

GWTアプリケーションは以下の2つのモードで動作する。
 ホステッドモード : JavaバイトコードとしてJava仮想マシン (JVM) 上で動作する。一般に開発途中で利用するモードで、コードのホットスワップやデバッグをサポートしている。
 ウェブモード : JavaScriptとHTMLとして動作する。元は Java のソースコードである。開発完了後は、この形態で使用する。

GWTにはコマンド行ユーティリティapplicationCreatorがあり、GWTプロジェクトを開始するのに必要な全ファイルを自動生成する。Eclipse用プロジェクトファイルを生成することもできる。GWTを使ったIDEでの開発を支援するオープンソースのプラグインがいくつかある。例えばNetBeans向けのGWT4NB、Eclipse向けのCypal Studio for GWTやGoogle社が作成、提供しているGoogle Plugin for Eclipse、JDeveloper向けのgwtDeveloperなどである。

 コンポーネント 
主なGWTコンポーネントは以下の通り。

 GWT Java-to-JavaScript Compiler
 Javaで書かれたプログラムをJavaScriptに変換する。
 GWT Hosted Web Browser
 開発時にGWTアプリケーションをホステッドモードで動作させる（JavaScriptに変換することなく、JavaアプリケーションをJVM上で動作させる）
 JREエミュレーションライブラリ
 Javaの標準クラスライブラリでよく使われるクラス（java.langパッケージのクラスやjava.utilパッケージの一部のクラス）をJavaScriptで実装したもの
 GWT Web UIクラスライブラリ
 ウィジェット生成のためのカスタムインタフェースとクラス群

 機能 
 動的かつ再利用可能なUIコンポーネント : 実装に時間のかかる動的機能（ドラッグ・アンド・ドロップや仮想ツリー構造など）が予め実装されたクラスを使うことができる。
 単純なRPC機構
 ブラウザ履歴管理
 高機能Javaデバッガサポート
 ブラウザ間の非互換問題への対処
 JUnit統合
 国際化が容易
 JavaScript Native Interface (JSNI) を使って、人間が書いたJavaScriptコードとJavaソースコードを組み合わせることができる。
 Google のAPIをGWTアプリケーションで使えるようサポート（Google Gears など）。
 オープンソース
 JavaScriptではなくJavaを使って開発できるので、純粋なオブジェクト指向でアプリケーションを設計できる。誤字やデータ型の不一致など、JavaScriptで実行時に発生する主なエラーは、コンパイル時に検出できる。
 GWTコンパイラが生成するJavaScriptのコードは、人間が読みやすい形式とダウンロードが高速な（読みにくい）形式を選択できる。
 GWT向けの各種ライブラリをGoogleやサードパーティーが提供している。それを使ってGWTの機能を拡張可能。

 使用可能なウィジェット 
version 1.4（2007年8月）で提供しているウィジェットは以下の通り。
 HTMLプリミティブ（ボタン、ラジオボタン、チェックボックス、テキストボックス、パスワードテキストボックス、テキストエリア、ハイパーリンク、リストボックス、テーブルなど）
 プッシュボタン、トグルボタン
 メニューバー
 ツリー
 タブバー
 ダイアログボックス
 各種パネル (PopupPanel, StackPanel, HorizontalPanel, VerticalPanel, FlowPanel, VerticalSplitPanel, HorizontalSplitPanel, DockPanel, TabPanel, DisclosurePanel)
 リッチテキストエリア
 サジェストボックス（自動補完）
 デートピッカー（日付選択）

GWTにない一般的ウィジェットはサードパーティのライブラリで実装している。例えば、Ext GWT、GWT Component Library、GWT Widget Library、GWT-Ext、GWTiger、Rocket GWT などがある。

 関連項目 
 Google Developers

 脚注 

 参考文献 






 外部リンク 

 GWT homepage on Google code
 Official GWT blog
 Conference on GWT organized by Addison-Wesley, Prentice Hall and Pearson Education

Web Toolkit
Category:JavaScriptライブラリ
Category:JavaScriptウェブアプリケーションフレームワーク