SlideShare a Scribd company logo
2014.04.30
綿引琢磨(@bikisuke)
http://d.hatena.ne.jp/bikisuke/
takuma.watabiki@jggug.org
2時間で分かる!
次世代ビルドツールの本命Gradleの
全貌 ∼基礎編∼
2
自己紹介
 綿引 琢磨(わたびき たくま)
 Twitter: @bikisuke
 https://www.facebook.com/takuma.watabiki.3
 株式会社デライトテクノロジーズ代表取締役
 日本Grails/Groovyユーザーグループ運営委員
 最近興味を持っているもの
 Spring Boot / TERASOLUNA Global Framework
 もちろんG* (ry
Gradle本
(執筆中)
基礎編 目次
 Gradleの基礎
 Gradleのアーキテクチャ
 Gradleの三大要素
 Java プロジェクト with Gradle
 Java プロジェクトの生成
 Java プラグインによるビルド
 マルチプロジェクト with Gradle
 マルチプロジェクトへの適用
 ビルドスクリプトの定義
3
4
Gradleの基礎
Gradle のアーキテクチャ
 自動化のための基盤とプラグイン機構による
粗結合な構造
 自動化のためのインフラとドメインオブジェクト群
 基盤だけでは何も出来ないに等しい
 直感的なドメインオブジェクトAPI
 強力なプラグイン機構
 標準的な機能も全てがプラグイン
 シンプルなインタフェースで追加が容易
 既存のプラグインの拡張や統合も可能
5
Gradle のアーキテクチャ
6
Java
JVM
Groovy OSS ライブラリ
Gradle コアライブラリ
Gradle 標準プラグイン
サードパーティ/オレオレ プラグイン
ビルドスクリプト
Gradle
Gradleの三大要素
 プロジェクト
 処理対象を表すコアドメイン
 必ず1つ以上のプロジェクトが存在
 タスク
 作業単位を表すコアドメイン
 ユーザーが実行できる最小単位
 プラグイン
 特定処理のための機能コンポーネント
 タスク、プロパティ、規約などをパッケージング
7
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
task myTest(type:Test) << {
println 'myTest task executed.'
}
DSLとドメインオブジェクトの関係
8
ビルドスクリプトに定義した内容が、
処理対象のProjectオブジェクトとなる
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
task myTest(type:Test) << {
println 'myTest task executed.'
}
DSLとドメインオブジェクトの関係
9
JavaPluginが適用されることで、Javaのビルド
に必要な機能がProjectに追加される
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
task myTest(type:Test) << {
println 'myTest task executed.'
}
DSLとドメインオブジェクトの関係
10
JavaPluginにより追加された
Testタスクを拡張
11
Javaプロジェクト
with Gradle
Javaプロジェクトの生成
 init タスク(Build Init プラグイン)
 指定された初期化タイプの雛形を生成
 basic : ビルドスクリプト、Gradleラッパーを生成
 pom : pom.xmlを基にビルドスクリプト、Gradleラッパーを生成
 java-library : basic + Java規約ディレクトリ生成
 groovy-library : basic + Groovy規約ディレクトリ生成
 scala-library : basic + Scala規約ディレクトリ生成
 ※ 現在試験的なステータスの機能です
12
gradle init --type <初期化タイプ>
Javaプラグインによるビルド
 Java プラグインとは
 Javaプロジェクトのコンパイル、テスト、アーカイブに
必要なタスク、プロパティ、規約などを提供
 ソースセット: src/main/java, src/main/resources,
src/test/java, src/test/resources
 タスク: clean, compileJava, test, jar など
 プロパティ: sourceSets, sourceCompatibility,
reportsDir, testReportDir, archivesBaseName など
13
ビルドのタスクグラフ
14
ビルドのタスクグラフ
15
gradle build
ビルドのタスクグラフ
16
src/main/java配下のjavaコード
をコンパイルし、$buildDir/classes/
mainに出力
ビルドのタスクグラフ
17
src/main/resoueces配下の
ファイルを$buildDir/resources/
mainにコピー
ビルドのタスクグラフ
18
src/test/java配下のjavaコード
をコンパイルし、$buildDir/classes/
testに出力
ビルドのタスクグラフ
19
src/test/resoueces配下のファ
イルを$buildDir/resources/testに
コピー
ビルドのタスクグラフ
20
$buildDir/libsに
JARファイルを生成
ビルドのタスクグラフ
21
JUnit(xUnit)/TestNGを実行
ビルドのタスクグラフ
22
BUILD SUCCESS!
Javaのビルドでよく使用するプロパティ
23
タスク プロパティ 用途
compileJava/
compileTestJava
options
エンコーディングやブートクラスパスなどのコンパ
イルオプションを追加する際に使用
jar archiveName JARファイル名を設定する際に使用
test
minHeapSize テストプロセスに-Xmsを設定する際に使用
test maxHeapSize テストプロセスに-Xmxを設定する際に使用test
jvmArgs ヒープ以外のJVMパラメータを設定する際に使用
- sourceCompatibility コンパイル時に使用するJavaのバージョン
- targetCompatibility クラス生成時のターゲットとするJavaのバージョン
apply plugin: 'java'
  :
def defaultEncoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding =
defaultEncoding
sourceCompatibility = 1.7
targetCompatibility = 1.7
jar {
archiveName = 'jjug-night-seminar'
}
test {
minHeapSize = '512m'
maxHeapSize = '512m'
jvmArgs '-XX:MaxPermSize=256m'
}
ビルドスクリプトでの設定例
24
25
マルチプロジェクト
with Gradle
マルチプロジェクトへの適用
 基点となるルートプロジェクトに、サブプロジ
ェクトがツリー構造を成す
 デフォルトではsettings.gradleが配置されたディレクト
リがルートプロジェクトとなる
 settings.gradleにサブプロジェクト構成を定義
 Gradleがサポートするレイアウトは以下の2つ
 階層レイアウト
 フラットレイアウト
26
マルチプロジェクトへの適用
 階層レイアウト
 階層的な構造のプロジェクトで構成される
 settings.gradle
27
include ‘jonathan’, ‘george’, ‘joseph’
<ROOT_PROJECT>
├ jonathan
├ george
├ joseph
   !
├ settings.gradle
   " build.gradle
マルチプロジェクトへの適用
 フラットレイアウト
 同一階層のプロジェクトで構成される
 settings.gradle
28
includeFlat ‘giorno’, ‘bucciarati’, ‘mista’
<WORKSPACE>
├ <ROOT_PROJECT>
   ! ├ settings.gradle
   ! " build.gradle
├ giorno
├ bucciarati
" mista
レイアウトの特徴
 レイアウトはルートプロジェクトとサブプロ
ジェクトの位置関係で決まる
 ルートプロジェクトがサブプロジェクトの上位階層
 階層レイアウト
 ルートプロジェクトとサブプロジェクトが同一階層
 フラットレイアウト
 レイアウトはプロジェクト単位のため、組み合わせる
ことも可能
29
ビルドスクリプトの定義
 ルートプロジェクトに集約
30
subprojects {
task showName << { println “$project.name” }
}
project(‘:jonathan’) {
dependencies { compile project(‘: george’) }
}
project(‘:george’) {
dependencies { compile project(‘: joseph’) }
}
project(‘:joseph’) {
}
ビルドスクリプトの定義
 ルートプロジェクトに共通設定&差分個別
31
subprojects {
task showName() << { println “$name” }
}
root/build.gradle
project(‘:jonathan’) {
dependencies { compile project(‘:george’) }
}
jonathan/build.gradle
project(‘:george’) {
dependencies { compile project(‘: joseph’) }
}
george/build.gradle
ビルドスクリプトの定義
 個別に定義
32
task showName() << { println “$name” }
joseph/build.gradle
dependencies { compile project(‘:george’) }
task showName() << { println “$name” }
jonathan/build.gradle
dependencies { compile project(‘: joseph’) }
task showName() << { println “$name” }
george/build.gradle
マルチプロジェクトの勘所
 レイアウトについて
 特定のシステムやサービスの中で使用することが明ら
かな場合は階層レイアウトが良い
 他システムでも使用するもの、汎用的なライブラリは
フラットレイアウトもしくは単一のプロジェクトとし
ておいた方が柔軟に対応できる
33
マルチプロジェクトの勘所
 ビルドスクリプトについて
 基本はルートプロジェクトに共通設定を定義して、差
分を個別のサブプロジェクトに定義するのが定石
 サブプロジェクトの数が少ない場合や、選任のビルド
職人がいる場合は、ルートプロジェクトに集約すると
効率が良いかも
 複数ベンダーで開発するような場合は、個別に定義し
た方が平和に治まることもある
34
以上、基礎編でした
35
休憩の後は ∼発展編∼ を
お楽しみください
Ad

More Related Content

What's hot (20)

Gradle入門
Gradle入門Gradle入門
Gradle入門
orekyuu
 
Gradle布教活動
Gradle布教活動Gradle布教活動
Gradle布教活動
Nemoto Yusuke
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
Mugen Fujii
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
 
(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について
Kazuhiro Hara
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
 
What makes Geb groovy?
What makes Geb groovy?What makes Geb groovy?
What makes Geb groovy?
Youtarou TAKAHASHI
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
Yuki Fujisawa
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
Nobuhiro Sue
 
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップWebアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Naoki Iwami
 
Jenkins勉強会 in 札幌 第二部
Jenkins勉強会 in 札幌 第二部Jenkins勉強会 in 札幌 第二部
Jenkins勉強会 in 札幌 第二部
cactusman
 
Gradle入門
Gradle入門Gradle入門
Gradle入門
orekyuu
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
Mugen Fujii
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
 
(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について(IDEユーザのための) ClojureのEmacs開発環境について
(IDEユーザのための) ClojureのEmacs開発環境について
Kazuhiro Hara
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
Yuki Fujisawa
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
Nobuhiro Sue
 
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップWebアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Naoki Iwami
 
Jenkins勉強会 in 札幌 第二部
Jenkins勉強会 in 札幌 第二部Jenkins勉強会 in 札幌 第二部
Jenkins勉強会 in 札幌 第二部
cactusman
 

Similar to Jjug 20140430 gradle_basic (20)

TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
Tsuyoshi Yamamoto
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
Hayashi Yuichi
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
Daiyu Hatakeyama
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
Nobuhiro Sue
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
20120421中国gtug
20120421中国gtug20120421中国gtug
20120421中国gtug
Yusuke Sato
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
Takeshi Yabe
 
Gradle再入門.pptx
Gradle再入門.pptxGradle再入門.pptx
Gradle再入門.pptx
Tomoyo Takayama
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
 
03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public
Smz Nbys
 
株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料
leverages_event
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
Gws in fukuoka
Gws in fukuokaGws in fukuoka
Gws in fukuoka
Takuma Watabiki
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
guestd4898b
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
Akira Inoue
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
Hayashi Yuichi
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
Daiyu Hatakeyama
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
Nobuhiro Sue
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
20120421中国gtug
20120421中国gtug20120421中国gtug
20120421中国gtug
Yusuke Sato
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
Takeshi Yabe
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
 
03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public03 piggyback -by-simple-code-public
03 piggyback -by-simple-code-public
Smz Nbys
 
株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料
leverages_event
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
guestd4898b
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
Akira Inoue
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
 
Ad

More from Takuma Watabiki (12)

「普通の設計」をするということ
「普通の設計」をするということ「普通の設計」をするということ
「普通の設計」をするということ
Takuma Watabiki
 
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
Takuma Watabiki
 
『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?
『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?
『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?
Takuma Watabiki
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
Takuma Watabiki
 
JGGUG Community LT 2016
JGGUG Community LT 2016JGGUG Community LT 2016
JGGUG Community LT 2016
Takuma Watabiki
 
Spock's world
Spock's worldSpock's world
Spock's world
Takuma Watabiki
 
スーパー戦隊進化論
スーパー戦隊進化論スーパー戦隊進化論
スーパー戦隊進化論
Takuma Watabiki
 
Devsumi2012 JGGUG LT
Devsumi2012 JGGUG LTDevsumi2012 JGGUG LT
Devsumi2012 JGGUG LT
Takuma Watabiki
 
Spockを使おう!
Spockを使おう!Spockを使おう!
Spockを使おう!
Takuma Watabiki
 
G*Magazineを読もう
G*Magazineを読もうG*Magazineを読もう
G*Magazineを読もう
Takuma Watabiki
 
G*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIIG*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIII
Takuma Watabiki
 
Groovyノススメ
GroovyノススメGroovyノススメ
Groovyノススメ
Takuma Watabiki
 
「普通の設計」をするということ
「普通の設計」をするということ「普通の設計」をするということ
「普通の設計」をするということ
Takuma Watabiki
 
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
バックエンドのエンジニアがiOSアプリ開発をやってみて思うこと - フロントエンドのアーキテクチャの考察 -
Takuma Watabiki
 
『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?
『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?
『現場で役立つシステム設計の原則』は一般的なSI現場で役立つのか?
Takuma Watabiki
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
Takuma Watabiki
 
スーパー戦隊進化論
スーパー戦隊進化論スーパー戦隊進化論
スーパー戦隊進化論
Takuma Watabiki
 
G*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIIIG*におけるソフトウェアテスト・シーズンIII
G*におけるソフトウェアテスト・シーズンIII
Takuma Watabiki
 
Ad

Jjug 20140430 gradle_basic