Gradleどうでしょう
Upcoming SlideShare
Loading in...5
×
 

Gradleどうでしょう

on

  • 199 views

G*ワークショップ Z 札幌 2014 のスライドです。

G*ワークショップ Z 札幌 2014 のスライドです。
某書の抜粋的な何かです。

Statistics

Views

Total Views
199
Views on SlideShare
187
Embed Views
12

Actions

Likes
3
Downloads
0
Comments
0

1 Embed 12

https://twitter.com 12

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Gradleどうでしょう Gradleどうでしょう Presentation Transcript

  • Gradleどうでしょう G*workshop Z sapporo 2014 2014/09/27
  • 自己紹介 •綿引 琢磨(わたびき たくま) •株式会社デライトテクノロジーズ 代表取締役 •日本Grails/Groovyユーザーグループ 運営委員 •twitter : @bikisuke
  • すいません、間に合いませんでした... •「Gradle徹底入門(仮)」(翔泳社) •@masanobuimai, @nobusue, @literalice, @bikisuke の共著 •Gradle2.0ベース(Gradle2.1トピック有) •500ページ超の手頃な鈍器 •2014年11月刊行予定(たぶん...)
  • 今日は刊行より一足先に Gradle徹底入門 を旅することにします。
  • とはいえ、、、さすがに 全部はできないので 抜粋してお送りします。
  • 本日のアジェンダ • スタートアップGradle • Javaプロジェクトのビルド • Gradleの基礎 • Gradleでのテスト
  • スタートアップGradle
  • Gradleとは • OSSのビルドツール • 他のビルドツールより優れてる(点が多い) • GroovyベースのDSLで柔軟性が高い • 拡張しやすいアーキテクチャを採用 • 最新バージョンは 2.1(2014年9月時点)
  • なぜGradleなのか? • ビルドスクリプトがシンプル • プラグインが作りやすい • 既存のツールの資産を活用できる • Maven Central リポジトリを参照可能 • いろんな言語に対応(中) • Android の公式ビルドツールとして採用 • ここ最近は C/C++ にも力を入れている
  • ビルドツール比較 make Ant Maven Gradle ビルド定義 パラダイム 強み 弱み スクリプトXML XML スクリプト 手続き的手続き的規約ベース規約ベース 非常にコンパクト基本機能がシンプル クロスプラットフォーム 規約による標準化 依存関係管理 規約による標準化 依存関係管理 高い柔軟性/拡張性 移植性問題 依存関係管理なし 規約無く再利用に難有り 依存関係管理なし 定義ファイルの柔軟性 規約外の場合が困難 定義ファイルの柔軟性IDE連携にやや難有り
  • Gradleのインストール • 前提条件: JDK6以上 • Mac/Unix系:GVMが便利 • http://gvmtool.net/ • $ gvm install gradle • Windows: 公式サイトからダウンロード • http://www.gradle.org/downloads • ZIP解凍して、環境変数Pathに <GRADLE_HOME>bin
  • Hello, Gradle! // build.gradle task hello << { println ‘Hello, Gradle!’ }
  • Build Initプラグイン を使ってみる(1/2) • Gradle標準プラグインのひとつ • ビルドプロジェクトの雛形を生成 • basic: ビルドスクリプト、Gradleラッパーを生成 • pom: pom.xml からビルドスクリプト、Gradleラッパーを生成 • java-library: basic + Java規約ディレクトリを生成 • groovy-library: basic + Groovy規約ディレクトリを生成 • scala-library: basic + Scala規約ディレクトリを生成
  • Build Initプラグイン を使ってみる(2/2) $ gradle init --type java-library : $ gradle build
  • Javaプロジェクト のビルド
  • Javaプラグイン •Javaプロジェクトのコンパイル、テスト、 アーカイブに必要なタスク、プロパティ、 規約などを提供 • ソースセット: src/main/java, src/main/resources, src/test/java, src/test/resources • タスク: clean, compileJava, test, jar など • プロパティ: sourceSets, sourceCompatibility, reportsDir, testReportDir, archivesBaseName など
  • Javaプラグインのタスク
  • Javaのビルドでよく使用するプロパティ タスクプロパティ用途 compileJava/ compileTestJava options エンコーディングやブートクラスパスなどのコンパ イルオプションを追加する際に使用 jar archiveName JARファイル名を設定する際に使用 test minHeapSize テストプロセスに-Xmsを設定する際に使用 tteesstt maxHeapSize テストプロセスに-Xmxを設定する際に使用 jvmArgs ヒープ以外のJVMパラメータを設定する際に使用 - sourceCompatibility コンパイル時に使用するJavaのバージョン - targetCompatibility クラス生成時のターゲットとするJavaのバージョン
  • Javaプロジェクトの ビルドスクリプト定義例 apply plugin: 'java' // Gradle 2.0 def defaultEncoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = defaultEncoding sourceCompatibility = 1.7 targetCompatibility = 1.7 jar { archiveName = 'gws-sapporo.jar' } test { minHeapSize = '512m' maxHeapSize = '512m' jvmArgs '-XX:MaxPermSize=256m' }
  • Applicationプラグイン を使ってみる(1/2) // Gradle 2.1 plugins { id ‘application’ } mainClassName = 'com.example.Main'
  • Applicationプラグイン を使ってみる(2/2) $ gradle run
  • Gradleの基礎
  • Gradleのアーキテクチャ ビルドスクリプト サードパーティ/コミュニティ(野良) プラグイン Gradle 標準プラグイン Gradle コアライブラリ Groovy OSS ライブラリ Java JavaVM
  • Gradleのアーキテクチャ ビルドスクリプト サードパーティ/コミュニティ(野良) プラグイン Gradle 標準プラグイン Gradle コアライブラリ Groovy OSS ライブラリ Java JavaVM Gradle
  • ビルドの入力情報
  • ビルドの入力情報
  • 初期化スクリプト • ビルドの最初で実行されるGroovyスクリプト • 主にユーザー情報や実行環境などの初期設定 を行うために使用 • デフォルトは init.gradle • -I (--init-script) <FILE_NAME> でもOK
  • 設定スクリプト • ビルド対象のプロジェクトの設定を行う Groovyスクリプト • 主にビルドに参加するプロジェクトを定義す る用途で使用 • デフォルトは settings.gradle • -c (--settings-file) <FILE_NAME> でもOK
  • ビルドスクリプト • ビルドの定義を記述するスクリプトファイル • ビルド対象がシンプルなものであれば、 このファイル1つあればOK • デフォルトは build.gradle • -b (--build-file) <FILE_NAME> でもOK
  • スクリプトファイルの構成要素 • ステートメント • 変数宣言、プロパティ設定など一般 的なプログラミングでのそれと同義 • スクリプトブロック • ある設定を行うための領域 • 実体はただのクロージャで、Gradle のドメインオブジェクトに委譲
  • Gradleのドメインオブジェクト •Gradleではビルド処理を行う実行基盤 とビルド対象をドメインモデルで表現 •Mavenでいうところの Project Object Model みたいなもの •例えば... •プロジェクト → Projectオブジェクト
  • Gradleの三大要素 •Projectオブジェクト(プロジェクト) • 処理対象を表すコアドメイン • 必ず1つ委譲のプロジェクトが存在する •Taskオブジェクト(タスク) • 作業単位を表すコアドメイン • ユーザーが実行できる最小単位 •Pluginオブジェクト(プラグイン) • 特定処理のための機能コンポーネント • タスク、プロパティ、規約などをパッケージング
  • DSLとドメインオブジェクトの関係 apply plugin: 'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' }
  • DSLとドメインオブジェクトの関係 apply plugin: 'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' } Projectオブジェクト
  • DSLとドメインオブジェクトの関係 JavaPlugin オブジェクト apply plugin: 'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' }
  • DSLとドメインオブジェクトの関係 apply plugin: 'java' repositories { jcenter() } dependencies { testCompile 'junit:junit:4.11' } task myTest(type:Test) << { println '俺のテストタスクを実行したった。' } JavaPlugin のTestタスクを拡張
  • タスクの記述方法いろいろ task showDescription << { println description } showDescription.description = 'showDescriptionタスクです。' task showDescription { description = 'showDescriptionタスクです。' doLast { println description } } task showDescription(description: 'showDescriptionタスクです。') << { println description }
  • Gradleでのテスト
  • Gradleでできること • JUnit/TestNGのテスト実行 • 特定のテストだけ実行 • テストの並列実行 • etc.
  • JUnit/TestNGのテスト実行 • JUnit • Javaプラグインを適用すると デフォルトで使用可能 • TestNG • test ブロックに useTestNG() と 書くことで使用可能になる
  • 特定のテストだけ実行 test { filter { // 特定のパッケージのテストだけを実行 includeTestsMatching "com.example.*" // クラスのサフィックスが一致するものだけを実行 includeTestsMatching "*IT" } }
  • テストの並列実行 // 利用可能なプロセッサー数を取得 def processNumber = Runtime.runtime.availableProcessors() test { maxParallelForks = processNumber - 2 }
  • 以上、抜粋でお送りし ましたが、Gradleには もっといろいろな機能や 仕組みがあります。
  • 今日説明してないこと 依存関係管理 カスタムプラグインの作成 IDE連携アーカイブの作成Jenkins連携 Androidプロジェクトでの適用 アーティファクトの公開 独自Gradleの作成 カスタムタスクのAnt/Mavenからの移行 作成 プラグインポータル マルチプロジェクト
  • ということで、刊行の暁 には、是非とも一読 いただきたく存じます。
  • ご清聴ありがとう ございました。