Upload
nobuhiro-sue
View
7.917
Download
4
Embed Size (px)
Citation preview
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
引き続き 「基礎編」 を お楽しみください