次世代ビルドツールGradle
最新情報アップデート

           2012.05.21
       須江信洋(@nobusue)
         http://www.jggug.org/
自己紹介
       須江 信洋(すえ のぶひろ)
           Twitter: @nobusue
           http://www.facebook.com/profile.php?id=732337
            788
       かれこれ10年位、JavaEE関連の仕事をしてます
       G*(Groovy関連技術)との関わり
           Groovyコミュニティ(JGGUG)サポートスタッフ
           「プログラミングGROOVY」執筆チーム
           「Groovy イン・アクション」翻訳チーム
           Groovyで作ったBot飼ってます(@hatena_groovy)


    2
ビルドの悩み
   Java(特にJava EE)のビルドプロセスは複雑
       src -> compile -> test -> package ・・・
       依存ライブラリの管理
       環境の差異への対応
         Windows / MacOS / Linux / Unix
         IDE / CI / Test / Staging / Production
       Java以外のJVM言語への対応

   これに応えるべく、ビルドツールが進化

3
ビルドツールの進化
     パラダイム
             手続き的   規約によるビルド
ビルド定義




    スクリプト    Make    Gradle


    XML      Ant     Maven

4
http://gradle.org/

       Ant/Mavenの課題を解決する次世代ビルドツール
           AntとMavenの「いいとこどり」                2012/5/21現在
           HibernateやSpringSourceで使われている     1.0-rc-3が最新
       標準化と柔軟性の両立
           Mavenライクな標準ディレクトリ構造を使い、そこから外れ
            る部分は自由にカスタマイズ可能
           依存ライブラリはMavenリポジトリでもローカルJARでも好
            きなように定義できる
           マルチプロジェクトへの対応
       ビルドスクリプトはGroovyで記述
           DSLによるシンプルかつ可読性の高いビルド定義
           条件分岐や繰り返しなど、任意の処理をGroovyで

    5
要するにGradleとは?
           Mavenのように
      規約によるビルドで効率的に記述でき、

             Antのように
     プロジェクト特有の事情に柔軟に対応でき、

            Makeのように
    スクリプトのパワーを活かしたビルドが実現できる

    クロスプラットフォーム対応次世代ビルドツール

6
Gradleのビルドスクリプト(例)
apply plugin: 'java'     Javaプラグインを適用

repositories {
  mavenCentral()       依存性解決にMavenリポジトリを利用
}
                          プロダクトコードのコンパイル時の依存先
dependencies {
  compile(
      group: 'commons-collections',
      name: 'commons-collections',
      version: '3.2')
  testCompile(                テストコードのコンパイル時の依存先
      group: 'junit',
      name: 'junit',
      version: '4.+')
}
7
OK、「gradle test」を実行だ!




         Mavenと同様の規約に従って
         プロダクトコードとテストコードを
                配置

8
Demo

9
Gradle DSL
    素朴な疑問
        build.gradleに書いてある”apply”と
         か”repositories”とか”dependencies”とか何?
        なんかGroovyスクリプトと違くね?
    お答え
        applyもrepositoriesもdependenciesも実はメソッド
         です(引数のカッコを省略してるだけ)
        Gradleの文法はGroovyの内部DSLとして定義
        詳しいことは・・・・
          http://monochromeroad.com/artifacts/gradl
           e/userguide/writing_build_scripts.html#N11
           360
    10
条件分岐も簡単
task "OsDependTask" << {
  def os = System.getProperty("os.name")
  if(os.contains("Windows")) {
    println "Windows用の処理" }
  else if(os.contains("Mac OS")) {
    println "Mac OS用の処理" }
  else { println "Linux/Unix用の処理" }
}




11
動的タスク定義も簡単
4.times { counter ->
  task "task${counter}" << {
    println "${counter+1}番目の動的タスクです"
  }
}




12
Demo

13
AntからGradleへ
    Gradleは既存のAnt資産を活用できる
        Antのbuild.xmlをそのまま読み込んで実行可能
          Antターゲット=Gradleタスク
        AntタスクをGradleから直接利用可能
            GroovyのAntBuilderが組み込まれている
        AntタスクとGradleタスクを共存することも可能
          相互に依存するタスクも定義できる
          AntタスクをGradleから拡張することもできる


    Gradleは「Better Ant」としても使える
        Mavenとの大きな違い
        Antから段階的にGradleへ移行できる

    14
GradleでAntのビルド定義を利用
[build.gradle]
ant.importBuild 'build.xml'
[build.xml]
 <project>
  <target name="hello">
    <echo>Antターゲットの実行</echo>
  </target>
 </project>




 15
GradleでAntタスクを利用

task hello << {
      ant.echo('Antタスクの実行')
}




16
Demo

17
Jenkinsとの統合 - Gradle
   Gradle wrapperを利用
       JDKさえ導入されていれば、Gradleを自動でイン
        ストールして実行してくれる
       Jenkins上では汎用コマンドとして実行すればよい


   Gradle wrapperは、CI用途に限らず、
    開発者の環境構築負荷軽減にも有用



18
Gradle wrapper
 [build.gradle]
 task wrapper(type: Wrapper) {
    gradleVersion = '1.0-milestone-9'
 }

  Gradle導入済の環境で"gradle wrapper"を実行
すると、Gradleのブートストラップ(gradlew)が生成される



                                        バージョン管理
                                         システム



  19
Jenkinsのビルド設定




20
Jenkinsとの統合 - Spock
   Spock
       レポートはJUnit互換なので、Jenkinsでそのまま
        利用可能




21
Jenkinsのテストレポート設定
   JUnitと同様




22
Demo

23
@nobusueの持論
 粗探し(?)   される頃から 一人前

 Gradleの粗探し
  プラグインがまだまだ少ない
  日本語の情報が少ない
  プロジェクトディレクトリの自動生成機能がな
   い
  などなど・・・


24
Gradleプラグイン、順調に増殖中
          http://wiki.
           gradle.org
           /display/G
           RADLE/Plu
           gins

25
Gradleを使い始める第一歩
   "Gradle User Guide"がおすすめ
       http://gradle.org/docs/current/userguide/
        userguide.html
       [翻訳版]
        http://monochromeroad.com/artifacts/gra
        dle/userguide/userguide.html
       翻訳プロジェクト(@literaliceさん)
         https://github.com/literalice/gradle-ja




26
Jenkins+Gradle
   @bluepapa32さんBlog:「Jenkins CI 上で
    Gradle を利用する最も簡単な方法」
       http://d.hatena.ne.jp/bluepapa32/201103
        17/1300376998



        時代はGradleだがや


27
ありがとうございました
       http://www.facebook.com/orehiji




28

Gws 20120521 gradle

  • 1.
    次世代ビルドツールGradle 最新情報アップデート 2012.05.21 須江信洋(@nobusue) http://www.jggug.org/
  • 2.
    自己紹介  須江 信洋(すえ のぶひろ)  Twitter: @nobusue  http://www.facebook.com/profile.php?id=732337 788  かれこれ10年位、JavaEE関連の仕事をしてます  G*(Groovy関連技術)との関わり  Groovyコミュニティ(JGGUG)サポートスタッフ  「プログラミングGROOVY」執筆チーム  「Groovy イン・アクション」翻訳チーム  Groovyで作ったBot飼ってます(@hatena_groovy) 2
  • 3.
    ビルドの悩み  Java(特にJava EE)のビルドプロセスは複雑  src -> compile -> test -> package ・・・  依存ライブラリの管理  環境の差異への対応  Windows / MacOS / Linux / Unix  IDE / CI / Test / Staging / Production  Java以外のJVM言語への対応  これに応えるべく、ビルドツールが進化 3
  • 4.
    ビルドツールの進化 パラダイム 手続き的 規約によるビルド ビルド定義 スクリプト Make Gradle XML Ant Maven 4
  • 5.
    http://gradle.org/  Ant/Mavenの課題を解決する次世代ビルドツール  AntとMavenの「いいとこどり」 2012/5/21現在  HibernateやSpringSourceで使われている 1.0-rc-3が最新  標準化と柔軟性の両立  Mavenライクな標準ディレクトリ構造を使い、そこから外れ る部分は自由にカスタマイズ可能  依存ライブラリはMavenリポジトリでもローカルJARでも好 きなように定義できる  マルチプロジェクトへの対応  ビルドスクリプトはGroovyで記述  DSLによるシンプルかつ可読性の高いビルド定義  条件分岐や繰り返しなど、任意の処理をGroovyで 5
  • 6.
    要するにGradleとは? Mavenのように 規約によるビルドで効率的に記述でき、 Antのように プロジェクト特有の事情に柔軟に対応でき、 Makeのように スクリプトのパワーを活かしたビルドが実現できる クロスプラットフォーム対応次世代ビルドツール 6
  • 7.
    Gradleのビルドスクリプト(例) apply plugin: 'java' Javaプラグインを適用 repositories { mavenCentral() 依存性解決にMavenリポジトリを利用 } プロダクトコードのコンパイル時の依存先 dependencies { compile( group: 'commons-collections', name: 'commons-collections', version: '3.2') testCompile( テストコードのコンパイル時の依存先 group: 'junit', name: 'junit', version: '4.+') } 7
  • 8.
    OK、「gradle test」を実行だ! Mavenと同様の規約に従って プロダクトコードとテストコードを 配置 8
  • 9.
  • 10.
    Gradle DSL  素朴な疑問  build.gradleに書いてある”apply”と か”repositories”とか”dependencies”とか何?  なんかGroovyスクリプトと違くね?  お答え  applyもrepositoriesもdependenciesも実はメソッド です(引数のカッコを省略してるだけ)  Gradleの文法はGroovyの内部DSLとして定義  詳しいことは・・・・  http://monochromeroad.com/artifacts/gradl e/userguide/writing_build_scripts.html#N11 360 10
  • 11.
    条件分岐も簡単 task "OsDependTask" <<{ def os = System.getProperty("os.name") if(os.contains("Windows")) { println "Windows用の処理" } else if(os.contains("Mac OS")) { println "Mac OS用の処理" } else { println "Linux/Unix用の処理" } } 11
  • 12.
    動的タスク定義も簡単 4.times { counter-> task "task${counter}" << { println "${counter+1}番目の動的タスクです" } } 12
  • 13.
  • 14.
    AntからGradleへ  Gradleは既存のAnt資産を活用できる  Antのbuild.xmlをそのまま読み込んで実行可能  Antターゲット=Gradleタスク  AntタスクをGradleから直接利用可能  GroovyのAntBuilderが組み込まれている  AntタスクとGradleタスクを共存することも可能  相互に依存するタスクも定義できる  AntタスクをGradleから拡張することもできる  Gradleは「Better Ant」としても使える  Mavenとの大きな違い  Antから段階的にGradleへ移行できる 14
  • 15.
    GradleでAntのビルド定義を利用 [build.gradle] ant.importBuild 'build.xml' [build.xml] <project> <target name="hello"> <echo>Antターゲットの実行</echo> </target> </project> 15
  • 16.
    GradleでAntタスクを利用 task hello <<{ ant.echo('Antタスクの実行') } 16
  • 17.
  • 18.
    Jenkinsとの統合 - Gradle  Gradle wrapperを利用  JDKさえ導入されていれば、Gradleを自動でイン ストールして実行してくれる  Jenkins上では汎用コマンドとして実行すればよい  Gradle wrapperは、CI用途に限らず、 開発者の環境構築負荷軽減にも有用 18
  • 19.
    Gradle wrapper [build.gradle] task wrapper(type: Wrapper) { gradleVersion = '1.0-milestone-9' } Gradle導入済の環境で"gradle wrapper"を実行 すると、Gradleのブートストラップ(gradlew)が生成される バージョン管理 システム 19
  • 20.
  • 21.
    Jenkinsとの統合 - Spock  Spock  レポートはJUnit互換なので、Jenkinsでそのまま 利用可能 21
  • 22.
  • 23.
  • 24.
    @nobusueの持論  粗探し(?) される頃から 一人前  Gradleの粗探し  プラグインがまだまだ少ない  日本語の情報が少ない  プロジェクトディレクトリの自動生成機能がな い  などなど・・・ 24
  • 25.
    Gradleプラグイン、順調に増殖中 http://wiki. gradle.org /display/G RADLE/Plu gins 25
  • 26.
    Gradleを使い始める第一歩  "Gradle User Guide"がおすすめ  http://gradle.org/docs/current/userguide/ userguide.html  [翻訳版] http://monochromeroad.com/artifacts/gra dle/userguide/userguide.html  翻訳プロジェクト(@literaliceさん)  https://github.com/literalice/gradle-ja 26
  • 27.
    Jenkins+Gradle  @bluepapa32さんBlog:「Jenkins CI 上で Gradle を利用する最も簡単な方法」  http://d.hatena.ne.jp/bluepapa32/201103 17/1300376998 時代はGradleだがや 27
  • 28.
    ありがとうございました http://www.facebook.com/orehiji 28