Your SlideShare is downloading. ×
0
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月よりフ...
3
JGGUGって?
 Japan Grails/Groovy User Group
 2009年発足
 Grails/GroovyなどのGroovyエコシステム(G*)
に関するコミュニティ
 2006年から活動していたGrailsコ...
導入編 目次
 Gradle概要
 Gradleとは?
 Ant/Mavenとの差別化ポイント
 Gradleの普及状況
 Gradleの利用方法
 インストール
 Hello Gradle
 参考情報
4
5
Gradle概要
 Ant/Mavenの課題を解決する次世代ビルドツール
 AntとMavenの「いいとこどり」
 HibernateやSpringなど、多くのプロジェクトで採用
 標準化と柔軟性の両立
 Mavenライクな標準ディレクトリ構造を使い、...
要するに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...
Gradle DSL
 Gradleが独自に定義する文法
 build.gradleで記述する”apply”や
”repositories”、”dependencies”など
 Groovyの標準の文法とは異なる
 舞台裏
 appl...
スクリプトの柔軟性: 条件分岐
15
task "OsDependTask" << {
def os = System.getProperty("os.name")
if(os.contains("Windows")) {
//Windows用...
規約に合わないプロジェクトへの対応
16
├── build
│ └── classes
│ └── main
├── build.gradle
└── src
├── main
│ ├── java
│ └── webapp
│ ├── in...
規約に合わないプロジェクトへの対応
 以下のようにしてカスタマイズ可能
17
[build.gradle]
sourceSets.main.output.classesDir =
‘src/main/webapp/WEB-INF/classe...
マルチプロジェクト
 複数プロジェクト(サブプロジェクト)から構成さ
れるプロジェクトのビルドを定義
 サブプロジェクト間の依存関係を定義可能
 依存関係を考慮してビルドを行う
 サブプロジェクトに共通する処理や設定の一
元化が可能
...
Gradleラッパー
 Gradleの個別導入を不要に
 JDKさえ導入されていれば、Gradleを自動でイン
ストールして実行してくれる仕組み
 環境構築の手間を削減し、利用の敷居を下げる
 Gradleラッパーは以下の用途で有効
...
Gradleラッパー
20
Gradle導入済の環境で"gradle wrapper"を実行
すると、Gradleのブートストラップが生成される
バージョン管理
システム等
Gradle
未導入環境
“gradlew <task>”を実行すると...
g
Gradleデーモン
 Gradleのプロセスを常駐し、起動を高速化
 起動
 gradle --daemon <task>
 停止
 gradle --stop
 デフォルトでdaemonを使う場合
 export GRAD...
AntからGradleへの移行容易性
 Gradleは既存のAnt資産を活用できる
 Antのbuild.xmlをそのまま読み込んで実行可能
 AntタスクをGradleから直接利用可能
 AntタスクとGradleタスクを共存すること...
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-...
26
Gradleの利用方法
Gradleインストール
 前提
 JDK1.5以上 (“java –version”で確認)
 現時点では1.8に未対応なので1.7がおすすめ
 GVM利用
 curl -s get.gvmtool.net | bash
 gvm...
動作確認
 gradle -v
28
GVMでインストールした場合は ~/.gvm/gradle/<version> 以下に導入され、
~/.gvm/gradle/current にシンボリックリンクが作成されます
Hello Gradle
 適当なディレクトリを作成し、カレントを移動
 以下の内容で”build.gradle”を作成
 “gradle hello” を実行
29
task hello << {
println 'Hello Grad...
Hello Gradle解説
30
task hello << {
println 'Hello Gradle world!'
}
タスクの定義
タスクにクロージャを追加
※ leftShift()の省略記法
Groovyのprintln =
...
実行可能タスクの確認
 gradle tasks
31
32
参考情報
Gradle関連情報
 Gradle 日本語ドキュメント
 http://gradle.monochromeroad.com/docs/index.html
 サンプルコード
 gradle-1.12-all.zipの”samples/...
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_...
以上、導入編でした
36
引き続き 「基礎編」 を
お楽しみください
Upcoming SlideShare
Loading in...5
×

Jjug 20140430 gradle_intro

8,087

Published on

0 Comments
21 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,087
On Slideshare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
25
Comments
0
Likes
21
Embeds 0
No embeds

No notes for slide

Transcript of "Jjug 20140430 gradle_intro"

  1. 1. 2014.04.30 須江信洋(@nobusue) http://d.hatena.ne.jp/nobusue https://www.facebook.com/nobuhiro.sue 2時間で分かる! 次世代ビルドツールの本命 Gradleの全貌 ~導入編~
  2. 2. 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. 3. 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/
  4. 4. 導入編 目次  Gradle概要  Gradleとは?  Ant/Mavenとの差別化ポイント  Gradleの普及状況  Gradleの利用方法  インストール  Hello Gradle  参考情報 4
  5. 5. 5 Gradle概要
  6. 6.  Ant/Mavenの課題を解決する次世代ビルドツール  AntとMavenの「いいとこどり」  HibernateやSpringなど、多くのプロジェクトで採用  標準化と柔軟性の両立  Mavenライクな標準ディレクトリ構造を使い、そこから外れる 部分は自由にカスタマイズ可能  依存ライブラリはMavenリポジトリでもローカルJARでも好き なように定義できる  マルチプロジェクトへの対応が容易  ビルドスクリプトはGroovyで記述  DSLによるシンプルかつ可読性の高いビルド定義  条件分岐や繰り返しなど、任意の処理をGroovyで実行可能 6 http://gradle.org/
  7. 7. 要するにGradleとは? 7 Mavenのように 規約によるビルドで効率的に記述でき、 Antのように プロジェクト特有の事情に柔軟に対応でき、 Makeのように スクリプトのパワーを活かしたビルドが実現できる クロスプラットフォーム対応次世代ビルドツール
  8. 8. ビルドツールの進化 8 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant Maven Gradle
  9. 9. ビルドツールの進化: epoch1 9 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant Maven Gradle 元祖ビルドツール
  10. 10. ビルドツールの進化: epoch2 10 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant Maven Gradle JavaとXMLにより クロスプラットフォーム対応を実現
  11. 11. ビルドツールの進化: epoch3 11 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant Maven Gradle ビルドに 「ドメインモデル(POM)」と 「依存性管理」を導入
  12. 12. ビルドツールの進化: epoch4 12 パラダイム ビルド定義 スクリプト XML 手続き的 規約によるビルド Make Ant Maven Gradle ビルドを「言語内DSL」で記述 ドメインモデルをスクリプトで直接操作
  13. 13. Gradleのビルドスクリプト(例) 13 apply plugin: 'java' repositories { mavenCentral() } dependencies { compile ‘org.slf4j:slf4j-api:1.7.5’ testCompile ‘junit:junit:4.11’ } Javaプラグインを適用 依存性解決に Maven Centralを利用 プロダクトコードの依存ライブラリ テストコードの依存ライブラリ
  14. 14. Gradle DSL  Gradleが独自に定義する文法  build.gradleで記述する”apply”や ”repositories”、”dependencies”など  Groovyの標準の文法とは異なる  舞台裏  apply / repositories / dependenciesはメソッド  単に引数のカッコを省略しているだけ(Groovyの 省略記法を利用)  メソッドのレシーバはGradleが提供するオブジェクト 14
  15. 15. スクリプトの柔軟性: 条件分岐 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. 16. 規約に合わないプロジェクトへの対応 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. 17. 規約に合わないプロジェクトへの対応  以下のようにしてカスタマイズ可能 17 [build.gradle] sourceSets.main.output.classesDir = ‘src/main/webapp/WEB-INF/classes’
  18. 18. マルチプロジェクト  複数プロジェクト(サブプロジェクト)から構成さ れるプロジェクトのビルドを定義  サブプロジェクト間の依存関係を定義可能  依存関係を考慮してビルドを行う  サブプロジェクトに共通する処理や設定の一 元化が可能  Gradleのkiller featureの一つ  Hibernate  Gradle自身のビルド 18 ⇒詳細は「基礎編」で!
  19. 19. Gradleラッパー  Gradleの個別導入を不要に  JDKさえ導入されていれば、Gradleを自動でイン ストールして実行してくれる仕組み  環境構築の手間を削減し、利用の敷居を下げる  Gradleラッパーは以下の用途で有効  JenkinsなどのCI環境での利用  開発者の環境構築負荷軽減  利用するGradleのバージョン統一 19
  20. 20. Gradleラッパー 20 Gradle導入済の環境で"gradle wrapper"を実行 すると、Gradleのブートストラップが生成される バージョン管理 システム等 Gradle 未導入環境 “gradlew <task>”を実行すると、 Gradleが自動的に導入される 登録 取得 Gradle バイナリ (zip) 自動DL / 環境設定
  21. 21. g Gradleデーモン  Gradleのプロセスを常駐し、起動を高速化  起動  gradle --daemon <task>  停止  gradle --stop  デフォルトでdaemonを使う場合  export GRADLE_OPTS= “-Dorg.gradle.daemon=true”  もしくは gradle.properties に org.gradle.daemon=true を追加 21
  22. 22. AntからGradleへの移行容易性  Gradleは既存のAnt資産を活用できる  Antのbuild.xmlをそのまま読み込んで実行可能  AntタスクをGradleから直接利用可能  AntタスクとGradleタスクを共存することも可能  相互に依存するタスクも定義できる  AntタスクをGradleから拡張することもできる  Gradleは「Better Ant」としても使える  Mavenとの大きな違い  Antから段階的にGradleへ移行できる 22 ⇒詳細は「発展編」で!
  23. 23. Gradleの普及状況  SpringやHibernateなど多数のOSSで採用 23
  24. 24. Androidのビルドに採用 24 http://www.gradleware.com/resources/tech/android
  25. 25. ビルドツール動向 25 http://zeroturnaround.com/rebellabs/java-build-tools-part-2-a- decision-Makers-comparison-of-maven-gradle-and-ant-ivy/
  26. 26. 26 Gradleの利用方法
  27. 27. 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
  28. 28. 動作確認  gradle -v 28 GVMでインストールした場合は ~/.gvm/gradle/<version> 以下に導入され、 ~/.gvm/gradle/current にシンボリックリンクが作成されます
  29. 29. Hello Gradle  適当なディレクトリを作成し、カレントを移動  以下の内容で”build.gradle”を作成  “gradle hello” を実行 29 task hello << { println 'Hello Gradle world!' }
  30. 30. Hello Gradle解説 30 task hello << { println 'Hello Gradle world!' } タスクの定義 タスクにクロージャを追加 ※ leftShift()の省略記法 Groovyのprintln = JavaのSystem.out.println()
  31. 31. 実行可能タスクの確認  gradle tasks 31
  32. 32. 32 参考情報
  33. 33. 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
  34. 34. Gradle Plugins 34 http://aalmiray.github.io/gradle-plugins/
  35. 35. 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. 36. 以上、導入編でした 36 引き続き 「基礎編」 を お楽しみください
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×