SlideShare uma empresa Scribd logo
1 de 24
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

Mais conteúdo relacionado

Mais procurados

enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summerenterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 SummerUehara 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
 
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
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
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
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118Uehara Junji
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222Nobuhiro Sue
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersTakuma Watabiki
 
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
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうKazuhiro Hara
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
Jjug 20140430 gradle_advanced
Jjug 20140430 gradle_advancedJjug 20140430 gradle_advanced
Jjug 20140430 gradle_advancedMasatoshi Hayashi
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門guestd4898b
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 

Mais procurados (19)

enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summerenterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
 
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
 
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
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
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
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
 
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.
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろう
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Jjug 20140430 gradle_advanced
Jjug 20140430 gradle_advancedJjug 20140430 gradle_advanced
Jjug 20140430 gradle_advanced
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
GContractsの基礎
GContractsの基礎GContractsの基礎
GContractsの基礎
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 

Semelhante a Groovy base gradle_20130309

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムYu Nobuoka
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioSoichiro Kashima
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみたshinya sakemoto
 
Gradleスクリプトを読み解く
Gradleスクリプトを読み解くGradleスクリプトを読み解く
Gradleスクリプトを読み解くShoichi Matsuda
 
AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~Yabata Tomomitsu
 
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方Makoto Yamazaki
 
[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おう[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おうhirooooo
 
gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションgradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションShinya Mochida
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)Kazuho Oku
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio CodeTakashi Okawa
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートAkira Inoue
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話Katsunori Kanda
 

Semelhante a Groovy base gradle_20130309 (20)

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
 
Gradle再入門.pptx
Gradle再入門.pptxGradle再入門.pptx
Gradle再入門.pptx
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみた
 
Gradleスクリプトを読み解く
Gradleスクリプトを読み解くGradleスクリプトを読み解く
Gradleスクリプトを読み解く
 
AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~AndroidStudioはじめました ~Gradle編~
AndroidStudioはじめました ~Gradle編~
 
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おう[社内勉強会]Gradleを使おう
[社内勉強会]Gradleを使おう
 
gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションgradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
 
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
 

Mais de Nobuhiro Sue

Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on GuideNobuhiro Sue
 
Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on GuideNobuhiro Sue
 
Knative CloudEvents
Knative CloudEventsKnative CloudEvents
Knative CloudEventsNobuhiro Sue
 
JTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueJTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueNobuhiro Sue
 
DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711Nobuhiro Sue
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpNobuhiro Sue
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservicesNobuhiro Sue
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro Sue
 
Jjug 20140430 gradle_intro
Jjug 20140430 gradle_introJjug 20140430 gradle_intro
Jjug 20140430 gradle_introNobuhiro Sue
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovyNobuhiro Sue
 
20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_GroovyNobuhiro Sue
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Nobuhiro Sue
 
クラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSクラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSNobuhiro Sue
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryNobuhiro Sue
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427Nobuhiro Sue
 
Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423Nobuhiro Sue
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxNobuhiro Sue
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDCNobuhiro Sue
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockNobuhiro Sue
 

Mais de Nobuhiro Sue (20)

Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on Guide
 
Fuse Online Hands-on Guide
Fuse Online Hands-on GuideFuse Online Hands-on Guide
Fuse Online Hands-on Guide
 
Knative CloudEvents
Knative CloudEventsKnative CloudEvents
Knative CloudEvents
 
JTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusueJTF2018_B30_k8s_operator_nobusue
JTF2018_B30_k8s_operator_nobusue
 
DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711DevLove k8s nobusue 20180711
DevLove k8s nobusue 20180711
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocp
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservices
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
Jjug 20140430 gradle_intro
Jjug 20140430 gradle_introJjug 20140430 gradle_intro
Jjug 20140430 gradle_intro
 
Gws 20140418 camel_groovy
Gws 20140418 camel_groovyGws 20140418 camel_groovy
Gws 20140418 camel_groovy
 
20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy20140329_kyon_kao_wedding_LT_Groovy
20140329_kyon_kao_wedding_LT_Groovy
 
Gws 20140117 lt
Gws 20140117 ltGws 20140117 lt
Gws 20140117 lt
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)
 
クラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaSクラウド研究会 20120712 BaaS
クラウド研究会 20120712 BaaS
 
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous DeliveryLetsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
 
Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
 

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