狠狠撸

狠狠撸Share a Scribd company logo
GWT+Objectifyで
ラクラクGAEアプリ開発
  越智 洋司@おちラボ




   2011.12.18 京都GTUG年忘れ勉強会資料
自己紹介
? とりあえず京都GTUGスタッフ
    (あんまり手伝えてませんが)

? 本業:近畿大学理工学部教員
   (「おちラボ」で検索してください)

? 特技:GWT(正式には「グィット」と読むらしい)
  2010年5月の京都GTUG勉強会にてお話


        2011.12.18 京都GTUG年忘れ勉強会資料
今日のお話

○GWTについてのちょっとした話
  ?GWT再入門
  ?ラボでの利用小話

○Objectifyの紹介




          2011.12.18 京都GTUG年忘れ勉強会資料
GWTとは
? Google Web ToolKitの略

? JavaScriptアプリケーションをJavaで記述
  → JavaコードをJavaScriptへ変換
  (JavaScriptが嫌いな紳士?淑女の皆様にオススメ)

? UI周りの記述はXMLにより表現可能
  (UiBinderという機能)

? サーバとのAjaxなやり取りがRPCの感覚でできる
  (GWT-RPCという機能)
              2011.12.18 京都GTUG年忘れ勉強会資料
Javaで記述




EclipseやNetbeansなどのJavaIDEで書ける
        2011.12.18 京都GTUG年忘れ勉強会資料
UI周りはXMLで
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
          xmlns:g="urn:import:com.google.gwt.user.client.ui">
          <ui:style>
                     .important {
                              font-weight: bold;
                     }
          </ui:style>
          <g:HTMLPanel>
                     Hello,
          <g:TextBox></g:TextBox>
          <g:Button styleName="{style.important}" ui:field="button" >OK</g:Button>
          <g:Button>Cancel</g:Button>
          </g:HTMLPanel>
</ui:UiBinder>


       Javaコードを一切書くことなくUI実装が可能
       (デザインとロジックが完全に区別)    2011.12.18 京都GTUG年忘れ勉強会資料
础箩补虫な通信が搁笔颁感覚で
                  ?GWT-RPC?
 サーバ側
public Car getCar(Person user) throws IllegalArgumentException {
                      :
                      :
                      :
}

クライアント側
RemoteService.getCar(user, new AsyncCallback<Car>() {
        public void onFailure(Throwable caught) {

         }
         public void onSuccess(Car result) {

         }
});
                           2011.12.18 京都GTUG年忘れ勉強会資料
おちラボでの利用実績?小話(1)
? 2009年夏からGWT採用 (前年度までJSF)

? JavaScriptベースのAjaxアプリに
  手をつけたことが1度だけあり。
  → いいものはできた、、、、
     が、スパゲティソースコードだったという悲劇

? GWTを導入することで
  → Javaだけ教えればいい!
    (多言語を習得する時間がない)
          2011.12.18 京都GTUG年忘れ勉強会資料
おちラボでの利用実績?小話(2)

私自身の個人的な印象
→ 学生が作ったアプリの再利用性が高まった


学生のウケはどうか?
→ネットでの情報、書籍不足に若干の不満がある

    国内ではいまいち流行ってない?!
       2011.12.18 京都GTUG年忘れ勉強会資料
GWTは熱い!(海外では)
Google IO 2011 でもGWTは積極的に紹介されている
  –   GWT + HTML5: A web developers dream!
  –   HTML5 Showcase for Web Developers: The Wow and the How
  –   GWT + UI Designer: Enterprise Web UIs Made Easy!
  –   Using GWT and Eclipse to Build Great Mobile Web Apps
  –   High-performance GWT: best practices for writing smaller, faster
      apps
  –   Highly Productive GWT: Rapid Development with App Engine,
      Objectify, RequestFactory, and gwt-platform
  –   Kick-Ass Game Programming with Google Web Toolkit
  –   Building Game Development Tools with App Engine, GWT, and
      WebGL
  –   Fireside Chat with the GWT and Cloud Tooling Team
  –   GWT's UI overhaul
                                                        他、多数、、、
                        2011.12.18 京都GTUG年忘れ勉強会資料
そしてGAE
クライアントをGWTしたのならサーバも、、、


                    昨年度までは
                    Tomcat, Glassfish
                    MySQL+ Hibernate

?今年からGAEでの運用を想定した開発方針へ
?データベースもDatastoreに
                 Objectify の採用
        2011.12.18 京都GTUG年忘れ勉強会資料
Objectifyとは
  (objectify-appengineが正式名称)
? GAEのDatastoreにアクセスするためのAPI

? GWT-RPCとの親和性も良い

? 记述が简単、シンプルなメソッド

? 高機能、高速処理

? GoogleIO2011でも紹介
 Highly Productive GWT: Rapid Development with App Engine,
 Objectify, RequestFactory, and gwt-platform
                  2011.12.18 京都GTUG年忘れ勉強会資料
骋奥罢との亲和性の良さとは?
     (GWT-RPCの制約に対応)
          Entity


                                               DataStore

         GWT-RPC                   Objectify
Client                   Server

   ?Client側でObjectifyのEntity定義が可能
   ?DTOなしにClient-DataStore間の授受
                   2011.12.18 京都GTUG年忘れ勉強会資料
记述が简単
         ~EntityはPOJOで~

class Car implements IsSerializable {
   @Id private String vin;
   private String color;

    // アクセッサメソッドは必要
}


                   たったこれだけでいい!
              2011.12.18 京都GTUG年忘れ勉強会資料
シンプルなメソッド
?   get() ???IDによる検索
?   put() ???追加、修正
?   delete() ???削除
?   query() ???検索

Objectify ofy = ObjectifyService.begin();
ofy.put(new Car("123123", "red"));
Car c = ofy.get(Car.class, "123123");
ofy.delete(c);

                  2011.12.18 京都GTUG年忘れ勉強会資料
軽量かつ强力
           (以下抜粋)
? 設定ファイルなし(configファイルなど不要)
  (jarファイルを放り込むだけで動く)

? 軽量かつ高速(らしい)

? memcacheとの自動連携機能がある(らしい)

? EntityGroupの操作も容易

? Indexの制御も容易


                     その他できることが豊富
            2011.12.18 京都GTUG年忘れ勉強会資料
おちラボでの利用実績?小話
 □現状、学生には教え始めたところ
 (私自身も勉強中)

 □学生のウケはどうか?
  → ネットでの情報が少なすぎる。。。
    という不満の声がチラホラと


まだ1年経ってませんので判断は時期尚早かと。。

        2011.12.18 京都GTUG年忘れ勉強会資料
GWT+GAE with Objectifyを勧める理由(1/2)

□GAEが正式版としてリリース
 (無料枠で使える枠が少なくなった?)

     Googleの狙い(意図)は何か?



神は言っている、、、
ここ(GAEのサーバ)で処理をするんじゃないと、、、
           2011.12.18 京都GTUG年忘れ勉強会資料
GWT+GAE with Objectifyを勧める理由(2/2)

 そもそものDataStore(KVS)の思想
 → 従来のRDBの思想とは違う
   (非正規化の形で格納)

                                つまり、、、

「クライアント側にデータを渡してそこで処理しろ」
 →今までサーバ側(Java)でやってたことを
  クライアント側でやれ!
           2011.12.18 京都GTUG年忘れ勉強会資料
そこでGWT+Objectifyの出番ですよ

クライアント側の処理の増加
= JavaScriptでの処理の増加 (><)
◎GWTを利用すれば、、、
 複雑なコードの記述、オブジェクティブな構成
   Javaの記述のしやすさがカバー

◎Objectifyを利用すれば
→ 速やかにデータを授受できる
        2011.12.18 京都GTUG年忘れ勉強会資料
今日のまとめ
Objectify + GAEで2012年こそ
GWTの爆発的な普及が来る!




        2011.12.18 京都GTUG年忘れ勉強会資料
                                    よいお年を!

More Related Content

骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発