SlideShare a Scribd company logo
Groovy基礎勉強会:
Gradleの基礎

            2013.03.09
        須江信洋(@nobusue)
                 http://d.hatena.ne.jp/nobusue
        https://www.facebook.com/nobuhiro.sue
自己紹介
       須江 信洋(すえ のぶひろ)
           Twitter: @nobusue
           https://www.facebook.com/nobuhiro.sue
       約10年ほどJavaEE関連の仕事をしてます
       最近はPhoneGap(Cordova)とかがメイン
       G*(Groovy関連技術)との関わり
           JGGUGサポートスタッフ
           「プログラミングGROOVY」執筆チーム
           「Groovy イン・アクション」翻訳チーム
           Groovyで作ったBot飼ってます(@hatena_groovy)

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




    スクリプト    Make    Gradle


    XML      Ant     Maven

3
ビルドツールの進化: epoch1
     パラダイム
                POM(Project規約によるビルド
             手続き的          Object Model)
ビルド定義           ビルドに「ドメインモデル」を導入



    スクリプト    Make            Gradle


    XML       Ant            Maven

4
ビルドツールの進化: epoch2
              Gradle Build Language
     パラダイム
             ビルドを「言語内DSL」で記述
                手続き的             規約によるビルド
          ドメインモデルをGroovyで自由に操作
ビルド定義




    スクリプト       Make           Gradle


    XML          Ant           Maven

5
http://gradle.org/

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

    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
Gradle DSL
   疑問
       build.gradleに書いてある”apply”と
        か”repositories”とか”dependencies”とか何?
       なんかGroovyスクリプトと違くね?
   回答
       applyもrepositoriesもdependenciesも実はメ
        ソッドです(引数のカッコを省略してるだけ)
       Gradleの文法はGroovyの内部DSLとして定義



9
今日のお題: Gradleの基礎
   「基礎とは入門ではない」 by @kyon_mm
       入門編は別の機会に
   Gradleの根幹となる「仕組み」を理解したい
   そのためには、プラグインを作ってみるのが
    早道だと考えます
       プラグインを開発するには、Gradleのドメインモデ
        ルやビルドエンジンの仕組みの理解が不可欠
       とはいえ、時間も限られますので、とっかりとなる
        情報をなめるだけにしておきます

10
Gradle DSLのエントリーポイント
   Gradleビルド言語リファレンス
       http://gradle.monochromeroad.com/docs/
        dsl/index.html




11
Gradleの代表オブジェクト
   org.gradle.api.Project
       ビルドスクリプト(build.gradle)に対応
       中核となるオブジェクト
       ビルドスクリプト内では暗黙的に、もしくはproject
        プロパティで参照




12
Gradleの代表オブジェクト
   org.gradle.api.invocation.Gradle
       実行中のビルドエンジンに対応
       初期化時の情報や、環境情報を保持
       Project.getGradle() で取得可能




13
Gradleの代表オブジェクト
   org.gradle.api.initialization.Settings
       settings.gradleに対応
       マルチプロジェクト構成時にプロジェクト階層の情
        報を保持




14
プラグインへの道(1/2)
   カスタムタスクを作る
    1.   ビルドファイル内にtask{}を作る
    2.   ビルドファイル内にDefaultTaskのサブクラスを
         作る
    3.   カスタムタスクをbuildSrc/に分離する
         ⇒依存関係は自動的に解決される
    4.   スタンドアロンプロジェクトとして分離する
         ⇒参照側からclasspathに追加する必要あり
       テスト支援
        org.gradle.testfixtures.ProjectBuilder
15
プラグインへの道(2/2)
   カスタムプラグインを作る
    1.   ビルドファイル内にPluginインターフェースの実
         装クラスを作る(apply()を実装)
    2.   プラグインをbuildSrc/に分離する
         ⇒依存関係は自動的に解決される
         ⇒マルチプロジェクトの場合はルートに配置
    3.   スタンドアロンプラグインとして分離する
         ⇒参照側は依存関係を追加して、apply plugin
       プラグイン独自プロパティ
        Extension Container(project.extensions)
         にJava Beanを追加し、透過的に参照できる

16
タスクとプラグイン
   タスク
       何らかの「処理」を行うもの
       Antのタスクを想像してもらえばよいです
   プラグイン
       タスク/コンフィグレーション/プロパティ/メソッド/コ
        ンセプトなどの拡張を含むモジュール
         例えばjava-baseプラグインは”sourcesets”と
          いう概念のみを提供し、Javaプラグインがそれを
          利用している
       メタデータ(META-INF/gradle-plugins)を持つ
17
便利メソッド/プロパティ
    file()
        相対/絶対パス、Fileオブジェクト、URLなど
        PathValidationでいろいろ判定可能
    files()
        ファイルのコレクション(filter可能)
        引数としてファイルを返すtaskを渡せる
    fileTree()
        ファイルのツリー階層をトラバース(visit)可能
        Antのpathelement式でinclude/exclude可能
    logger
        SLF4J Loggerのインスタンス
        標準出力への出力はQUIETレベルにリダイレクト
    18
拡張プロパティ
    Gradleのドメインモデルにプロパティを追加する
     際には、extプロパティ(extブロック)を使うこと
        Gradle-1.0M9からこちらが強く推奨されています
        現在は互換性のため未定義のプロパティがあってもエ
         ラーにならないが、警告が出ます
    ローカル変数(def)と異なり、ドメインモデルのラ
     イフサイクル全体で利用できます
    詳細はこちらの「13.4.2. 拡張プロパティ」を参照
        http://gradle.monochromeroad.com/docs/use
         rguide/writing_build_scripts.html

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

20
Gradleと仲良くなるために
   Gradle 日本語ドキュメント(@literaliceさん)
       http://gradle.monochromeroad.com/docs/in
        dex.html
   ビルドツールGradle スタートアップガイドの紹介
       http://www.ntts.co.jp/publish/column/tec/ja
        va_03/index.html
   GVM:the Groovy enVironment Manager
       http://gvmtool.net/
       groovy/grails/gradle/griffon/vert.x

    21
おすすめ書籍
   “Gradle Effective Implementation
    Guide” Hubert Klein Ikkink (mrhaki)
       http://mrhaki.blogspot.de/search/label/Gr
        adle%3AGoodness の人の本です




22
Gradleに入門したい?
   G*ワークショップZ 3/15はGradleハンズオン
    やります。ぜひご参加ください。
       http://jggug.doorkeeper.jp/events/3007




23
ありがとうございました




              http://nekofont.upat.jp/




24

More Related Content

PDF
Gws 20130315 gradle_handson
PDF
Groovyの紹介20130323
PDF
The History of Groovy #GroovyBase
PDF
Gws 20120521 gradle
PDF
Read Groovy Compile process(Groovy Benkyoukai 2013)
PDF
Groovy Shell Scripting 2015
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
Groovy Bootcamp 2015 by JGGUG
Gws 20130315 gradle_handson
Groovyの紹介20130323
The History of Groovy #GroovyBase
Gws 20120521 gradle
Read Groovy Compile process(Groovy Benkyoukai 2013)
Groovy Shell Scripting 2015
Java開発の強力な相棒として今すぐ使えるGroovy
Groovy Bootcamp 2015 by JGGUG

What's hot (19)

PDF
enterprise grails challenge, 2013 Summer
PDF
Markup Template Engine introduced Groovy 2.3
PDF
Introduce Groovy 2.3 trait
PDF
New features of Groovy 2.0 and 2.1
PDF
Jjug 20140430 gradle_basic
PDF
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
PDF
groovy 2.1.0 20130118
PDF
Groovy indy 20120222
PDF
Gradleどうでしょう
PDF
Spring in-summer-gradle-hands on-withanswers
PDF
GroovyServ concept, how to use and outline.
PDF
ClojureでElectronアプリを作ろう
PDF
システム開発を前進させるためのGradle導入法
PPTX
node-gypを使ったネイティブモジュールの作成
PPTX
Jjug 20140430 gradle_advanced
PDF
Grailsのススメ(仮)
PDF
GContractsの基礎
PPT
Maven2 プラグイン入門
PDF
Git flowの活用事例
enterprise grails challenge, 2013 Summer
Markup Template Engine introduced Groovy 2.3
Introduce Groovy 2.3 trait
New features of Groovy 2.0 and 2.1
Jjug 20140430 gradle_basic
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
groovy 2.1.0 20130118
Groovy indy 20120222
Gradleどうでしょう
Spring in-summer-gradle-hands on-withanswers
GroovyServ concept, how to use and outline.
ClojureでElectronアプリを作ろう
システム開発を前進させるためのGradle導入法
node-gypを使ったネイティブモジュールの作成
Jjug 20140430 gradle_advanced
Grailsのススメ(仮)
GContractsの基礎
Maven2 プラグイン入門
Git flowの活用事例
Ad

Similar to Groovy base gradle_20130309 (20)

PDF
Gradle a new Generation Build Tool
PPTX
[社内勉強会]Gradleを使おう
PDF
明日から使えるgradle
PDF
Gradle布教活動
PDF
Gradle handson
PDF
Agileツール適合化分科会(構成管理・ビルドツール)
PDF
Gws 20141024 gradle_intro
PDF
Androidアプリ開発で活躍必至!? ビルドツールGradle
PDF
Jjug 20140430 gradle_intro
PPTX
Gradle入門
PDF
Android App Development with Gradle & Android Studio
PDF
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
PPT
Dsl&Builder
PPTX
Gradle再入門.pptx
PPTX
Gradle入門
PDF
Javaな人が今すぐ使えるG*
PDF
TDD勉強会キックオフ for Java
PDF
Groovy Grails eXchage 2014 報告
PDF
Jenkins plugin memo
PDF
Groovy kisobenkyoukai20130309
Gradle a new Generation Build Tool
[社内勉強会]Gradleを使おう
明日から使えるgradle
Gradle布教活動
Gradle handson
Agileツール適合化分科会(構成管理・ビルドツール)
Gws 20141024 gradle_intro
Androidアプリ開発で活躍必至!? ビルドツールGradle
Jjug 20140430 gradle_intro
Gradle入門
Android App Development with Gradle & Android Studio
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Dsl&Builder
Gradle再入門.pptx
Gradle入門
Javaな人が今すぐ使えるG*
TDD勉強会キックオフ for Java
Groovy Grails eXchage 2014 報告
Jenkins plugin memo
Groovy kisobenkyoukai20130309
Ad

More from Nobuhiro Sue (20)

PDF
Fuse Online Hands-on Guide
PDF
Fuse Online Hands-on Guide
PDF
Knative CloudEvents
PDF
JTF2018_B30_k8s_operator_nobusue
PDF
DevLove k8s nobusue 20180711
PDF
JSUG20171027-spfingboot-k8s-ocp
PDF
Light and shadow of microservices
PDF
Gws 20140418 camel_groovy
PDF
20140329_kyon_kao_wedding_LT_Groovy
PDF
Gws 20140117 lt
PDF
Gws 20131018 vertx_handson(updated)
PDF
クラウド研究会 20120712 BaaS
PDF
Letsgo developer 2012 Continuous Delivery
PDF
ぽんぽこバレー勉強会 20120427
PDF
Html5勉強会 20120423
PDF
G*workshop 2011/11/22 Geb+Betamax
PPTX
TDC20111031_Groovy_Geb
PPT
20111031 MobileWeb at TDC
PPTX
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
PPTX
Letsgo sendai nobusue_20110528
Fuse Online Hands-on Guide
Fuse Online Hands-on Guide
Knative CloudEvents
JTF2018_B30_k8s_operator_nobusue
DevLove k8s nobusue 20180711
JSUG20171027-spfingboot-k8s-ocp
Light and shadow of microservices
Gws 20140418 camel_groovy
20140329_kyon_kao_wedding_LT_Groovy
Gws 20140117 lt
Gws 20131018 vertx_handson(updated)
クラウド研究会 20120712 BaaS
Letsgo developer 2012 Continuous Delivery
ぽんぽこバレー勉強会 20120427
Html5勉強会 20120423
G*workshop 2011/11/22 Geb+Betamax
TDC20111031_Groovy_Geb
20111031 MobileWeb at TDC
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
Letsgo sendai nobusue_20110528

Groovy base gradle_20130309

  • 1. Groovy基礎勉強会: Gradleの基礎 2013.03.09 須江信洋(@nobusue) http://d.hatena.ne.jp/nobusue https://www.facebook.com/nobuhiro.sue
  • 2. 自己紹介  須江 信洋(すえ のぶひろ)  Twitter: @nobusue  https://www.facebook.com/nobuhiro.sue  約10年ほどJavaEE関連の仕事をしてます  最近はPhoneGap(Cordova)とかがメイン  G*(Groovy関連技術)との関わり  JGGUGサポートスタッフ  「プログラミングGROOVY」執筆チーム  「Groovy イン・アクション」翻訳チーム  Groovyで作ったBot飼ってます(@hatena_groovy) 2
  • 3. ビルドツールの進化 パラダイム 手続き的 規約によるビルド ビルド定義 スクリプト Make Gradle XML Ant Maven 3
  • 4. ビルドツールの進化: epoch1 パラダイム POM(Project規約によるビルド 手続き的 Object Model) ビルド定義 ビルドに「ドメインモデル」を導入 スクリプト Make Gradle XML Ant Maven 4
  • 5. ビルドツールの進化: epoch2 Gradle Build Language パラダイム ビルドを「言語内DSL」で記述 手続き的 規約によるビルド ドメインモデルをGroovyで自由に操作 ビルド定義 スクリプト Make Gradle XML Ant Maven 5
  • 6. http://gradle.org/  Ant/Mavenの課題を解決する次世代ビルドツール  AntとMavenの「いいとこどり」 2013/3/9現在  HibernateやSpringSourceで使われている 最新は1.4  標準化と柔軟性の両立  Mavenライクな標準ディレクトリ構造を使い、そこから外れ る部分は自由にカスタマイズ可能  依存ライブラリはMavenリポジトリでもローカルJARでも好 きなように定義できる  マルチプロジェクトへの対応が容易  ビルドスクリプトはGroovyで記述  DSLによるシンプルかつ可読性の高いビルド定義  条件分岐や繰り返しなど、任意の処理をGroovyで 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. Gradle DSL  疑問  build.gradleに書いてある”apply”と か”repositories”とか”dependencies”とか何?  なんかGroovyスクリプトと違くね?  回答  applyもrepositoriesもdependenciesも実はメ ソッドです(引数のカッコを省略してるだけ)  Gradleの文法はGroovyの内部DSLとして定義 9
  • 10. 今日のお題: Gradleの基礎  「基礎とは入門ではない」 by @kyon_mm  入門編は別の機会に  Gradleの根幹となる「仕組み」を理解したい  そのためには、プラグインを作ってみるのが 早道だと考えます  プラグインを開発するには、Gradleのドメインモデ ルやビルドエンジンの仕組みの理解が不可欠  とはいえ、時間も限られますので、とっかりとなる 情報をなめるだけにしておきます 10
  • 11. Gradle DSLのエントリーポイント  Gradleビルド言語リファレンス  http://gradle.monochromeroad.com/docs/ dsl/index.html 11
  • 12. Gradleの代表オブジェクト  org.gradle.api.Project  ビルドスクリプト(build.gradle)に対応  中核となるオブジェクト  ビルドスクリプト内では暗黙的に、もしくはproject プロパティで参照 12
  • 13. Gradleの代表オブジェクト  org.gradle.api.invocation.Gradle  実行中のビルドエンジンに対応  初期化時の情報や、環境情報を保持  Project.getGradle() で取得可能 13
  • 14. Gradleの代表オブジェクト  org.gradle.api.initialization.Settings  settings.gradleに対応  マルチプロジェクト構成時にプロジェクト階層の情 報を保持 14
  • 15. プラグインへの道(1/2)  カスタムタスクを作る 1. ビルドファイル内にtask{}を作る 2. ビルドファイル内にDefaultTaskのサブクラスを 作る 3. カスタムタスクをbuildSrc/に分離する ⇒依存関係は自動的に解決される 4. スタンドアロンプロジェクトとして分離する ⇒参照側からclasspathに追加する必要あり  テスト支援  org.gradle.testfixtures.ProjectBuilder 15
  • 16. プラグインへの道(2/2)  カスタムプラグインを作る 1. ビルドファイル内にPluginインターフェースの実 装クラスを作る(apply()を実装) 2. プラグインをbuildSrc/に分離する ⇒依存関係は自動的に解決される ⇒マルチプロジェクトの場合はルートに配置 3. スタンドアロンプラグインとして分離する ⇒参照側は依存関係を追加して、apply plugin  プラグイン独自プロパティ  Extension Container(project.extensions) にJava Beanを追加し、透過的に参照できる 16
  • 17. タスクとプラグイン  タスク  何らかの「処理」を行うもの  Antのタスクを想像してもらえばよいです  プラグイン  タスク/コンフィグレーション/プロパティ/メソッド/コ ンセプトなどの拡張を含むモジュール  例えばjava-baseプラグインは”sourcesets”と いう概念のみを提供し、Javaプラグインがそれを 利用している  メタデータ(META-INF/gradle-plugins)を持つ 17
  • 18. 便利メソッド/プロパティ  file()  相対/絶対パス、Fileオブジェクト、URLなど  PathValidationでいろいろ判定可能  files()  ファイルのコレクション(filter可能)  引数としてファイルを返すtaskを渡せる  fileTree()  ファイルのツリー階層をトラバース(visit)可能  Antのpathelement式でinclude/exclude可能  logger  SLF4J Loggerのインスタンス  標準出力への出力はQUIETレベルにリダイレクト 18
  • 19. 拡張プロパティ  Gradleのドメインモデルにプロパティを追加する 際には、extプロパティ(extブロック)を使うこと  Gradle-1.0M9からこちらが強く推奨されています  現在は互換性のため未定義のプロパティがあってもエ ラーにならないが、警告が出ます  ローカル変数(def)と異なり、ドメインモデルのラ イフサイクル全体で利用できます  詳細はこちらの「13.4.2. 拡張プロパティ」を参照  http://gradle.monochromeroad.com/docs/use rguide/writing_build_scripts.html 19
  • 20. Gradleプラグイン、順調に増殖中 http://wiki. gradle.org /display/G RADLE/Plu gins 20
  • 21. Gradleと仲良くなるために  Gradle 日本語ドキュメント(@literaliceさん)  http://gradle.monochromeroad.com/docs/in dex.html  ビルドツールGradle スタートアップガイドの紹介  http://www.ntts.co.jp/publish/column/tec/ja va_03/index.html  GVM:the Groovy enVironment Manager  http://gvmtool.net/  groovy/grails/gradle/griffon/vert.x 21
  • 22. おすすめ書籍  “Gradle Effective Implementation Guide” Hubert Klein Ikkink (mrhaki)  http://mrhaki.blogspot.de/search/label/Gr adle%3AGoodness の人の本です 22
  • 23. Gradleに入門したい?  G*ワークショップZ 3/15はGradleハンズオン やります。ぜひご参加ください。  http://jggug.doorkeeper.jp/events/3007 23
  • 24. ありがとうございました http://nekofont.upat.jp/ 24