【京都GTUG】第1回 Google Web Toolkit 勉強会 in 京都

GWTの勉強会に参加してきました。
予想はしていたけれど、難波からだと開始時間ギリギリになってしまいました。

京都GTUGについて

京都GTUG:Googleのテクノロジーに興味を持っている人たちの集まりの京都版です
現在、世界中でもっとも活発に活動しているGTUGになっているようです。
マネージャーは山下大介さん
Google App Engine API Expert」にも選ばれています。

こんな人が身近(?)にいるなんて!
それだけでワクワクする僕はおめでたいかも

GWTの入門(越智洋司さん)

アジェンダは以下のとおり。

  • GWTの概要
  • GWT-RPC
  • UIBinder
GWTの概要

GWTJavaで作って、JavaScriptのコードを出力する

関ジャバの時にも思ったけれど、なんと言っても「JavaJavaScriptAJAX)」が一番の驚き。
しかも最適化してくれるなんて!
山下さんの話では、GoogleJavaScript使いが作成したロジックよりも、GWTが生成したロジックの方が

GWTの利点

  • Javaで作れるので、Javeの言語仕様や開発環境を利用できる

 主要なIDEで開発できる
 --EclipseプラグインGoogle Plugin for Eclipse」を使用)
 --NetBeansプラグイン「gwt4nb」を使用)

  • ブラウザ間の互換性問題はGWTが解決

Javaの言語仕様を利用する」っていうのは、うまくイメージがつかめないけれど、静的な型付けができるといったことなのかな。
「ブラウザ間の互換性」については、「JavaJavaScript」に次ぐ驚き。
時々、ブラウザ固有の動きに惑わされているので、思わずニヤけてしまう。
「Write-once, run-any-browers」って感じですよね!

GWTアプリのファイル構造
  • client:クライアントで使うもの
  • server:サーバサイドで使うもの
  • shared:サーバサイド、クライアントサイドの両方で使うもの

山下さんから補足がありましたが、入力チェックによく使うとのこと。
普通、入力チェックはクライアントサイドとサーバサイドで行うけれど、GWTを使わない場合、同じチェックをするにもかかわらず、クライアントサイドはJavaScriptで入力チェックを実装して、サーバサイドはJavaで実装する必要があるけれども、GWTを使えばチェック処理を実1つ実装するだけで、クライアントサイド、サーバサイドの両方で使える。
これは便利!
開発も楽チンだし、バグも少なくなるし、メンテナンスもしやすい。
当然、「Don't repeat yourself」を守れます。

HTMLとの関係

×:HTML要素をすべてJavaで実装
○:HTMLファイルにウィジェット(部品)を組み込む
 HTML要素だけでなく、CSSJavaから利用できる。

JavaScriptだけ埋め込まれるものと思っていたので、「Get Started」のソースを初めて見たときは不思議だったけれど、
JSPのカスタムタグや、JSFのタグと整合性、互換性取れるのだろうか。

画面遷移

今までのWebアプリケーション(Servlet,JSF,Struts):ページ遷移を意識(ファイルが切り替わる)
AJAXを用いたWebアプリケーション:状態遷移を意識(ファイルは切り替わらない)

URLの末尾にトークンを追記し、状態遷移を管理するとのこと。

JSNIJavaScript Native Interface)によるJavaScriptとの連携

Javaのソース中にJavaScriptを実装することができる。
実装されたJavaScriptはそのまま出力。
これにより

この仕組みのおかげで、GWTが生成したロジックとNativeなJavaScriptのロジックの間でスムーズにデータをやり取りできるわけですね。

GWT-RPC

AJAXと言えば「非同期通信」。
GWTでは「GWT-RPC」という仕組みで実現していることはわかったけれど、詳しくは良くわからなかった・・・

GWT-RPCで転送できるオブジェクト

  • プリミティブ型
  • プリミティブラッパークラス
  • 配列と一部のコレクションクラス
  • ユーザ定義オブジェクト(Serializable or isSerializableを実装)

RPCだからリモート呼び出しということで、
 転送できないオブジェクト = 直列化できないオブジェクト
という認識でいいのかな。
プリミティブラッパークラスにDateクラスが含まれているけれど、Dateクラスってラッパークラスなのか。
「isSerializable」が推奨されているという話があったけれど、「Serializable」と「isSerializable」の違いは何だろう。
そもそも「isSerializable」って、GWTAPIだ・・・

DevelopmentMode

DevelopmentMode:デバックするためのモード(実行形式?)
2.0以前=HostedMode
Javaバイトコードのままで実行。
Hostedブラウザで確認。
2.0=DevlopmentMode
Javaバイトコードのままで実行。
一般のブラウザにプラグインをインストールして確認。

バイトコードJavaScriptで動作が違うなんてことは・・・Googleを信じるしかないか。
JSNIを利用して、直接JavaScriptを実装した場合、GWTが生成したロジックとNativeなJavaScriptのロジックのどちらもデバッグできるのかな?
バイトコードJavaScriptが混在することになるんじゃ・・・

LaoutPanelの拡張

レイアウトが豊富になった。

らしい。

UiBinder

HTMLにJavaScript埋め込むよりも柔軟に表現できる。
Widget(画面の部品)をタグで定義できる

  • Widget生成の記述が不要
  • イベント定義が簡素化される

EcipseのプラグインでHTMLかWidgetを使うか指定できる。

デザインとロジックが今まで以上に分離できるようになったということだけど、使ったことがないので実感がわきませんでした・・・

GWT2.0で作るWebアプリケーション

白山さんが急遽欠席することになってしまったため、引き続き越智さんが解説。
大変申し訳ないのですが、前半の時点でついていけてなかったので、
頭の中をサラサラとイメージが流れていきました・・・

懇親会

町家を改装した居酒屋で開催されました。
予想通りではあったんだけれど、技術的な話にはついていけず、「へ〜」「ふ〜ん」「すげ〜」ばかりになってしまいました。
GWTについては、「何がわからないのか」すらわからない状態だったので、質問できずじまい。
そんな僕に付き合ってくれた皆さん、ありがとうございました。
それでも関ジャバの時と同様、仕事で直面している問題は似通っていて、ホッとしました。
帰りに染田さんがおっしゃっていたのですが、
京都GTUGは産・学の第一線にいる人が集まってきているので、産・学両方の考え方に触れられるのは貴重な体験になるんじゃないかと思いました。

最後に・・・

「第1回だから・・・」と思っていた自分が甘かったです。
GWTについて予習しておけばよかった・・・
僕の理解力が足りないからだとは思いますが、もう少し、時間に余裕があれば良かったなと思いました。


今回の会場は「京都リサーチパークさん」のご好意により無償で提供して頂いたとのことです。
町家をイベントスペースとして提供するサービスも行っているようです。
説明にいらしていた寺戸さんいはく、「アイディアによっては無償で提供します!」とのことでした。
町家で勉強会って言うのも良さそうですね。