G*
                    Workshop
                   in Fukuoka
                   2012/09/01

Photo by pacyopi
Who am I?

     	
  関⾕谷	
  和愛	
  (@kazuchika)
  
‣「Groovyイン・アクション」共訳
‣「プログラミングGROOVY」共著
‣元サン、現⽇日本オラクル勤務
‣JGGUG運営委員⻑⾧長
PROGRAM
14:30-‐‑‒15:00       イントロダクション                   @kazuchika

                     Groovy	
  2.0の新機能
15:00-‐‑‒15:30                                     @uehaj
                 〜~静かなること静的コンパイルのごとし〜~


15:40-‐‑‒16:40      Grails	
  2.xで始めよう!            @tyama

16:50-‐‑‒17:30    Gradle	
  1.xを使ってみよう!              @tkz

                   Javaのテストコードを1/4にする
17:30-‐‑‒18:00                                    @bikisuke
                  グルービーなテストを導⼊入しよう!

                                             @kis,	
  @hirosk,	
  
18:00-‐‑‒18:30          ⾃自由LT⼤大会!         @toby55kij,	
  @kiy0taka,	
  
                                            @touchez_̲du_̲bois


                                               ☞懇親会へ
Special Thanks
    きしだ	
  (@kis)	
  さん


    ⽇日本オラクル九州⽀支社
JGGUGって?
  「じぇいがぐ」と読みます
⽇日本Grails/Groovyユーザーグループ

‣2009年年にGrailsコードリーディングを⺟母体に設⽴立立
‣現在メンバ数およそ300名
 ‣運営委員9名+サポートスタッフ5名
‣Web:	
  http://www.jggug.org/
‣Twitter:	
  @jggug	
  (ハッシュタグは#jggug)
JGGUGの活動

‣G*ワークショップの定期開催(ほぼ⽉月例例)
 ‣東京、名古屋、⼤大阪、仙台、福岡!
‣デブサミ、JavaOne、JJUG	
  CCC等への参加
‣合宿(年年1回)
‣G*Magazine発⾏行行(おおむね季刊)
G*	
  Magazine
http://grails.jp/g_mag_jp/
                PDF	
  /	
  EPUB
Groovyとは?
 JVM⾔言語っていっぱいあるけど…
スクリプティング


                                    オプショナル
      クロージャ
                                     タイピング




                                          コレクション
演算⼦子オーバーロード
                                           リテラル



                Java	
  VM上で動作する
 メタプログラミング        軽量量・動的な⾔言語          XML/JSONサポート




          GDK	
  (Groovy	
  JDK)   ビルダー
Groovyのユニークさ
           他のJVM⾔言語との違い



 “Groovyは、Javaを置き換えるのではなく、
  あくまでJavaエコシステムの⼀一員として、
 より洗練され、進化した次世代Javaプラット
     フォームの実現を⽬目指しています。”
    (「プログラミングGROOVY」より)
ビジネス上の
 おつきあい




   家族的・共⽣生




         ※あくまで個⼈人的なイメージです
Groovy⼩小史
                                                                                               Groovy	
  2.0(イマココ)
                                                                     VMwareによる
                                                                    SpringSource買収



                                                SpringSourceに                                     2012
                                                よるG2One買収
                                                                                       2011
                                    G2One設⽴立立                               2010
                Guillaume	
  Laforge⽒氏                             2009
                 が開発リーダーに
                                                         2008                                  Groovy	
  1.8

                                                2007
James	
  Strachan⽒氏ら                                                           Groovy	
  1.7
   によって開発                                2006
                                                                       Groovy	
  1.6
                             2005
                                                           Groovy	
  1.5
                    2004
                                                   Groovy	
  1.0
         2003

                                                ⼀一貫したコミュニティ主導のオープンソース開発
                           JSR-‐‑‒241
簡潔さ



      Groovyの特徴
                  Java
柔軟性
                  親和性
簡潔さ

•Javaの1/3〜~1/10の記述量量
※あくまで個⼈人の感想です
•処理理の本質が⾒見見えやすい
// Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
// Hello.groovy
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

                    Java互換バージョン
// Hello.groovy
println "Hello, World!"

                    ミニマムバージョン
簡潔さを実現する要素
•定型コードの⾃自動⽣生成
•コレクションリテラル記法
•演算⼦子オーバーロード
•カッコやセミコロンの省省略略
•クロージャなど
柔軟性

•動的型付け
✓ダックタイピング
•メタプログラミング
✓MOP	
  (Meta	
  Object	
  Protocol)
✓AST変換
ダックタイピング

class Dog {
  void cry() { println "Bowwow!" }
}
class Cat {
  void cry() { println "Meow!" }
}
void kick(obj) { obj.cry() }
kick(new Dog())
kick(new Cat())
MOP:メソッドの動的追加


String.metaClass.shout =
  { println delegate.toUpperCase() + "!" }
"Groovy rocks".shout()



                          "GROOVY	
  ROCKS!"が表⽰示さ
                                      れる
Java親和性
•バイナリレベル互換
•ソースレベル互換
•実⾏行行環境が共通
•ツールの共有・内蔵
•⽂文化の共有
例例:AntBuilder
url = "http://dist.groovy.codehaus.org/
distributions/groovy-binary-1.8.0.zip"
tmpfile = File.createTempFile("ant", ".zip")

ant = new AntBuilder()
ant.get(src:url, dest:tmpfile)
ant.unzip(src:tmpfile, dest:".")
例例:GrapeでTwitter4J
                                 バージョン2.2以降降の
                                Twitter4Jを⽤用意せよ、
                                        の意味


@Grab('org.twitter4j:twitter4j-core:[2.2,)')
import twitter4j.*

twitter = new TwitterFactory().instance
twitter.updateStatus "デモ実演中 #jggug"
Javaプロジェクトへの

7つの導⼊入パターン(改)
               by	
  Dierk	
  Koenig
1.	
  万能接着剤             Javaのコンポーネントやフレームワークを
     (Super	
  Glue)                 Groovyで糊付け

 2.	
  やわらかな⼼心臓部             Javaアプリの中核にあるビジネスロジックを
      (Liquid	
  Heart)          Groovy(DSL)でスクリプティング

       3.	
  お化粧
                              Javaライブラリをラップして使いやすく
       (Lipstick)

   4.	
  内視鏡⼿手術              Groovyスクリプトを接続する⼩小さな⼝口を設け
 (Keyhole	
  Surgery)                 保守や診断に活⽤用

   5.	
  無制限の解放
                                全部Groovyで構築しちゃおう!
(Unlimited	
  Openness)

 6.	
  ゴーストライター
                                 Groovyが⽔水⾯面下でコード⽣生成
     (Ghost	
  Writer)

7.	
  ⼩小⼈人さんスクリプト
                             各種ユーティリティツールをGroovyで作る
 (House-‐‑‒elf	
  Scripts)
Groovyエコシステム
      ⾔言語だけじゃない!
Spock、Geb、Caelyf、GroovyFXほか多数
と め
ま
GroovyはJavaを補完・強化する最強の相棒。
         Javaを愛するあなたも
         Javaに疲れたあなたも
      ぜひ本⽇日からお試しください!
プレゼント!

G* Workshop in Fukuoka - Introduction