SlideShare a Scribd company logo
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

PDF
20140329_kyon_kao_wedding_LT_Groovy
PDF
Gws 20140418 camel_groovy
PDF
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
PDF
HerokuでGroonga
PDF
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
PDF
GameJamでGithubを使おう
PDF
プレゼンテーション スキルアップセミナー
PPT
twitter Bot Generator プレゼン in XOOPS Cubeサタデーラボ
20140329_kyon_kao_wedding_LT_Groovy
Gws 20140418 camel_groovy
第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み
HerokuでGroonga
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
GameJamでGithubを使おう
プレゼンテーション スキルアップセミナー
twitter Bot Generator プレゼン in XOOPS Cubeサタデーラボ

Viewers also liked (11)

PDF
Jjug 20140430 gradle_basic
PPTX
Jjug 20140430 gradle_advanced
PDF
Html5勉強会 20120423
PDF
ぽんぽこバレー勉強会 20120427
PPT
20111031 MobileWeb at TDC
PDF
Groovy indy 20120222
PDF
Gws 20141024 gradle_intro
PDF
G*workshop 2011/11/22 Geb+Betamax
PPTX
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
PDF
Light and shadow of microservices
PDF
JSUG20171027-spfingboot-k8s-ocp
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_advanced
Html5勉強会 20120423
ぽんぽこバレー勉強会 20120427
20111031 MobileWeb at TDC
Groovy indy 20120222
Gws 20141024 gradle_intro
G*workshop 2011/11/22 Geb+Betamax
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
Light and shadow of microservices
JSUG20171027-spfingboot-k8s-ocp
Ad

Similar to Jjug 20140430 gradle_intro (20)

PDF
Gws 20120521 gradle
PDF
Groovy base gradle_20130309
PDF
Spring in-summer-gradle-hands on-withanswers
PDF
Gradle a new Generation Build Tool
PPTX
[社内勉強会]Gradleを使おう
PDF
Androidアプリ開発で活躍必至!? ビルドツールGradle
PDF
Gws 20130315 gradle_handson
PPTX
Gradle入門
PDF
Gradle handson
PDF
明日から使えるgradle
PDF
Gradle布教活動
PDF
Gradleどうでしょう
PPTX
Gradle入門
PDF
Agileツール適合化分科会(構成管理・ビルドツール)
PDF
AndroidStudioはじめました ~Gradle編~
PDF
groovy 2.1.0 20130118
ODP
Nseg20120929
PDF
Android アプリ開発における Gradle ビルドシステム
PDF
Android App Development with Gradle & Android Studio
PDF
Grailsのススメ(仮)
Gws 20120521 gradle
Groovy base gradle_20130309
Spring in-summer-gradle-hands on-withanswers
Gradle a new Generation Build Tool
[社内勉強会]Gradleを使おう
Androidアプリ開発で活躍必至!? ビルドツールGradle
Gws 20130315 gradle_handson
Gradle入門
Gradle handson
明日から使えるgradle
Gradle布教活動
Gradleどうでしょう
Gradle入門
Agileツール適合化分科会(構成管理・ビルドツール)
AndroidStudioはじめました ~Gradle編~
groovy 2.1.0 20130118
Nseg20120929
Android アプリ開発における Gradle ビルドシステム
Android App Development with Gradle & Android Studio
Grailsのススメ(仮)
Ad

More from Nobuhiro Sue (16)

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
Gws 20140117 lt
PDF
Gws 20131018 vertx_handson(updated)
PDF
クラウド研究会 20120712 BaaS
PDF
Letsgo developer 2012 Continuous Delivery
PPTX
TDC20111031_Groovy_Geb
PPTX
Letsgo sendai nobusue_20110528
PPTX
DevSummit2011JGGUG OpenJam: Groovy
PPTX
G*workshop 20101209 OSGi and Grails2.0
PPTX
DevLOVE 20100823 EnterpriseOSGi
PPTX
Gws sokai 20100724_nsue
PPT
G*workshop sendai 20100424(v2)
Fuse Online Hands-on Guide
Fuse Online Hands-on Guide
Knative CloudEvents
JTF2018_B30_k8s_operator_nobusue
DevLove k8s nobusue 20180711
Gws 20140117 lt
Gws 20131018 vertx_handson(updated)
クラウド研究会 20120712 BaaS
Letsgo developer 2012 Continuous Delivery
TDC20111031_Groovy_Geb
Letsgo sendai nobusue_20110528
DevSummit2011JGGUG OpenJam: Groovy
G*workshop 20101209 OSGi and Grails2.0
DevLOVE 20100823 EnterpriseOSGi
Gws sokai 20100724_nsue
G*workshop sendai 20100424(v2)

Jjug 20140430 gradle_intro