SlideShare a Scribd company logo
1 of 36
Download to read offline
2014.04.30
須江信洋(@nobusue)
http://d.hatena.ne.jp/nobusue
https://www.facebook.com/nobuhiro.sue
2時間で分かる!
次世代ビルドツールの本命
Gradleの全貌 ~導入編~
2
自己紹介
 須江 信洋(すえ のぶひろ)
 Twitter: @nobusue
 https://www.facebook.com/nobuhiro.sue
 約10年ほどJavaEE関連の仕事をしてます
 2013年10月よりフリーランス(個人事業主)
 最近興味を持っているもの
 Vert.x / Storm / Camel / Elasticsearch
 Vagrant / Docker / Ansible / Serverspec
 もちろんGroovy / Gradle / Grails
Gradle本
(執筆中)
3
JGGUGって?
 Japan Grails/Groovy User Group
 2009年発足
 Grails/GroovyなどのGroovyエコシステム(G*)
に関するコミュニティ
 2006年から活動していたGrailsコミュニティが前身
 毎月第3金曜日にG*ワークショップZを開催
 参加型(ハンズオンなど)
 告知・申し込みはこちら
 http://jggug.doorkeeper.jp/
http://www.jggug.org/
導入編 目次
 Gradle概要
 Gradleとは?
 Ant/Mavenとの差別化ポイント
 Gradleの普及状況
 Gradleの利用方法
 インストール
 Hello Gradle
 参考情報
4
5
Gradle概要
 Ant/Mavenの課題を解決する次世代ビルドツール
 AntとMavenの「いいとこどり」
 HibernateやSpringなど、多くのプロジェクトで採用
 標準化と柔軟性の両立
 Mavenライクな標準ディレクトリ構造を使い、そこから外れる
部分は自由にカスタマイズ可能
 依存ライブラリはMavenリポジトリでもローカルJARでも好き
なように定義できる
 マルチプロジェクトへの対応が容易
 ビルドスクリプトはGroovyで記述
 DSLによるシンプルかつ可読性の高いビルド定義
 条件分岐や繰り返しなど、任意の処理をGroovyで実行可能
6
http://gradle.org/
要するにGradleとは?
7
Mavenのように
規約によるビルドで効率的に記述でき、
Antのように
プロジェクト特有の事情に柔軟に対応でき、
Makeのように
スクリプトのパワーを活かしたビルドが実現できる
クロスプラットフォーム対応次世代ビルドツール
ビルドツールの進化
8
パラダイム
ビルド定義
スクリプト
XML
手続き的 規約によるビルド
Make
Ant Maven
Gradle
ビルドツールの進化: epoch1
9
パラダイム
ビルド定義
スクリプト
XML
手続き的 規約によるビルド
Make
Ant Maven
Gradle
元祖ビルドツール
ビルドツールの進化: epoch2
10
パラダイム
ビルド定義
スクリプト
XML
手続き的 規約によるビルド
Make
Ant Maven
Gradle
JavaとXMLにより
クロスプラットフォーム対応を実現
ビルドツールの進化: epoch3
11
パラダイム
ビルド定義
スクリプト
XML
手続き的 規約によるビルド
Make
Ant Maven
Gradle
ビルドに
「ドメインモデル(POM)」と
「依存性管理」を導入
ビルドツールの進化: epoch4
12
パラダイム
ビルド定義
スクリプト
XML
手続き的 規約によるビルド
Make
Ant Maven
Gradle
ビルドを「言語内DSL」で記述
ドメインモデルをスクリプトで直接操作
Gradleのビルドスクリプト(例)
13
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile ‘org.slf4j:slf4j-api:1.7.5’
testCompile ‘junit:junit:4.11’
}
Javaプラグインを適用
依存性解決に
Maven Centralを利用
プロダクトコードの依存ライブラリ
テストコードの依存ライブラリ
Gradle DSL
 Gradleが独自に定義する文法
 build.gradleで記述する”apply”や
”repositories”、”dependencies”など
 Groovyの標準の文法とは異なる
 舞台裏
 apply / repositories / dependenciesはメソッド
 単に引数のカッコを省略しているだけ(Groovyの
省略記法を利用)
 メソッドのレシーバはGradleが提供するオブジェクト
14
スクリプトの柔軟性: 条件分岐
15
task "OsDependTask" << {
def os = System.getProperty("os.name")
if(os.contains("Windows")) {
//Windows用の処理
}
else if(os.contains("Mac OS")) {
//Mac OS用の処理
}
else {
//Linux/Unix用の処理
}
}
Javaのクラスが
直接使える
ifやswitchで
分岐が書ける
規約に合わないプロジェクトへの対応
16
├── build
│ └── classes
│ └── main
├── build.gradle
└── src
├── main
│ ├── java
│ └── webapp
│ ├── index.html
│ └── WEB-INF
│ └── classes
└── test
└── java
規約: src/main/java
⇒build/classes/main
src/main/webapp/WEB-INF/classes
以下にクラスを生成したい
規約に合わないプロジェクトへの対応
 以下のようにしてカスタマイズ可能
17
[build.gradle]
sourceSets.main.output.classesDir =
‘src/main/webapp/WEB-INF/classes’
マルチプロジェクト
 複数プロジェクト(サブプロジェクト)から構成さ
れるプロジェクトのビルドを定義
 サブプロジェクト間の依存関係を定義可能
 依存関係を考慮してビルドを行う
 サブプロジェクトに共通する処理や設定の一
元化が可能
 Gradleのkiller featureの一つ
 Hibernate
 Gradle自身のビルド
18
⇒詳細は「基礎編」で!
Gradleラッパー
 Gradleの個別導入を不要に
 JDKさえ導入されていれば、Gradleを自動でイン
ストールして実行してくれる仕組み
 環境構築の手間を削減し、利用の敷居を下げる
 Gradleラッパーは以下の用途で有効
 JenkinsなどのCI環境での利用
 開発者の環境構築負荷軽減
 利用するGradleのバージョン統一
19
Gradleラッパー
20
Gradle導入済の環境で"gradle wrapper"を実行
すると、Gradleのブートストラップが生成される
バージョン管理
システム等
Gradle
未導入環境
“gradlew <task>”を実行すると、
Gradleが自動的に導入される
登録
取得
Gradle
バイナリ
(zip)
自動DL /
環境設定
g
Gradleデーモン
 Gradleのプロセスを常駐し、起動を高速化
 起動
 gradle --daemon <task>
 停止
 gradle --stop
 デフォルトでdaemonを使う場合
 export GRADLE_OPTS=
“-Dorg.gradle.daemon=true”
 もしくは gradle.properties に
org.gradle.daemon=true を追加
21
AntからGradleへの移行容易性
 Gradleは既存のAnt資産を活用できる
 Antのbuild.xmlをそのまま読み込んで実行可能
 AntタスクをGradleから直接利用可能
 AntタスクとGradleタスクを共存することも可能
 相互に依存するタスクも定義できる
 AntタスクをGradleから拡張することもできる
 Gradleは「Better Ant」としても使える
 Mavenとの大きな違い
 Antから段階的にGradleへ移行できる
22
⇒詳細は「発展編」で!
Gradleの普及状況
 SpringやHibernateなど多数のOSSで採用
23
Androidのビルドに採用
24
http://www.gradleware.com/resources/tech/android
ビルドツール動向
25 http://zeroturnaround.com/rebellabs/java-build-tools-part-2-a-
decision-Makers-comparison-of-maven-gradle-and-ant-ivy/
26
Gradleの利用方法
Gradleインストール
 前提
 JDK1.5以上 (“java –version”で確認)
 現時点では1.8に未対応なので1.7がおすすめ
 GVM利用
 curl -s get.gvmtool.net | bash
 gvm install gradle
 詳細は http://gvmtool.net/ 参照
 (Windowsの場合はCygwinが必要)
 ZIPを展開
 http://www.gradle.org/downloads
 適当なディレクトリに展開 ($GRADLE_HOME)
 $GRADLE_HOME/bin にパスを通しておく
27
動作確認
 gradle -v
28
GVMでインストールした場合は ~/.gvm/gradle/<version> 以下に導入され、
~/.gvm/gradle/current にシンボリックリンクが作成されます
Hello Gradle
 適当なディレクトリを作成し、カレントを移動
 以下の内容で”build.gradle”を作成
 “gradle hello” を実行
29
task hello << {
println 'Hello Gradle world!'
}
Hello Gradle解説
30
task hello << {
println 'Hello Gradle world!'
}
タスクの定義
タスクにクロージャを追加
※ leftShift()の省略記法
Groovyのprintln =
JavaのSystem.out.println()
実行可能タスクの確認
 gradle tasks
31
32
参考情報
Gradle関連情報
 Gradle 日本語ドキュメント
 http://gradle.monochromeroad.com/docs/index.html
 サンプルコード
 gradle-1.12-all.zipの”samples/”以下
 Gradleプロジェクトのソースコード
 gradle-1.12-src.zip
 https://github.com/gradle/gradle
 GVM:the Groovy enVironment Manager
 http://gvmtool.net/
 Groovy/Grails/Gradle/Vert.x/SpringBootなどに対応
33
Gradle Plugins
34
http://aalmiray.github.io/gradle-plugins/
Gradleロードマップ
 2014/4/30時点での最新は1.12
 1.xは1.12で最後、次のリリースは2.0
 http://forums.gradle.org/gradle/topics/aft
er_1_12_comes_2_0
 最近の重点強化点
 依存関係管理をより柔軟・緻密に
 ビルドのパラレル化
 IDE連携強化
 ネィティブ(C言語系)ビルド対応
35
以上、導入編でした
36
引き続き 「基礎編」 を
お楽しみください

More Related Content

Viewers also liked

Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 
Jjug 20140430 gradle_advanced
Jjug 20140430 gradle_advancedJjug 20140430 gradle_advanced
Jjug 20140430 gradle_advancedMasatoshi Hayashi
 
Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423Nobuhiro Sue
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427Nobuhiro Sue
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDCNobuhiro Sue
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222Nobuhiro Sue
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro 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
 
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
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservicesNobuhiro Sue
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpNobuhiro Sue
 

Viewers also liked (11)

Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
Jjug 20140430 gradle_advanced
Jjug 20140430 gradle_advancedJjug 20140430 gradle_advanced
Jjug 20140430 gradle_advanced
 
Html5勉強会 20120423
Html5勉強会 20120423Html5勉強会 20120423
Html5勉強会 20120423
 
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
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
 
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
 
Light and shadow of microservices
Light and shadow of microservicesLight and shadow of microservices
Light and shadow of microservices
 
JSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocpJSUG20171027-spfingboot-k8s-ocp
JSUG20171027-spfingboot-k8s-ocp
 

More from 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
 
Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Gws 20131018 vertx_handson(updated)
Gws 20131018 vertx_handson(updated)Nobuhiro Sue
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro 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
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 
Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528Nobuhiro Sue
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyNobuhiro Sue
 
G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0Nobuhiro Sue
 
DevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGiDevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGiNobuhiro Sue
 
Gws sokai 20100724_nsue
Gws sokai 20100724_nsueGws sokai 20100724_nsue
Gws sokai 20100724_nsueNobuhiro Sue
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 

More from Nobuhiro Sue (19)

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
 
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)
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
クラウド研究会 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
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528Letsgo sendai nobusue_20110528
Letsgo sendai nobusue_20110528
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
 
G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0G*workshop 20101209 OSGi and Grails2.0
G*workshop 20101209 OSGi and Grails2.0
 
DevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGiDevLOVE 20100823 EnterpriseOSGi
DevLOVE 20100823 EnterpriseOSGi
 
Gws sokai 20100724_nsue
Gws sokai 20100724_nsueGws sokai 20100724_nsue
Gws sokai 20100724_nsue
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 

Jjug 20140430 gradle_intro