Groovy基礎勉強会:Gradleの基礎            2013.03.09        須江信洋(@nobusue)                 http://d.hatena.ne.jp/nobusue        htt...
自己紹介       須江 信洋(すえ のぶひろ)           Twitter: @nobusue           https://www.facebook.com/nobuhiro.sue       約10年ほどJava...
ビルドツールの進化     パラダイム             手続き的   規約によるビルドビルド定義    スクリプト    Make    Gradle    XML      Ant     Maven3
ビルドツールの進化: epoch1     パラダイム                POM(Project規約によるビルド             手続き的          Object Model)ビルド定義           ビルドに...
ビルドツールの進化: epoch2              Gradle Build Language     パラダイム             ビルドを「言語内DSL」で記述                手続き的            ...
http://gradle.org/       Ant/Mavenの課題を解決する次世代ビルドツール           AntとMavenの「いいとこどり」                 2013/3/9現在           H...
Gradleのビルドスクリプト(例)apply plugin: java     Javaプラグインを適用repositories {  mavenCentral()       依存性解決にMavenリポジトリを利用}            ...
OK、「gradle test」を実行だ!         Mavenと同様の規約に従って         プロダクトコードとテストコードを                配置8
Gradle DSL   疑問       build.gradleに書いてある”apply”と        か”repositories”とか”dependencies”とか何?       なんかGroovyスクリプトと違くね? ...
今日のお題: Gradleの基礎   「基礎とは入門ではない」 by @kyon_mm       入門編は別の機会に   Gradleの根幹となる「仕組み」を理解したい   そのためには、プラグインを作ってみるのが    早道だと考え...
Gradle DSLのエントリーポイント   Gradleビルド言語リファレンス       http://gradle.monochromeroad.com/docs/        dsl/index.html11
Gradleの代表オブジェクト   org.gradle.api.Project       ビルドスクリプト(build.gradle)に対応       中核となるオブジェクト       ビルドスクリプト内では暗黙的に、もしくはp...
Gradleの代表オブジェクト   org.gradle.api.invocation.Gradle       実行中のビルドエンジンに対応       初期化時の情報や、環境情報を保持       Project.getGradle...
Gradleの代表オブジェクト   org.gradle.api.initialization.Settings       settings.gradleに対応       マルチプロジェクト構成時にプロジェクト階層の情        ...
プラグインへの道(1/2)   カスタムタスクを作る    1.   ビルドファイル内にtask{}を作る    2.   ビルドファイル内にDefaultTaskのサブクラスを         作る    3.   カスタムタスクをbuil...
プラグインへの道(2/2)   カスタムプラグインを作る    1.   ビルドファイル内にPluginインターフェースの実         装クラスを作る(apply()を実装)    2.   プラグインをbuildSrc/に分離する  ...
タスクとプラグイン   タスク       何らかの「処理」を行うもの       Antのタスクを想像してもらえばよいです   プラグイン       タスク/コンフィグレーション/プロパティ/メソッド/コ        ンセプトな...
便利メソッド/プロパティ    file()        相対/絶対パス、Fileオブジェクト、URLなど        PathValidationでいろいろ判定可能    files()        ファイルのコレクション(f...
拡張プロパティ    Gradleのドメインモデルにプロパティを追加する     際には、extプロパティ(extブロック)を使うこと        Gradle-1.0M9からこちらが強く推奨されています        現在は互換性のた...
Gradleプラグイン、順調に増殖中          http://wiki.           gradle.org           /display/G           RADLE/Plu           gins20
Gradleと仲良くなるために   Gradle 日本語ドキュメント(@literaliceさん)       http://gradle.monochromeroad.com/docs/in        dex.html   ビルドツ...
おすすめ書籍   “Gradle Effective Implementation    Guide” Hubert Klein Ikkink (mrhaki)       http://mrhaki.blogspot.de/search/...
Gradleに入門したい?   G*ワークショップZ 3/15はGradleハンズオン    やります。ぜひご参加ください。       http://jggug.doorkeeper.jp/events/300723
ありがとうございました              http://nekofont.upat.jp/24
Upcoming SlideShare
Loading in …5
×

Groovy base gradle_20130309

3,825 views

Published on

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
  • 須江さん、いつもながら勉強になります。どんどん新しい技術、コンセプトが出てきてキャッチアップが大変。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,825
On SlideShare
0
From Embeds
0
Number of Embeds
1,367
Actions
Shares
0
Downloads
0
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Groovy base gradle_20130309

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

×