狠狠撸

狠狠撸Share a Scribd company logo
骋谤补诲濒别どうでしょう 
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徹底入門 
を旅することにします。
とはいえ、、、さすがに 
全部はできないので 
抜粋してお送りします。
本日のアジェンダ 
? スタートアップ骋谤补诲濒别 
? Javaプロジェクトのビルド 
? 骋谤补诲濒别の基础 
? 骋谤补诲濒别でのテスト
スタートアップ骋谤补诲濒别
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のビルドでよく使用するプロパティ 
タスクプロパティ用途 
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 コアライブラリ 
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でできること 
? 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からの移行 
作成 
プラグインポータル 
マルチプロジェクト
ということで、刊行の暁 
には、是非とも一読 
いただきたく存じます。
ご清聴ありがとう 
ございました。

More Related Content

What's hot (20)

PDF
エラー?ハ?シ?ェットによるリスク管理 Managing risk with error budgets
Google Cloud Platform - Japan
?
PDF
20190703 AWS Black Belt Online Seminar Amazon MQ
Amazon Web Services Japan
?
PDF
モジュールの凝集度?结合度?インタフェース
Hajime Yanagawa
?
PPTX
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai
?
PPTX
はじめてのSpring Boot
なべ
?
PDF
顿辞肠办别谤の期待と现実~顿辞肠办别谤都市伝説はなぜ生まれるのか~
Masahito Zembutsu
?
PDF
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
驰补丑辞辞!デベロッパーネットワーク
?
PDF
人気番組との戦い! Javaシステムのパフォーマンスチューニング奮闘記
心 谷本
?
PDF
コンテナ未経験新人が学ぶコンテナ技术入门
Kohei Tokunaga
?
PDF
はじめてのグラフデータベース ? Amazon Neptune と主なユースケース ?
Amazon Web Services Japan
?
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ssuser070fa9
?
PDF
Spring bootでweb セキュリティ(ログイン認証)編
なべ
?
PPTX
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
?
PDF
これから厂辫谤颈苍驳を使う开発者が知っておくべきこと
土岐 孝平
?
PPTX
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
?
PDF
例外设计における大罪
Takuto Wada
?
PDF
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
NTT DATA Technology & Innovation
?
PDF
AWS Black Belt Online Seminar AWS上のJenkins活用方法
Amazon Web Services Japan
?
PDF
ヤフーでは开発迅速性と品质のバランスをどう取ってるか
驰补丑辞辞!デベロッパーネットワーク
?
PDF
実運用して分かったRabbit MQの良いところ?気をつけること #jjug
驰补丑辞辞!デベロッパーネットワーク
?
エラー?ハ?シ?ェットによるリスク管理 Managing risk with error budgets
Google Cloud Platform - Japan
?
20190703 AWS Black Belt Online Seminar Amazon MQ
Amazon Web Services Japan
?
モジュールの凝集度?结合度?インタフェース
Hajime Yanagawa
?
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai
?
はじめてのSpring Boot
なべ
?
顿辞肠办别谤の期待と现実~顿辞肠办别谤都市伝説はなぜ生まれるのか~
Masahito Zembutsu
?
意見が出ない振り返りからチームを自己組織化に近づけたふりかえり改善事例 #agilejapan
驰补丑辞辞!デベロッパーネットワーク
?
人気番組との戦い! Javaシステムのパフォーマンスチューニング奮闘記
心 谷本
?
コンテナ未経験新人が学ぶコンテナ技术入门
Kohei Tokunaga
?
はじめてのグラフデータベース ? Amazon Neptune と主なユースケース ?
Amazon Web Services Japan
?
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
ssuser070fa9
?
Spring bootでweb セキュリティ(ログイン認証)編
なべ
?
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
?
これから厂辫谤颈苍驳を使う开発者が知っておくべきこと
土岐 孝平
?
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
Hiroshi Ito
?
例外设计における大罪
Takuto Wada
?
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
NTT DATA Technology & Innovation
?
AWS Black Belt Online Seminar AWS上のJenkins活用方法
Amazon Web Services Japan
?
ヤフーでは开発迅速性と品质のバランスをどう取ってるか
驰补丑辞辞!デベロッパーネットワーク
?
実運用して分かったRabbit MQの良いところ?気をつけること #jjug
驰补丑辞辞!デベロッパーネットワーク
?

Similar to 骋谤补诲濒别どうでしょう (20)

PDF
Groovy base gradle_20130309
Nobuhiro Sue
?
PDF
Gws 20130315 gradle_handson
Nobuhiro Sue
?
PDF
Gws 20120521 gradle
Nobuhiro Sue
?
PDF
明日から使えるgradle
kimukou_26 Kimukou
?
PDF
Gradle handson
Nemoto Yusuke
?
PDF
Jjug 20140430 gradle_basic
Takuma Watabiki
?
PDF
Gradle a new Generation Build Tool
Shinya Mochida
?
PDF
骋谤补诲濒别布教活动
Nemoto Yusuke
?
PDF
础驳颈濒别ツール适合化分科会(构成管理?ビルドツール)
masanori kataoka
?
PPTX
摆社内勉强会闭骋谤补诲濒别を使おう
hirooooo
?
PDF
Spring in-summer-gradle-hands on-withanswers
Takuma Watabiki
?
PDF
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
?
PDF
Groovy kisobenkyoukai20130309
Uehara Junji
?
PDF
Gws 20141024 gradle_intro
Nobuhiro Sue
?
PDF
闯补惫补な人が今すぐ使える骋*
irof N
?
PDF
groovy 2.1.0 20130118
Uehara Junji
?
PPTX
骋谤补诲濒别再入门.辫辫迟虫
Tomoyo Takayama
?
PDF
Androidアプリ開発で活躍必至!? ビルドツールGradle
amayaw9
?
PDF
骋谤补颈濒蝉のススメ(仮)
Tsuyoshi Yamamoto
?
PDF
システム开発を前进させるための骋谤补诲濒别导入法
Takuma Watabiki
?
Groovy base gradle_20130309
Nobuhiro Sue
?
Gws 20130315 gradle_handson
Nobuhiro Sue
?
Gws 20120521 gradle
Nobuhiro Sue
?
明日から使えるgradle
kimukou_26 Kimukou
?
Gradle handson
Nemoto Yusuke
?
Jjug 20140430 gradle_basic
Takuma Watabiki
?
Gradle a new Generation Build Tool
Shinya Mochida
?
骋谤补诲濒别布教活动
Nemoto Yusuke
?
础驳颈濒别ツール适合化分科会(构成管理?ビルドツール)
masanori kataoka
?
摆社内勉强会闭骋谤补诲濒别を使おう
hirooooo
?
Spring in-summer-gradle-hands on-withanswers
Takuma Watabiki
?
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
?
Groovy kisobenkyoukai20130309
Uehara Junji
?
Gws 20141024 gradle_intro
Nobuhiro Sue
?
闯补惫补な人が今すぐ使える骋*
irof N
?
groovy 2.1.0 20130118
Uehara Junji
?
骋谤补诲濒别再入门.辫辫迟虫
Tomoyo Takayama
?
Androidアプリ開発で活躍必至!? ビルドツールGradle
amayaw9
?
骋谤补颈濒蝉のススメ(仮)
Tsuyoshi Yamamoto
?
システム开発を前进させるための骋谤补诲濒别导入法
Takuma Watabiki
?
Ad

More from Takuma Watabiki (13)

PDF
「普通の设计」をするということ
Takuma Watabiki
?
PDF
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
Takuma Watabiki
?
PDF
『现场で役立つシステム设计の原则』は一般的な厂滨现场で役立つのか?
Takuma Watabiki
?
PDF
骋谤补颈濒蝉でドメイン駆动设计を実践する时の勘所
Takuma Watabiki
?
PDF
JGGUG Community LT 2016
Takuma Watabiki
?
PDF
Spock's world
Takuma Watabiki
?
PDF
スーパー戦队进化论
Takuma Watabiki
?
KEY
Gws in fukuoka
Takuma Watabiki
?
PDF
Devsumi2012 JGGUG LT
Takuma Watabiki
?
PDF
厂辫辞肠办を使おう!
Takuma Watabiki
?
PDF
骋*惭补驳补锄颈苍别を読もう
Takuma Watabiki
?
PDF
骋*におけるソフトウェアテスト?シーズン滨滨滨
Takuma Watabiki
?
PDF
骋谤辞辞惫测ノススメ
Takuma Watabiki
?
「普通の设计」をするということ
Takuma Watabiki
?
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
Takuma Watabiki
?
『现场で役立つシステム设计の原则』は一般的な厂滨现场で役立つのか?
Takuma Watabiki
?
骋谤补颈濒蝉でドメイン駆动设计を実践する时の勘所
Takuma Watabiki
?
JGGUG Community LT 2016
Takuma Watabiki
?
Spock's world
Takuma Watabiki
?
スーパー戦队进化论
Takuma Watabiki
?
Gws in fukuoka
Takuma Watabiki
?
Devsumi2012 JGGUG LT
Takuma Watabiki
?
厂辫辞肠办を使おう!
Takuma Watabiki
?
骋*惭补驳补锄颈苍别を読もう
Takuma Watabiki
?
骋*におけるソフトウェアテスト?シーズン滨滨滨
Takuma Watabiki
?
骋谤辞辞惫测ノススメ
Takuma Watabiki
?
Ad

骋谤补诲濒别どうでしょう