Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jjug 20140430 gradle_intro

10,130 views

Published on

  • Be the first to comment

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 引き続き 「基礎編」 を お楽しみください

×