35
Google Web Toolkit のすすめ 浜本 階生

Google Web Toolkitのすすめ

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Google Web Toolkitのすすめ

Google Web Toolkitのすすめ浜本 階生

Page 2: Google Web Toolkitのすすめ

自己紹介

• 浜本 階生(はまもと かいせい)

• http://twitter.com/kaiseh 

• http://d.hatena.ne.jp/kaiseh/ 

Page 3: Google Web Toolkitのすすめ

自己紹介ビジュアルブログ検索エンジン『Blogopolis』

http://blogopolis.jp/

Page 4: Google Web Toolkitのすすめ

今日のテーマ

• GWTとは

• GWTアプリケーションの開発

• GWTアプリケーションの実行とテスト

Page 5: Google Web Toolkitのすすめ

GWTとは

Page 6: Google Web Toolkitのすすめ

Google Web Toolkitとは

• Google製のWebフレームワーク

• JavaコードだけでAjaxアプリを構築できる

Page 7: Google Web Toolkitのすすめ

通常のAjax開発

• JavaScriptライブラリ

• jQuery, Dojo, mootools, ... 

• デバッガ

• Firebug, IE Developer Toolbar, ...

Page 8: Google Web Toolkitのすすめ

Ajax開発の問題点

• JavaScriptは大規模開発が難しい

• クロスブラウザ対応

• Eclipse, NetBeans並の成熟度を持つIDEの不在

Page 9: Google Web Toolkitのすすめ

GWTの「離れ業」• JavaのソースコードをJavaScriptにコンパイル!• java.lang.*, java.util.*の主要なJava APIをエミュレート• クライアント側ではコンパイル済みの

JavaScriptコードが動く✓ もちろん、サーバ側ではJavaクラスのロジックをそのまま動かせる

Page 10: Google Web Toolkitのすすめ

GWTコンパイラによる最適化

• 圧縮、難読化• クロスブラウザ• コード分割(後で説明)• 画像の連結

Page 11: Google Web Toolkitのすすめ

GWTへの追い風•クラウドと課金• CPU課金、トラフィック課金

•ロジックは極力クライアント側で実行したい• HTML5 

• Canvas, WebSockets, Web Storage, ... 

• JavaScriptによるRIAの可能性が広がる

Page 12: Google Web Toolkitのすすめ

WebGL + GWT

http://code.google.com/p/quake2-gwt-port/

Quake II GWT Port

Page 13: Google Web Toolkitのすすめ

GWTアプリケーションの開発

Page 14: Google Web Toolkitのすすめ

Google Plugin for Eclipse

• GWTおよびGAEの開発を支援するEclipseプラグイン

• 完成度が高い!

Page 15: Google Web Toolkitのすすめ

Google Pluginを利用してGWTアプリをGAEにデプロイ

(デモ)

Page 16: Google Web Toolkitのすすめ

画面のレイアウトButton sendButton = new Button(“send”);

TextBox nameField = new TextBox();

Label errorLabel = new Label();

...

panel.add(nameField);

panel.add(sendButton);

...

Page 17: Google Web Toolkitのすすめ

イベントハンドラ

sendButton.addClickHandler(

new ClickHandler() {

public void onClick(ClickEvent e) {

// クリック時の処理 }

});

Page 18: Google Web Toolkitのすすめ

UiBinder

• XMLによる宣言的レイアウトも可能

New in 2.0

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'    xmlns:g='urn:import:com.google.gwt.user.client.ui'>  <g:HTMLPanel>    Hello, <g:ListBox ui:field='listBox' visibleItemCount='1'/>.  </g:HTMLPanel></ui:UiBinder>

Page 19: Google Web Toolkitのすすめ

UIコンポーネントSuggestBox

DatePicker

RichTextArea

MenuBar

Page 20: Google Web Toolkitのすすめ

外部UIライブラリの利用

Ext GWTExt JSと同じLook & Feel

http://www.extjs.com/products/gwt/

Page 21: Google Web Toolkitのすすめ

Google APIとのUI連携• Google Maps API for GWT

• Google Chart Tools for GWT

• etc

Page 22: Google Web Toolkitのすすめ

Ajaxの記述

• 従来、JavaScriptとJavaの橋渡しが必要だったクライアント - サーバ間通信

• Javaで全てを記述できるGWTのメリットが最大限に発揮される

Page 23: Google Web Toolkitのすすめ

GWT RPC

RemoteService RemoteServiceImpl

RemoteServiceAsync

非同期インタフェース

1対1対応 (サーブレット)

サービスインタフェース サービスの実体

実装

クライアント

呼び出し

コールバック

Page 24: Google Web Toolkitのすすめ

非同期インタフェース

public interface AddService extends RemoteService {

int add(int a, int b);

}

public interface AddServiceAsync {

void add(int a, int b, AsyncCallback<Integer> callback);

}

対応関係はGoogle Pluginがチェックしてくれる

Page 25: Google Web Toolkitのすすめ

RPCの実行service.add(a, b, new AsyncCallback<Integer>() {

public void onSuccess(Integer result) {

// 成功時の処理 }

public void onFailure(Throwable caught) {

// 失敗時の処理 }

});

Page 26: Google Web Toolkitのすすめ

JSNI (JavaScript Native Interface)

• JavaScriptに直接アクセス可能

• nativeキーワードとコメントを活用した記法

public static native String encode(String s) /*-{ return encodeURIComponent(s);}-*/;

Page 27: Google Web Toolkitのすすめ

国際化public interface MyMessages extends Messages {

public String edit();

public String delete();

}

edit=編集...delete=削除

edit=Edit...delete=Delete

MyMessages_ja.properties MyMessages_en.properties

Page 28: Google Web Toolkitのすすめ

コード分割 New in 2.0

GWT.runAsync(new RunAsyncCallback() {

public void onSuccess() {

// ここに記述するコードに相当する // JSファイルは後からロードされる }

public void onFailure(Throwable caught) {

}

});

Page 29: Google Web Toolkitのすすめ

履歴管理• Ajaxアプリで「戻る」ボタン対策は悩ましい問題

• GWTではURLのフラグメント部をトークンとして利用し、履歴管理を実現http://example.com/foo/Foo.html#state1

• 実際の状態変更処理はアプリケーション側で実装する

Page 30: Google Web Toolkitのすすめ

GWTアプリケーションの実行とテスト

Page 31: Google Web Toolkitのすすめ

開発モード• 開発中のアプリを一般のブラウザでテストするためのモード

• JavaScriptへのコンパイル不要

• ブラウザを再読み込みすると最新のJava

コードを反映

New in 2.0

Page 32: Google Web Toolkitのすすめ

Speed Tracer

• パフォーマンス解析ツール• Chromeのアドオン• GWT以外のWebアプリにも使える• 原因別のボトルネック分析が可能• DOMの操作• ネットワーク• 描画

New in 2.0

Page 33: Google Web Toolkitのすすめ

Mavenプラグイン

• GWTコンパイラの実行

• 非同期インタフェースの自動生成• 国際化インタフェースの自動生成• etc

http://mojo.codehaus.org/gwt-maven-plugin

Page 34: Google Web Toolkitのすすめ

まとめ• GWTはクラウド、HTML5時代に有望な

Webフレームワーク

• GWT RPC、国際化、履歴管理など有用な機能

• プラグイン、外部ライブラリなど充実した周辺サポート

Page 35: Google Web Toolkitのすすめ

ありがとうございました