Download pdf - Gws 20120521 gradle

Transcript
Page 1: Gws 20120521 gradle

2012.05.21

須江信洋(@nobusue)

http://www.jggug.org/

次世代ビルドツールGradle

最新情報アップデート

Page 2: Gws 20120521 gradle

自己紹介

須江 信洋(すえ のぶひろ) Twitter: @nobusue

http://www.facebook.com/profile.php?id=732337788

かれこれ10年位、JavaEE関連の仕事をしてます

G*(Groovy関連技術)との関わり

Groovyコミュニティ(JGGUG)サポートスタッフ

「プログラミングGROOVY」執筆チーム

「Groovy イン・アクション」翻訳チーム

Groovyで作ったBot飼ってます(@hatena_groovy)

2

Page 3: Gws 20120521 gradle

ビルドの悩み

Java(特にJava EE)のビルドプロセスは複雑 src -> compile -> test -> package ・・・

依存ライブラリの管理

環境の差異への対応

Windows / MacOS / Linux / Unix

IDE / CI / Test / Staging / Production

Java以外のJVM言語への対応

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

3

Page 4: Gws 20120521 gradle

ビルドツールの進化

4

パラダイム

ビルド定義

スクリプト

XML

手続き的 規約によるビルド

Make

Ant Maven

Gradle

Page 5: Gws 20120521 gradle

Ant/Mavenの課題を解決する次世代ビルドツール AntとMavenの「いいとこどり」

HibernateやSpringSourceで使われている

標準化と柔軟性の両立 Mavenライクな標準ディレクトリ構造を使い、そこから外れる部分は自由にカスタマイズ可能

依存ライブラリはMavenリポジトリでもローカルJARでも好きなように定義できる

マルチプロジェクトへの対応

ビルドスクリプトはGroovyで記述 DSLによるシンプルかつ可読性の高いビルド定義

条件分岐や繰り返しなど、任意の処理をGroovyで

5

http://gradle.org/

2012/5/21現在

1.0-rc-3が最新

Page 6: Gws 20120521 gradle

要するにGradleとは?

6

Mavenのように 規約によるビルドで効率的に記述でき、

Antのように

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

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

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

Page 7: Gws 20120521 gradle

Gradleのビルドスクリプト(例)

7

apply plugin: 'java' repositories { mavenCentral() } dependencies { compile( group: 'commons-collections', name: 'commons-collections', version: '3.2') testCompile( group: 'junit', name: 'junit', version: '4.+') }

Javaプラグインを適用

依存性解決にMavenリポジトリを利用

プロダクトコードのコンパイル時の依存先

テストコードのコンパイル時の依存先

Page 8: Gws 20120521 gradle

OK、「gradle test」を実行だ!

8

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

配置

Page 9: Gws 20120521 gradle

Demo

9

Page 10: Gws 20120521 gradle

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#N11360

10

Page 11: Gws 20120521 gradle

条件分岐も簡単

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用の処理" } }

Page 12: Gws 20120521 gradle

動的タスク定義も簡単

12

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

Page 13: Gws 20120521 gradle

Demo

13

Page 14: Gws 20120521 gradle

AntからGradleへ Gradleは既存のAnt資産を活用できる Antのbuild.xmlをそのまま読み込んで実行可能 Antターゲット=Gradleタスク

AntタスクをGradleから直接利用可能 GroovyのAntBuilderが組み込まれている

AntタスクとGradleタスクを共存することも可能 相互に依存するタスクも定義できる AntタスクをGradleから拡張することもできる

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

14

Page 15: Gws 20120521 gradle

GradleでAntのビルド定義を利用

15

ant.importBuild 'build.xml'

<project> <target name="hello"> <echo>Antターゲットの実行</echo> </target> </project>

[build.gradle]

[build.xml]

Page 16: Gws 20120521 gradle

GradleでAntタスクを利用

16

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

Page 17: Gws 20120521 gradle

Demo

17

Page 18: Gws 20120521 gradle

Jenkinsとの統合 - Gradle

Gradle wrapperを利用 JDKさえ導入されていれば、Gradleを自動でインストールして実行してくれる

Jenkins上では汎用コマンドとして実行すればよい

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

18

Page 19: Gws 20120521 gradle

Gradle wrapper

19

task wrapper(type: Wrapper) { gradleVersion = '1.0-milestone-9' }

[build.gradle]

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

バージョン管理 システム

Page 20: Gws 20120521 gradle

Jenkinsのビルド設定

20

Page 21: Gws 20120521 gradle

Jenkinsとの統合 - Spock

Spock

レポートはJUnit互換なので、Jenkinsでそのまま利用可能

21

Page 22: Gws 20120521 gradle

Jenkinsのテストレポート設定

JUnitと同様

22

Page 23: Gws 20120521 gradle

Demo

23

Page 24: Gws 20120521 gradle

@nobusueの持論

粗探し(?) される頃から 一人前

Gradleの粗探し プラグインがまだまだ少ない

日本語の情報が少ない

プロジェクトディレクトリの自動生成機能がない

などなど・・・

24

Page 26: Gws 20120521 gradle

Gradleを使い始める第一歩

"Gradle User Guide"がおすすめ http://gradle.org/docs/current/userguide/

userguide.html

[翻訳版] http://monochromeroad.com/artifacts/gradle/userguide/userguide.html

翻訳プロジェクト(@literaliceさん)

https://github.com/literalice/gradle-ja

26

Page 27: Gws 20120521 gradle

Jenkins+Gradle

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

17/1300376998

27

時代はGradleだがや

Page 28: Gws 20120521 gradle

ありがとうございました

28

http://www.facebook.com/orehiji