Google Web Toolkit 2.0

52
Google Web Toolkit 2.0 Kyoto GTUG http://kyoto-gtug.org/ Daisuke Yamashita [email protected]

Transcript of Google Web Toolkit 2.0

Page 1: Google Web Toolkit 2.0

Google Web Toolkit 2.0

Kyoto GTUG http://kyoto-gtug.org/

Daisuke Yamashita [email protected]

Page 2: Google Web Toolkit 2.0

Google Web Toolkit とは?

• Google Web Toolkit (GWT) は、ブラウザベースのAjaxアプリケーションをJavaでコーディングできる開発ツールです。

• ブラウザ間の非互換性を埋め、JavaScriptおよびXMLHttpRequestの専門家でないと開発

が難しい高性能なウェブアプリケーションの生産的な開発を可能にすることを目標に開発されました。

Page 3: Google Web Toolkit 2.0

Google Web Toolkit とは?

• また、GWTはオープンソースで、完全に無料

で利用することができ、すでに世界中の何千もの開発者によって利用されています。

Page 4: Google Web Toolkit 2.0

GWTはどこで使われているの?

• 新しいバージョンのAdWordsやGoogle Waveといった数多くのGoogle製品がGWTによって開発されています。

Page 5: Google Web Toolkit 2.0

GWTの仕組み

• GWTは、Javaで書いたプログラムをJavaScriptにコンパイルします。

• コンパイルされたJavaScriptのコードは、さまざ

まなブラウザで最適に動作するように出力されます。もちろん、AndroidやiPhoneでも最適に動作します。

Page 6: Google Web Toolkit 2.0

Google Developer Day 2008の資料

Page 7: Google Web Toolkit 2.0

最適の意味は・・・

• 同じ作業を実現する方法が複数ある場合、各ブラウザで最速に動作するAPIをGoogleが調査しました。

• そのページにアクセスしたブラウザで最速に動作するようにAPIが選択されます。

Page 8: Google Web Toolkit 2.0

GWTによる開発

Page 9: Google Web Toolkit 2.0

GWTによる開発

実行

最適化

デバッグ

コーディング

Page 10: Google Web Toolkit 2.0

GWTによる開発

• GWT SDKではJava APIとWidgetのセットが提供されます。

– このWidgetを組み合わせて画面を構築します。

Page 11: Google Web Toolkit 2.0

GWTによる開発

• DOM操作やXMLHttpRequestコミュニケーショ

ンを直接コーディングするよりも、高いレベルの抽象化になっているために、生産性が非常に高いです。

Page 12: Google Web Toolkit 2.0

GWTによる開発

• また、Widgetは組み込みのもの以外も使うことができ、現在では多数のWidgetプロジェクトが立ち上がっています。

Page 13: Google Web Toolkit 2.0

GWTによるデバッグ

• GWT developer pluginを使うことで、好きなIDEでAjaxアプリケーションをデバッグできます。

• GWT developer pluginは、JavaScriptとJavaバイトコードとの間をつないでいるので、Javaのプログラムを事前にコンパイルする必要はありません。

• これは、従来のようにJavaScriptを直接、「編集ーリロード」するのと同じように扱えます。

Page 14: Google Web Toolkit 2.0

GWTによる最適化

• GWTには、ウェブアプリを最適化するための2つのパワフルなツールが含まれています。

• GWTコンパイラ – 不要なコードの除去 – コードの分割

• 1つのソースコードを複数のJavaScriptに分割し、ページの表示を高速化する

• Speed Tracer – Chrome Extension – ボトルネックはJavaScriptに限りません。ブラウザのレイアウト処理やCSSはしばしば奇妙な動きをします。Speed Tracerはボトルネックとなっている処理を見つけるのに役立ちます。

Page 15: Google Web Toolkit 2.0

実行

• GWTは、Javaのソースコードをコンパイルし、

さまざまなブラウザで最適に動作するような、JavaScriptファイルを生成します。

• もちろん、AndroidやiPhone向けにも最適化されます。

Page 16: Google Web Toolkit 2.0

SDKの入手

• SDKは以下から入手可能です。

– http://goo.gl/e2j0

Page 17: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 18: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 19: Google Web Toolkit 2.0

Development Mode

• GWTの最も大きな変更の1つはDevelopment Modeの追加です。 – これは、かつてHosted Modeと呼ばれていたものの拡張です。

• 2.0以前のGWTでは、アプリケーションをデバッグするためのHosted Modeは、”hosted browser”と呼ばれる専用のブラウザが提供されていました。

• GWT2.0では、”Google Web Toolkit Developer Plugin”がサポートしている一般的なブラウザを利用する事ができます。 – これからのデバッグでは、Safari, Firefox, Internet Explorer,

Chromeなど好きなブラウザを利用する事ができます。

Page 20: Google Web Toolkit 2.0

Development Mode

• これの意味する所は、ブラウザと同じマシン上にソースコードが存在する必要がない!という事です。

– Linux上で開発をしている開発者は、アプリケーションをInternet Explorerでテストする時でもLinux上で開発を続け、別のWindowsマシンでテストをする事ができます。

– http://goo.gl/QV26

Page 21: Google Web Toolkit 2.0

Development Mode

• これの意味する所は、 Firebugs(Firefox)やInspector(Safari)といった各ブラウザに実装さ

れている素晴らしいツールを利用する事ができるという事です。

Page 22: Google Web Toolkit 2.0

Development Mode

• さらに!Development Modeでは、マルチブラウザ・デバッギングをサポートしています。

– 1つのデバッグセッションに複数のブラウザから接続する事ができます。

Page 23: Google Web Toolkit 2.0

Development Mode

• 新しいGoogle Plugin for Eclipseはストリームラインをサポートしました。

– Development Modeの起動・制御

–ログの表示

• また、手動でDevelopment Modeを起動することも可能です。

– Eclipse以外のIDEを利用する場合には、このSwingベースのユーティリティを使います。

Page 24: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 25: Google Web Toolkit 2.0

Speed Tracer Performance Analysis

• Speed Tracerはウェブアプリケーションにおけるパフォーマンスの問題を特定し、修正するのを助ける新しいツールです。

• アプリケーションが走るときに、ブラウザの情報取得用の接続ポイントから情報を取得し、視覚的な統計情報として表示します。

• Speed Tracerを使用すると、あなたのアプリケーションのどの部分に時間がかかっているか、視覚的に確認する事ができます。

Page 26: Google Web Toolkit 2.0

Speed Tracer Performance Analysis

• Speed Tracerは以下のような項目について分析します。 – JavaScript構文解析と実行 – ブラウザレイアウトと描画 – CSSスタイルの再計算とセレクターマッチング – DOMイベントのハンドリング – ネットワーク・リソースの読み込み – Timerのトリガー – XMLHttpRequestコールバック – and more…

• Speed Tracerについて http://goo.gl/F8MZ

Page 27: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 28: Google Web Toolkit 2.0

Developer Guided Code Splitting

• GWT2.0では、高速化のための分割ポイントを指定できるようになりました。

• ある動画を見るために、最後までダウンロードを待つ事を想像してみてください。きっと耐えられないハズです。それは、最近のリッチなAjaxアプリにも言えないでしょうか?

• コード分割は、最初の実行に必要な最小のコード片だけをダウンロードして、残りは必要に応じてダウンロードします。

Page 29: Google Web Toolkit 2.0

Developer Guided Code Splitting

• たとえば、メールアプリケーションを作成していると想像して下さい。

• あなたのアプリケーションには、メールを読み書きする機能以外にも、ユーザー情報の設定やコンタクトリストの管理など、たくさんの機能があるでしょう。

• コード分割を使うと、アプリケーションのコア機能だけをダウンロードするようにデザインできます。これによって、ユーザはより速くメールを書き始めることができます。

Page 30: Google Web Toolkit 2.0

Developer Guided Code Splitting

• ユーザがそれを必要とするまで、追加機能部分のコードはダウンロードされません。

• これを実装するのは非常に複雑です。でも、GWTのコード分割を使うと簡単に実装できます。

Page 31: Google Web Toolkit 2.0

Developer Guided Code Splitting

• コード分割の実装は、分割ポイントを作成する魔法のメソッド「GWT.runAsync()」を利用するだけです!

• これは、簡単で安全にコードを分割できます。

• GWTコンパイラは自動的に、残りのコードを必要に応じてダウンロードするようにコードを吐き出します。

• GWTコンパイラは、手動では難しい、依存関係も自動的に解消するように、必要なコード片をダウンロードするコードを吐き出します。

• 開発ガイド:http://goo.gl/T6yh

Page 32: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 33: Google Web Toolkit 2.0

Compiler Optimizations

• コード分割を加えることで、JavaScriptを生成する能力に根本的な改良が加えられました。

• 最新のGWTコンパイラには、コンパイル後のJavaScriptをより小さく、より速くするように、従来より強力な最適化エンジンが搭載されました。

• 古いGWTプロジェクトは、簡単にGWT2.0プロジェクトへ移行できるので、既存のGWTプロジェクトを再コンパイルするだけで、実行速度が上がります。

Page 34: Google Web Toolkit 2.0

Compiler Optimizations

• GWT2.0は、いくつかのインパクトのある最適化を含んでいます。

• すでに、コンパイルされたJavaScriptのコードが3%から20%圧縮された事が報告されています。

Page 35: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 36: Google Web Toolkit 2.0

Draft Compile

• 開発時にどうしても、JavaScriptにコンパイルする必要があるときには、-draftCompileオプションを利用しましょう。

• いくつかの最適化をサボることによって、高速にコンパイルします。

– もっとも、Development Modeの導入によって、その必要性はないと思いますが。。。

Page 37: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 38: Google Web Toolkit 2.0

Declarative User Interfaces

• GWTはUiBinderを使用することで、ユーザインターフェイスを現在のプログラムによる構築の代わりに、XMLで構築できるようにしました。

• XMLファイルは以下のような機能をサポートし、UIコードを作るより小さく、読みやすく、メンテも簡単です。何より高速に開発できます。 – CSS名の衝突を心配する必要がありません。

– より速くて、効率的なアプリケーションのために、HTMLにGWTウィジットを混ぜて下さい。

– 好都合なことに、リソースと国際化を一元管理できるようになりました。

Page 39: Google Web Toolkit 2.0

Declarative User Interfaces

• UiBinderは、プログラマとUIデザイナーが共同作業するのにすばらしい方法を与えてくれます。

• XML,HTML,CSSを使えることで、 UIデザイナーはJavaに悩む必要はありません。

• 例えば、プログラマはウェブデザイナーが作成したHTMLモックをコピ&ペーストするだけです。

Page 40: Google Web Toolkit 2.0

Declarative User Interfaces

• また、GWTの開発者は、何人かのウェブデザイナーがUIデザインを実験するとき、直接UiBinder XMLテンプレートを編集して、Development Modeの速い「編集/リロード」の繰り返しを行っているのを見ました。

• HTMLをデザインするより、インタラクティブなウィジットを使用する方が楽しいです。

Page 41: Google Web Toolkit 2.0

Declarative User Interfaces

• また、UiBinderはコンパイル時に.ui.xmlと.java間の全参照をチェックするので、IDのtypoのような微妙なバグを防ぐのを助けてくれます。

• 最新のGoogle Plugin for Eclipseは、UiBinderを便利に利用できるように、ウィザード、コード補完、赤い下線による問題の指摘、さらにリファクタリング機能を提供します。

• UiBinderを利用したメールアプリ:http://goo.gl/I2dn

• 開発者ガイド: http://goo.gl/aVBY

Page 42: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 43: Google Web Toolkit 2.0

Layout Panels

• UIにおいて、正確な見た目をHTMLとCSSで定義するのは非常に難しいです。

• GWT2.0以前では、GWT標準のウィジットでさえレイアウトの問題は頭痛の種でした。

• しかしながら、GWT2.0では、実際にあなたが

欲しい、レイアウトを確実に作成するのを可能にします。

Page 44: Google Web Toolkit 2.0

Layout Panels

• レイアウトパネルは、標準のCSS上で予測できるconstraintベースのレイアウトシステムを作成します。

• CSSベースのレイアウトは、ブラウザのレンダリングエンジンの中においてネイティブに扱われるので、どんなJavaScriptも実行する必要がありません。

• その結果、レイアウトは速くて流動的です。ブラウザウィンドウをリサイズするとき、その速さに気がつくハズです。

Page 45: Google Web Toolkit 2.0

Layout Panels

• レイアウトパネルは、UiBinderとうまく連動します。

• 数行のXMLで、本当に洗練されたレイアウトを作成できます。

Page 46: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 47: Google Web Toolkit 2.0

Bundled Resources via ClientBundle

• GWTでは、複数の画像をまとめてダウンロードして分割表示するImageBundleという仕組みが1.4から搭載されました。

• これは、1つのページに小さい沢山の画像ファイルがある場合に、通信のハンドシェイクがオーバーヘッドになるのを回避するために用意されました。

Page 48: Google Web Toolkit 2.0

Bundled Resources via ClientBundle

• 2.0から搭載された、ClientBundleはこのテクニックをCSS、XML、テキストファイルにも拡張しました。

• 開発ガイド - ClientBundle http://goo.gl/HJpf

Page 49: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 50: Google Web Toolkit 2.0

HtmlUnit for Testing

• 2.0では、GWTTestCaseを使用しません。その代わりにHtmlUnitを使用します。

• HtmlUnitはJavaで実装されているので、デバッグに関わるネイティブコードはありません。つまり、完全にJavaだけでテスト駆動開発を行う事ができます。

• 開発ガイド - HtmlUnit http://goo.gl/SuaF

• 開発ガイド – Testing with Junit http://goo.gl/6HNf

Page 51: Google Web Toolkit 2.0

What’s New in GWT 2.0?

• Development Mode

• Speed Tracer Performance Analysis

• Developer Guided Code Splitting

• Compiler Optimizations

• Draft Compile

• Declarative User Interfaces

• Layout Panels

• Bundled Resources via ClientBundle

• HtmlUnit for Testing

• Bug Fixes…

Page 52: Google Web Toolkit 2.0

Bug Fixes

• GWT 2.0 includes lots of bugfixes (as well as little enhancements that didn't make it into the "New Features" section), including – Issue 427: TextArea#getSelectedText() returns the wrong value in Internet Explorer – Issue 633: Added File#setEnabled to enable or disable FileUpload widgets – Issue 1574: Added Cookies#remoteCookie to programmatically remove cookies – Issue 1585: Clicking on a Button in a Form no longer submits the forms automatically – Issue 1633: Loading malformed cookies no longer result an an exception – Issue 1771: Added RpcRequestBuilder to encapsulate logic needed to build and an RPC request – Issue 3102: HandlerManager#removeHandelr has be de-deprecated by popular request – Issue 3404: Added support for Class#getSimpleName() – Issue 3892: Multiple GWT applications on the same page can now preview events – Issue 3903: Host HTML pages no contain a noscript tag to warn users if JavaScript is disabled – Issue 3936: Empty switch statement no longer causes compilation error

• RichTextArea has also been enhanced: – Issue 1211: Support for undo/redo in RichTextArea – Issue 1433: Support for inserting arbitrary HTML into a RichTextArea – Issue 1441: No cursor in RichTextArea until users start typing (Firefox) – Issue 2185: Support for JustifyFull in RichTextArea – Issue 3176: Ensure that design mode is properly set in Firefox – Issue 3503: Consistent focus behavior across browsers

• These are but a few. For more details, see the full list of issues addressed in 2.0 in the GWT issue tracker.