SlideShare une entreprise Scribd logo
1  sur  45
Grails/Groovy
 の開発活用術
(1)NTTソフトウェアのとりくみ
     2012/5/28 JJUG CCC
 NTTソフトウェア Grails推進室 上原潤二




                  2012
自己紹介
上原潤二(@uehaj)
NTTソフトウェア株式会社Grails推進室
JGGUG(日本Grails/Groovyユーザグルー
プ)運営委員
書籍執筆: プログラミングGROOVY(技術
評論社), Grails徹底入門(翔泳社)
ブログ「Grな日々」
GroovyServ, LispBuilder, GVM開発者



                           2012
はじめに
NTTソフトウェアでは、Grails推進室を設置し、組織的
にGroovy/Grailsに関わる技術蓄積とコミュニティ活動
を含むGroovy/Grailsの普及に取り組んでいます。
 対外活動:
  JGGUG(日本Grails/Groovyユーザ会法人会員)、運営委員
  OSS開発・貢献(GroovyServ,GExcelAPI,機能拡張パッチ等)
 社内での利用事例の拡大、ノウハウの蓄積などに加
 え、社外への研修やサポートの提供なども検討してい
 ます
本日は、Groovy/Grailsへの取り組み状況や背景を説明
すると共に、適用のメリットを示します。
     3                    2012
Groovy/Grailsについて
Groovy … Java仮想マシン上で動作する動的言語
 文法はJavaと上位互換だが、冗長部分を省略し、短く書ける
 既存のJavaコードやライブラリをそのまま利用可能
 Rubyと同様に表現力が高く、生産性が高い


Grails …Groovyを使ったオープンソースの高生産性
Webアプリケーションフレームワーク
 WebAP開発に必要なフレームワークやライブラリなどを使いやすくカプセル化し、
AllInOneで提供
 Ruby on Railsの特長を取り込んだ上で、改良を行っている(Java版Ruby on Railsと
も言える)
 簡単なコードでGUIを自動生成(Scaffold)
 周辺ノウハウを含めたコンポーネントの再利用が容易
 Java基盤が持つ安定性、スケーラビリティ、資産をそのまま引き継げる

        4                        2012
なぜGrails・
Groovyか?
     http://www.flickr.com/photos/omcoc/6751047205/
 5                          2012
背景
ソフトウェア開発の現実:
 ビジネスの変化が速い
 仕様確定が遅れがち/確定しない
 開発期間・費用の縮減
 小規模化する開発体制
 クラウドの勃興(IaaS,PaaS)
➡ 従来通りの「人月ビジネス」モデルの限界



  6                   2012
人月ビジネスからの脱却
課題
ビジネスモデル、契約形態
開発プロセス
ツール
フレームワーク・言語




     7         2012
Javaの問題点
 コードが冗長。
                               UserListView(ビュークラス)

 「何をしたいか(what)」                UserListHB(ヘルパーBeanクラス)
                               UserSC(サービスコントローラー)
                               UserSR(サービス呼び出し結果)

 と                             UserListEv(イベント)
                               UserListEL(イベントリスナー)
                               UserListER(イベント結果)
 「実際に動作させるための記述(how)」          UserMO(DTO)
                               UserDAO(DAO実装)
                               UserDAOIF(DAOインターフェース)
 の乖離が大きい                  (http://d.hatena.ne.jp/ryoasai/20101025/1288008546 より引用



 低レベル記述、多クラス主義

➡これらは「変更しにくさ」を導く
➡インクリメンタルな開発=連続的な変更
➡「ビジネスの変化が速い」「開発期間・費用の縮
 減」という課題に応えられない
     8             2012
そこで




9         2012
そこで



 Ruby on
Railsですよ!!
 9         2012
そこで



 Ruby on
Railsですよ!!
     (違
 9         2012
実際問題としては…
インフラとしてのJVM/Java EEの性能・
安定性は捨て難い
移行コストは無視できない
教育コスト
開発や維持管理の要員
既存システムからの継続・連携
APサーバやライブラリなどの資産


➡SIerにとっては、上記は顧客側が負担するコ
ストでもある
  10               2012
なので


 Ruby on
Railsですよ!!

 11         2012
なので




11         2012
なので




移行の痛みを最小化しつつ、果実を得る



  11         2012
なので


Groovy&
Grailで!!
移行の痛みを最小化しつつ、果実を得る



  11         2012
Groovy

12   2012
Groovyを10秒で説明する
基本がJavaである
Java VM上で動作する
文法や構造がJava上位互換で簡潔にも書ける




  13            2012
Groovyを10秒で説明する
          基本がJavaである
            Java VM上で動作する
            文法や構造がJava上位互換で簡潔にも書ける

       public class HelloWorld {
Java




           public static void main(String[] args) {
               System.out.println("Hello world");
           }
       }




                13                            2012
Groovyを10秒で説明する
             基本がJavaである
               Java VM上で動作する
               文法や構造がJava上位互換で簡潔にも書ける

          public class HelloWorld {
Java




              public static void main(String[] args) {
                  System.out.println("Hello world");
              }
          }
Groovy1




          public class HelloWorld {
              public static void main(String[] args) {
                  System.out.println("Hello world");
              }
          }
                   13                            2012
Groovyを10秒で説明する
             基本がJavaである
               Java VM上で動作する
               文法や構造がJava上位互換で簡潔にも書ける

          public class HelloWorld {
Java




              public static void main(String[] args) {
                  System.out.println("Hello world");
              }
          }




                                               Groovy2
Groovy1




          public class HelloWorld {                  println "Hello world"
              public static void main(String[] args) {
                  System.out.println("Hello world");
              }
          }
                   13                               2012
Groovyの良いところ(2)
GroovyのライブラリはJavaのライブラリ
(ArrayList,HashMap,..)の拡張
 JRubyの場合はRubyライブラリを使用。

演算子オーバーローディング
人間の思考に近いレベルで表現できる(次項)




    14             2012
JavaとGroovyの比較
(制約解決エンジンchoco solverで魔方陣を解くための記述を題材にして)




                        ※http://www.emn.fr/z-info/choco-solver/
     15                        2012
JavaとGroovyの比較
          (制約解決エンジンchoco solverで魔方陣を解くための記述を題材にして)
       //横の列の合計がM                                      model.addConstraints(cols);
       Constraint[] rows = new Constraint[n];          // 斜め合計がM
       for (int i = 0; i < n; i++) {                   IntegerVariable[][] diags=new IntegerVariable[2][n];
         rows[i] = Choco.eq(Choco.sum(cells[i]), M);   for (int i = 0; i < n; i++) {
       }                                                 diags[0][i] = cells[i][i];
       model.addConstraints(rows);                       diags[1][i] = cells[i][(n - 1) - i];
       //縦の列の合計がM                                      }
Java




       IntegerVariable[][] cellsDual = new             model.addConstraint(Choco.eq(Choco.sum(diags[0]),M));
       IntegerVariable[n][n];                          model.addConstraint(Choco.eq(Choco.sum(diags[1]),M));
       for (int i = 0; i < n; i++) {                   // 全ての要素が異る4
         for (int j = 0; j < n; j++) {                 IntegerVariable[] allVars=new IntegerVariable[n*n];
           cellsDual[i][j] = cells[j][i];              for (int i = 0; i < n; i++) {
         }                                               for (int j = 0; j < n; j++) {
       }                                                   allVars[i * n + j] = cells[i][j];
       Constraint[] cols = new Constraint[n];            }
       for (int i = 0; i < n; i++) {                   }
         cols[i]=Choco.eq(Choco.sum(cellsDual[i]),     model.addConstraint(Choco.allDifferent(allVars));
       M);
       }




                                                                 ※http://www.emn.fr/z-info/choco-solver/
                       15                                               2012
JavaとGroovyの比較
            (制約解決エンジンchoco solverで魔方陣を解くための記述を題材にして)
         //横の列の合計がM                                      model.addConstraints(cols);
         Constraint[] rows = new Constraint[n];          // 斜め合計がM
         for (int i = 0; i < n; i++) {                   IntegerVariable[][] diags=new IntegerVariable[2][n];
           rows[i] = Choco.eq(Choco.sum(cells[i]), M);   for (int i = 0; i < n; i++) {
         }                                                 diags[0][i] = cells[i][i];
         model.addConstraints(rows);                       diags[1][i] = cells[i][(n - 1) - i];
         //縦の列の合計がM                                      }
Java




         IntegerVariable[][] cellsDual = new             model.addConstraint(Choco.eq(Choco.sum(diags[0]),M));
         IntegerVariable[n][n];                          model.addConstraint(Choco.eq(Choco.sum(diags[1]),M));
         for (int i = 0; i < n; i++) {                   // 全ての要素が異る4
           for (int j = 0; j < n; j++) {                 IntegerVariable[] allVars=new IntegerVariable[n*n];
             cellsDual[i][j] = cells[j][i];              for (int i = 0; i < n; i++) {
           }                                               for (int j = 0; j < n; j++) {
         }                                                   allVars[i * n + j] = cells[i][j];
         Constraint[] cols = new Constraint[n];            }
         for (int i = 0; i < n; i++) {                   }
           cols[i]=Choco.eq(Choco.sum(cellsDual[i]),     model.addConstraint(Choco.allDifferent(allVars));
         M);
         }



         cells.each{ model << it.sum().eq(M) } //横の列の合計がM
Groovy




         cells.transpose().each{ model << it.sum().eq(M) } //縦の列の合計がM
         model << (0..<n).collect{ cells[it][it] }.sum().eq(M) //斜め合計がM
         model << (0..<n).collect{ cells[it][-(it+1)] }.sum().eq(M) //斜め合計がM
         model << cells.flatten().allDifferent() //全ての要素が異る
                                                                   ※http://www.emn.fr/z-info/choco-solver/
                         15                                               2012
Grails

16   2012
Grails
                    Plug-in
http://www.flickr.com/photos/cicciopizzettaro/5551554162/
      17                             2012
Grailsプラグイン
Grailsで開発するアプリに組み込める機能
拡張モジュール
コマンド1発オンラインインストール
 mavenモジュール互換
更新検出/伝播・リロードの枠組み
豊富なプラグイン(標準リポジトリで790個以上)
再利用単位として秀逸



                2012
プラグインの構造
プラグインはフルスタック
 MyApp   MyPlugin




           2012
プラグインの構造
プラグインはフルスタック
   MyApp       MyPlugin
ビューを含むことができる




                 2012
プラグインの構造
プラグインはフルスタック
   MyApp       MyPlugin
ビューを含むことができる




テストを含むことができる

                 2012
プラグインの構造
  プラグインはフルスタック
     MyApp       MyPlugin
 ビューを含むことができる



サポートスクリプトを含むこと
ができる



  テストを含むことができる

                   2012
プラグインの構造
  プラグインはフルスタック
   カスタムタグを含むことができ
   る MyApp      MyPlugin
 ビューを含むことができる



サポートスクリプトを含むこと
ができる



  テストを含むことができる

                   2012
再利用に関するGrailsプラグインの優位性

  クラスライブラリ(Jar,pom..)の再利用

    アプリケーション      クラスライブラリ




 クラスライブラリは、自分を呼び出すアプリケーションについて情
報を持たず、前提を置くことができない
 例:データはどんなUIで表示される? ロギングはどう行う? 情報保
 持のためにファイル書き込みはできる?→わからない。
  結果としてそれらをアプリ側の責任で書き上げる必要がある

     20              2012
再利用に関するGrailsプラグインの優位性

  Grailsプラグインの再利用

     アプリケーション        Grailsプラグイン




アプリケーションの構造はGrailsの規定に従うので、Grailsプラグイ
ンはアプリケーションの実行に介在し、操作することができる。
Grailsプラグインは、自身のデータを表示・操作するためのビュー・
タグを提供したり、永続化層を用いて保存したりすることもできる
アプリロジックに介入する、相対的に複雑で高度な機能を、再利用
モジュールとして実現することができる
      21                2012
導入事例
http://www.flickr.com/photos/inlinguamanchester/5036313154/
      22                            2012
開発事例
      弊社開発プロジェクト(一部)におけるGrails
      適用効果は以下のとおり
項 プロジェクト                 Grails                           Javaとのコー
                    顧客                      効果                        規模
番      名                 スキル                                ド量比較
    顧客名簿管理                        詳細設計∼結合テスト工程が、Javaの
1                   社内     高                              Javaの約1/10 50KL
    システム                          約1/2∼1/5の期間で開発

  ProgOffice                      詳細設計∼プログラム作成工程が、
2 ネットワーク            社外     中      Javaの約半分の工数で開発(開発全体     未測定        未測定
  電話帳(後述)                         で工数2割減)

                                  詳細設計∼結合テスト工程まで、Java
3 ー                 社外     高                              Javaの約1/10 20KL
                                  の約1/7∼1/10の期間で開発

           ※1、3における期間・開発工数の比較は、当社の見積りシステムによる予測に対しての比較。
           ※工程名称については共通フレーム98(SLCP-JCF98)における用語を使用した。


               23                                  2012
効果分析
概要定義および、総合テスト工程以           共通フレーム
                           98(SLCP-
降は従来と変わらない(変えていない)         JCF98)における工
                           程名称:
結合テストまでの工程における削減
効果は大きい。                    •外部仕様
                            •概要定義
➡全体としては2∼3割削減と評価            •詳細定義
                           •内部仕様
測定対象はGroovy/Grailsに適したプ     •設計
                            •プログラム設計
ロジェクトなので、一般に適用した           •製造
                            •プログラム作成
場合の評価は未。                   •製品のテスト
                            •結合テスト
➡「適したプロジェクトで採用すれ            •総合テスト
 ば効果は大きい」と言える。             •設置
                            •導入

   24               2012
Grails適用事例: ProgOfficeネットワーク電話帳

 当社の製品ProgOfficeの開発にGrailsを適用
 (2008∼現在)
  1年間に2∼3回の機能追加リリース実施
     ネットワーク電話帳はNTTソフトウェアの次世代セキュアオ
     フィスソリューションの1つ。携帯電話やスマートフォンの
     電話帳情報をサーバで一元管理・共有し、端末内部に個人情
     報、発着信履歴などを持たせずに利用できるシステム




     25             2012
Grails適用結果(感想)
習熟が容易: Grails未経験のメンバーでも、
Grailsの内部構造等を意識することなく、基
本的にGroovyでの実装でアプリケーション
開発が完成する。
Javaスキルが活かせた: Javaと言語仕様が共
通しており、Java部分の開発と並行して作業
しても違和感が少ない。
プロトタイプ開発: 画面・ロジック・DBそれ
ぞれ間のIF設計を省略することができ、設計
工数を削減できた。
  26            2012
Grails導入実績(世の中)
http://grails.org/Success+Storiesには、二百数十件
のGrailsで開発されたサイトが掲示されている。
例えば…
 北米ニッサンにおける電気自動車leafの新製品キャンペーン・
 予約サイト
 WalmartのMP 3ストア
 スズキ自動車カナダのサイト
 WEBマガジン「WIRED」(wired.com)
 英国の放送界の巨人「BskyB」のポータルで利用
 ソーシャルネットワーク「LinkedIn」で部分利用
 米国最大のバーゲンセールサイト「 biglots.com」で全面的利
 用(Fortune 500企業)
 テレビ番組「リアリティTV」の投票システム
     13                      2012           13
問題点
http://www.flickr.com/photos/monkeydlueffy/4373070372/
      28                           2012
問題点
日本語情報の不足
英語情報は包括的リファレンスがあり充実
 Grailsリファレンスを@tyamaさんと仲間達に
 よって翻訳中

プラグインの互換性問題
ノウハウ収集中




  29              2012
まとめ
     http://www.flickr.com/photos/limonada/214375219/
30                             2012
まとめ
Javaを中心に開発してきたSIerである弊社
にとって、Groovy/Grails技術は「ほどほど
の痛みで、大きな果実を得るための解」
 「地続きの移行」を可能とする
 今後、プラグイン活用によって更なる効果を期待
NTTソフトウェアは、コミュニティと連携
してGroovy/Grails技術の普及発展を目指し
ます。

    31            2012

Contenu connexe

Tendances

Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道なおき きしだ
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build ToolShinya Mochida
 
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.Uehara Junji
 
Frege, What a Non-strict Language
Frege, What a Non-strict LanguageFrege, What a Non-strict Language
Frege, What a Non-strict Languagey_taka_23
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~JustSystems Corporation
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまでMugen Fujii
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckIndy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckUehara Junji
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてkimukou_26 Kimukou
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミングnagoya313
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)Masatoshi Tada
 

Tendances (20)

Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
Gradle a new Generation Build Tool
Gradle a new Generation Build ToolGradle a new Generation Build Tool
Gradle a new Generation Build Tool
 
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.
 
Frege, What a Non-strict Language
Frege, What a Non-strict LanguageFrege, What a Non-strict Language
Frege, What a Non-strict Language
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
SimpleModeler
SimpleModelerSimpleModeler
SimpleModeler
 
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ckIndy(Invokedynamic) and Bytecode DSL and Brainf*ck
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミング
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 

En vedette

Grails/Groovyによる開発事例紹介
Grails/Groovyによる開発事例紹介Grails/Groovyによる開発事例紹介
Grails/Groovyによる開発事例紹介Kiyotaka Oku
 
Securing Grails Applications
Securing Grails ApplicationsSecuring Grails Applications
Securing Grails ApplicationsBurt Beckwith
 
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...宏治 高尾
 
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことTerui Masashi
 

En vedette (6)

Grails/Groovyによる開発事例紹介
Grails/Groovyによる開発事例紹介Grails/Groovyによる開発事例紹介
Grails/Groovyによる開発事例紹介
 
Securing Grails Applications
Securing Grails ApplicationsSecuring Grails Applications
Securing Grails Applications
 
Spring social の基礎
Spring social の基礎Spring social の基礎
Spring social の基礎
 
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
 

Similaire à JJUG CCC 2012 Real World Groovy/Grails

Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Hiroshi Yoshida
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaTakuya Tsuchida
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)fumoto kazuhiro
 
UnityとBlenderハンズオン第1章
UnityとBlenderハンズオン第1章UnityとBlenderハンズオン第1章
UnityとBlenderハンズオン第1章yaju88
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック良太 増子
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテストushiboy
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会Yukihiro Kitazawa
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦urasandesu
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチTomoharu ASAMI
 

Similaire à JJUG CCC 2012 Real World Groovy/Grails (20)

ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Form libraries
Form librariesForm libraries
Form libraries
 
Form libraries
Form librariesForm libraries
Form libraries
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
 
UnityとBlenderハンズオン第1章
UnityとBlenderハンズオン第1章UnityとBlenderハンズオン第1章
UnityとBlenderハンズオン第1章
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦Eclipse を使った java 開発 111126 杉浦
Eclipse を使った java 開発 111126 杉浦
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 

Plus de Uehara Junji

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Uehara Junji
 
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Uehara Junji
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Uehara Junji
 
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summerenterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 SummerUehara Junji
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118Uehara Junji
 
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopNew feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopUehara Junji
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901Uehara Junji
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能についてUehara Junji
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Uehara Junji
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Uehara Junji
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEUehara Junji
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Uehara Junji
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming LanguageUehara Junji
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyUehara Junji
 

Plus de Uehara Junji (20)

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
 
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
 
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summerenterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*WorkshopNew feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
 
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能について
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
 
Clojure
ClojureClojure
Clojure
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
 
Lisp Builder
Lisp BuilderLisp Builder
Lisp Builder
 

JJUG CCC 2012 Real World Groovy/Grails

Notes de l'éditeur

  1. \n
  2. Gr&amp;#x306A;&amp;#x65E5;&amp;#x3005;&amp;#x3001;2007&amp;#x5E74;&amp;#x304B;&amp;#x3089;&amp;#x57F7;&amp;#x7B46;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x65E5;&amp;#x672C;&amp;#x521D;&amp;#x306E;&amp;#x30AA;&amp;#x30EA;&amp;#x30B8;&amp;#x30CA;&amp;#x30EB;&amp;#x66F8;&amp;#x7C4D;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;Groovy&amp;#x3092;&amp;#x57F7;&amp;#x7B46;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n
  3. \n
  4. \n
  5. \n
  6. \n
  7. IT&amp;#x30BC;&amp;#x30CD;&amp;#x30B3;&amp;#x30F3;\n&amp;#x30A6;&amp;#x30A9;&amp;#x30FC;&amp;#x30BF;&amp;#x30FC;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30EB;\n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. &amp;#x4E0A;&amp;#x8A18;&amp;#x5236;&amp;#x7D04;&amp;#x304C;&amp;#x554F;&amp;#x984C;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x306F;&amp;#x3001;&amp;#x6BD4;&amp;#x8F03;&amp;#x7684;&amp;#x30D7;&amp;#x30EA;&amp;#x30DF;&amp;#x30C6;&amp;#x30A3;&amp;#x30D6;&amp;#x306A;&amp;#x6A5F;&amp;#x80FD;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3067;&amp;#x3042;&amp;#x308B;&amp;#x3002;\n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. &amp;#x300C;&amp;#x4F55;&amp;#x5272;&amp;#x524A;&amp;#x6E1B;&amp;#x300D;&amp;#x3068;&amp;#x304B;&amp;#x3067;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x7279;&amp;#x5B9A;&amp;#x90E8;&amp;#x5206;&amp;#x3092;&amp;#x300C;&amp;#x30BC;&amp;#x30ED;&amp;#x300D;&amp;#x306B;&amp;#x3059;&amp;#x308B;\n\n