SlideShare a Scribd company logo
1 of 52
Download to read offline
Gradle勉強会
アジェンダ
• Gradle(ビルド自動化)の歴史
• Javaビルド
• Gradleプラグイン
Gradleとは?
• ビルド実行を自動化するためのツール
• 従来のビルドツールの特徴を引き継ぎ、かつ記述
が簡単
• Android / Spring / Hibernateなどの有名Javaプ
ロジェクトの公式ビルドツールに採用されている
Javaビルドの歴史
ビルド自動化の歴史
ソフトウェア開発(Java)
コーディング
コンパイル
テスト
パッケージング
リリース
プログラミング
コンピュータが実行
しやすい形に
配布しやすい形に
実行できる形に
ソフトウェア開発 - 自動化の歴史
コーディング
コンパイル
テスト
パッケージング
リリース
テスト自動化
継続的インテグレーション
継続的デリバリー
自動化の領域が広がっている
JUnit/TestNG/Spock
Jenkins/CruiseControl/Circle CI
Chef/Puppet/Ansible
ソフトウェア開発 - ビルドスクリプト
コーディング
コンパイル
テスト
パッケージング
リリース
bat / shell
ant
maven
Gradle
※リリースされた時代背景のイメージであり、各ツールが
対応するタスクの自動化を想定している訳ではないです
ビルドスクリプトも進化している
ビルドスクリプトの歴史
BAT / Shell
• コンピュータで出来ることならほぼ何でも出来る
• 統一的な記述方法がない
=> 属人性が高くなる(ビルド職人)
2000 2004 2012
Ant
• 2000/7/19 Ant 1.1 リリース
• Ant = Another Neat Tool
• XMLによる宣言的な記述
=> Neat: さっぱりした (NEETではない)
=> Tomcat のビルドツールとして開発された
(参考)
http://en.wikipedia.org/wiki/Apache_Ant#History
http://ant.apache.org/faq.html#ant-name
2000 2004 2012
=> XML地獄の始まり
Maven
• 2004/7/13 Maven 1.1 リリース (最新ver 3.2.1)
• Maven Repository
!
• Conversion Over Configuration (設定より規約)
=> 依存関係問題を成果物リポジトリに任せる
=> 規約通りに作ることで設定項目を減らす
=> Antでも依存関係解決のために ivy が作られる
2000 2004 2012
=> しかし、XML地獄からは抜け出せず
Gradle
• 2012/6/12 Gradle 1.0 リリース
• Groovy DSLによる簡潔な記述
• Mavenの思想(Repo, COC)を引き継ぐ
• Ant/Mavenの設定ファイルをインポート可能
=> Ant/Mavenと続いたXML地獄からの脱却
=> 2014/7/1 Gradle 2.0 公開
2000 2004 2012
=> 過去の資産を無駄にしない
ビルドスクリプトの比較
apply plugin: 'java'
group = 'MavenSample'
version = '1.0'
artifactId = 'MavenSample'
sourceCompatibility = 1.7
targetCompatibility = 1.7
def defaultEncoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding
= defaultEncoding
repositories{
mavenCentral()
}
dependencies{
testCompile 'junit:junit:4.11'
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MavenSample</groupId>
<artifactId>MavenSample</artifactId>
<version>1.0</version>
<properties>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Antでは
・ソース格納場所の指定
・ビルドタスクの定義
・依存関係解決は別ファイルに記述
などにより、maven以上の記述量になるため割愛
=> http://d.hatena.ne.jp/kaakaa_hoe/20130312
2013-03-12 [Gradle] GradleとMavenとAnt+ivyの比較
インストール
必要要件
• JDK5以上 (Gradle2.0からはJDK6以上)
=> 環境変数 JAVA_HOME で指定されたJavaを使う
=> Groovyのインストールは必要ない
インストール
• ダウンロード
• 解凍
• PATHを通す
=> http://www.gradle.org/downloads
=> 環境変数 GRADLE_HOME を作っておくとアップデートが楽
Gradle wrapper
1. Gradle Wrapper作成
=> 第61章 Gradleラッパー
http://gradle.monochromeroad.com/docs/userguide/gradle_wrapper.html
• Gradle実行環境を作成するスクリプト
=> ビルド実行に必要なファイルを自動でダウンロードするスクリプトを生成
=> チーム内でのGradleバージョン統一 / ビルドマシンでのGradleの使用 などに
$ cat build.gradle
task wrapper(type: Wrapper) {
gradleVersion = '1.12'
}
!
$ gradle wrapper
2. Wrapper実行
$ gradlew build
=> Gradleの実行に必要なファイル群をDL
(初回実行時は数分かかる)
=> ラッパースクリプトと、その実行に
必要なファイル群が生成される
プロキシの設定
=> MavenCentralからライブラリをダウンロードする使い方が一般的
• 社内からGradleを使用する時は必要
systemProp.proxySet=true
systemProp.http.proxyHost=proxy.hogehoge.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=kaakaa
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=127.0.0.1¦localhost
=> カレントかホームディレクトリに置いておくgradle.properties
=> Gradleでプロキシーの設定ってどうやるの? - みちしるべ
http://orangeclover.hatenablog.com/entry/20111207/1323184826
=> 第20章 ビルド環境
http://gradle.monochromeroad.com/docs/userguide/build_environment.html
Javaビルド
タスク定義の基本
タスクの定義
task hello(description: sample ) << {
println Hello Gradle!
}
build.gradle
$ gradle hello
!
:hello
Hello Gradle!
!
BUILD SUCCESSFUL
!
Total time: 5.997 secs
タスクの定義(依存関係)
task hello << {
println Hello Gradle!
}
task greet << {
println Bye Gradle!
}
!
greet.dependsOn hello
build.gradle
$ gradle greet -q
Hello Gradle!
Bye Gradle!
quietオプション
タスクの定義(色々なタスク)
task myCopy(type: Copy){
from resource
into target
include **/*.txt
!
logger.quiet Copy .txt files
}
build.gradle
$ gradle mC -q
Copy .txt files
重複していなければ、タスク名の
頭文字でタスクを指定可能
デフォルトで使用できるロガー
=> 第15章 タスク詳解
http://gradle.monochromeroad.com/docs/userguide/more_about_tasks.html
ファイルコピータスク
タスクの確認
• 実行可能なタスクの確認コマンド
$gradle tasks -q
!
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
!
Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]
!
Help tasks
----------
dependencies - Displays all dependencies declared in root project '03_task'.
dependencyInsight - Displays the insight into a specific dependency in root project
03_task'.
!
…
!
Other tasks
-----------
hello - sample task
カレントディレクトリで
実行できるタスク一覧
自分で定義したタスクの
説明は description で
していしたもの
Javaビルド
(基本)
Javaビルド
• Javaプラグインを使う
• COCにより基本的なタスク・設定は存在する
=> ソースの格納場所はsrc/main/java. テストソースはsrc/test/java
=> jar / test / build などのデフォルトタスク
=> コンパイルやjar生成のタスクを記述しなくても良い(COC)
Javaプラグインにより追加されるタスク群の依存関係
Javaビルド
• 初回は Build Init Plugin が便利
=> Chapter 47. Build Init Plugin
http://gradle.monochromeroad.com/docs/userguide/build_init_plugin.html
=> 最小限のプロジェクトを自動生成してくれる
$ gradle init ̶type java-library
• java-library
• groovy-library
• scala-library
• 各言語の動作する最小プロジェクト
• basic
• Gradle関連のファイルのみ
Javaビルド
apply plugin: 'java'
!
repositories {
mavenCentral()
}
!
dependencies {
compile 'org.slf4j:slf4j-api:1.7.5'
testCompile "junit:junit:4.11"
}
build.gradle
Javaプラグイン使用宣言
depedencies で指定された成果物を
探索する成果物リポジトリとして
MavenCentralリポジトリを指定
ビルドに必要なライブラリの指定
compile : ソースビルド
testCompile : テストソースビルド
Javaビルド
$ gradle build
!
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
!
BUILD SUCCESSFUL
!
Total time: 7.049 secs
ソースコンパイル
jarファイル生成
テストソースコンパイル
テスト実行
チェック
build.gradleにcheckstyleやfindbugsプラグインを
適用するだけで、各チェックツールを実行してくれる
Javaビルド
(発展)
SourceSets
• ソースセットの場所をデフォルトから変更する
sourceSets {
main.java.srcDir src
test.java.srcDir test
}
build.gradle
• jar生成時のマニフェストを記述する
jar {
manifest {
attributes("Implementation-Title": "Gradle",
"Implementation-Version": version)
}
}
build.gradle
Dependencies
• 依存しているライブラリを指定する
build.gradle
repositories {
mavenCentral()
ivy {
url http://repo.mycompany.com/repo"
layout maven
}
}
!
dependencies {
compile org.hibernate:hibernate-core:
4.2.14.Final''
testCompile "junit:junit:4.11"
}
MavenCentral以外のリポジトリを指定
依存ライブラリは
$GroupId : $artifactId : $version
の形式で指定する
Dependencies
• プロジェクトが依存しているライブラリの確認コマンド
$gradle dependencies -q
!
------------------------------------------------------------
Root project
------------------------------------------------------------
!
archives - Configuration for archive artifacts.
No dependencies
!
compile - Compile classpath for source set 'main'.
--- org.hibernate:hibernate-core:4.2.14.Final
+--- antlr:antlr:2.7.7
+--- org.jboss.logging:jboss-logging:3.1.0.GA
+--- dom4j:dom4j:1.6.1
+--- org.javassist:javassist:3.18.1-GA
+--- org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.1.Final
+--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final
--- org.hibernate.common:hibernate-commons-annotations:4.0.2.Final
--- org.jboss.logging:jboss-logging:3.1.0.CR2 -> 3.1.0.GA
!
…
このプロジェクトは
hibernate-core に依存
hibernate-core が
依存してるライブラリ群
静的解析ツール
• Java開発でお馴染みのチェックツール群も簡単に使える
apply plugin: checkstyle
apply plugin: findbugs
apply plugin: pmd
apply plugin: jdepend
!
// チェックエラーでビルド失敗にしないため
[Checkstyle, FindBugs, Pmd].each { type ->
tasks.withType(type) {
ignoreFailures = 'true'
}
}
build.gradle
各ツールのチェックタスクがJavaプラグインの
checkタスク加わる
※ checkstyleのみ規約ファイルが必要
=> $ROOT/config/checkstyle/checkstyle.xml
便利な機能
IDE系
プラグイン
IDE系プラグイン
• 各IDEのプロジェクトファイルを生成する
=> 第38章 Eclipse プラグイン
  http://gradle.monochromeroad.com/docs/userguide/eclipse_plugin.html
$ gradle eclipse
$ gradle idea
build.gradle
• どの言語のプラグインと一緒に利用するかで生成される内容が異なる
• 各々の好きなIDEで開発できる
• Build init pluginと併用するとプロト作成が る
apply plugin: groovy
apply plugin: eclipse
apply plugin: idea
=> 第39章 IDEAプラグイン
http://gradle.monochromeroad.com/docs/userguide/idea_plugin.html
既存ビルドツール
との連携
Antタスクのインポート
• build.xmlをGradleのタスクとして使える
=> 第17章 GradleからAntを使う
http://gradle.monochromeroad.com/docs/userguide/ant.html
ant.importBuild build.xml
build.gradle
Mavenプロジェクトの変換
• pom.xmlをbuild.gradleに変換する
$ gradle init ̶type pom
=> 47.3.1. "pom" (Maven conversion)
http://www.gradle.org/docs/current/userguide/build_init_plugin.html
• POMファイル生成やMavenデプロイが出来るプラグイン
=> 第52章 Mavenプラグイン
http://gradle.monochromeroad.com/docs/userguide/maven_plugin.html
=> Chapter 65. Maven Publishing (new)
http://gradle.monochromeroad.com/docs/userguide/publishing_maven.html#publishing_maven:apply_plugin
実行系
プラグイン
Applicationプラグイン
• プログラムの実行や配布形式の作成
=> 第45章 アプリケーション プラグイン
http://gradle.monochromeroad.com/docs/userguide/application_plugin.html
build.gradle
apply plugin: application
mainClassName = org.sample.Greet
$ gradle run
:compileJava
:processResources
:classes
:run
Hello application plugin
!
BUILD SUCCESSFUL
!
Total time: 8.837 secs
※ distZip / distTarタスクを実行すると、
依存ライブラリと起動スクリプトを含んだ
圧縮ファイルが生成される
マルチプロジェクト
マルチプロジェクトの定義
• Gradleではマルチプロジェクトを簡単に定義できる
=> 第56章 マルチプロジェクトのビルド
http://gradle.monochromeroad.com/docs/userguide/multi_project_builds.html
├── ProjectA
│ └── src
└── Build
├── build.gradle
├── settings.gradle
└── ProjectB
└── src
includeFlat ProjectA
include ProjectB
settings.gradle
subprojects {
apply plugin: java
repositories { mavenCentral() }
dependencies {
testCompile junit:junit:4.11
}
}
build.gradle
ProjectA / Project Bに
共通な設定を記述
(固有な設定は
project(:ProjectA) { }
のように記述する)
ビルド対象の
ディレクトリ名を指定
マルチプロジェクトの実行
$ gradle build -q
!
:ProjectA:compileJava
:ProjectA:processResources UP-TO-DATE
!
…
!
:ProjectA:check
:ProjectA:build
:ProjectB:compileJava UP-TO-DATE
:ProjectB:processResources UP-TO-DATE
!
…
!
:ProjectB:check UP-TO-DATE
:ProjectB:build
!
BUILD SUCCESSFUL
ProjectAのビルドタスクが
実行される
ProjectBのビルドタスクが
実行される
※ProjectA/Bにファイルを
追加することなく、Gradleの
ビルドタスクを実行できる
(成果物は各プロジェクト内に
生成される)
まとめ
Gradleまとめ
• 記述量が少なく、かつ細かな設定も可能
• 結構なんでもできる
• COCによる暗黙の了解が増える
=> Ant/Mavenに比べるとビルドスクリプトの見通しが良くなる
=> Androidアプリ / マルチプロジェクトなど、他にも多数のトピック
=> 最近のアップデートでは cppプロジェクト関連の機能もよく追加されてる
=> Groovyもそこまで市民権を得てる訳ではない…
=> 結局ビルド職人はなくならない?
参考資料
Gradle関連の書籍
Gradle in Action (2014/3/9)
・依存関係やマルチプロジェクトビルドについて、
さらには継続的インテグレーションやGradleプラグインの
作成方法などについての包括的な記述がある
・基本的な事柄からマルチプロジェクトビルドや継続的
デリバリーなどについても言及あり
・コードや図も多くて見やすいので英語苦手でも行けるかも
Gradle Effective Implementation Guide (2012/10/25)
Gradle Beyond the Basics (2013/7/16)
Building and Testing with Gradle (2011/7/16)
• 日本語の書籍も執筆中との話…
• Androidビルドについて書かれた書籍はまだない?
参考サイト
• 公式のユーザガイドが充実してる
=> Gradle入門 - Qiita
http://qiita.com/vvakame/items/83366fbfa47562fafbf4
http://www.gradle.org/documentation
=> 有志による邦訳:http://gradle.monochromeroad.com/docs/
• 日本語資料はJGGUGさん周りを…
=> nobusue/GradleHandson - Github
https://github.com/nobusue/GradleHandson
終

More Related Content

What's hot

これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようNobuyuki Sasaki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するshigeki_ohtsu
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Ryosuke Uchitate
 
設計品質とアーキテクチャ
設計品質とアーキテクチャ設計品質とアーキテクチャ
設計品質とアーキテクチャToru Koido
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本Takahiro YAMADA
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理msssgur
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?Takahiro YAMADA
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
Node.js with WebRTC DataChannel
Node.js with WebRTC DataChannelNode.js with WebRTC DataChannel
Node.js with WebRTC DataChannelmganeko
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
脆弱性診断とはなんぞや
脆弱性診断とはなんぞや脆弱性診断とはなんぞや
脆弱性診断とはなんぞやmkoda
 
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたYukiya Hayashi
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...NTT DATA Technology & Innovation
 
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったことRecruit Technologies
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみたShoya Kai
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallAtsushi Tanaka
 

What's hot (20)

これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
設計品質とアーキテクチャ
設計品質とアーキテクチャ設計品質とアーキテクチャ
設計品質とアーキテクチャ
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理
 
vSphere環境での自動化とテスト
vSphere環境での自動化とテストvSphere環境での自動化とテスト
vSphere環境での自動化とテスト
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
Node.js with WebRTC DataChannel
Node.js with WebRTC DataChannelNode.js with WebRTC DataChannel
Node.js with WebRTC DataChannel
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
脆弱性診断とはなんぞや
脆弱性診断とはなんぞや脆弱性診断とはなんぞや
脆弱性診断とはなんぞや
 
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
 
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみた
 
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/FallZabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
 

Viewers also liked

Gradle入門
Gradle入門Gradle入門
Gradle入門orekyuu
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターorekyuu
 
A Study of the Characteristics of Developers′ Activities in GitHub
A Study of the Characteristics of Developers′ Activities in GitHubA Study of the Characteristics of Developers′ Activities in GitHub
A Study of the Characteristics of Developers′ Activities in GitHub奈良先端大 情報科学研究科
 
GradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugGradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugkyon mm
 
MySQLでNoSQL - アメーバピグでのNoSQLの実例
MySQLでNoSQL - アメーバピグでのNoSQLの実例MySQLでNoSQL - アメーバピグでのNoSQLの実例
MySQLでNoSQL - アメーバピグでのNoSQLの実例Kazuhiro Oinuma
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_introNobuhiro Sue
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootToshiaki Maki
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are realTakahiro Sugiura
 

Viewers also liked (14)

Gradle入門
Gradle入門Gradle入門
Gradle入門
 
Gradle布教活動
Gradle布教活動Gradle布教活動
Gradle布教活動
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフター
 
A Study of the Characteristics of Developers′ Activities in GitHub
A Study of the Characteristics of Developers′ Activities in GitHubA Study of the Characteristics of Developers′ Activities in GitHub
A Study of the Characteristics of Developers′ Activities in GitHub
 
GradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugGradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggug
 
MySQLでNoSQL - アメーバピグでのNoSQLの実例
MySQLでNoSQL - アメーバピグでのNoSQLの実例MySQLでNoSQL - アメーバピグでのNoSQLの実例
MySQLでNoSQL - アメーバピグでのNoSQLの実例
 
Gws 20141024 gradle_intro
Gws 20141024 gradle_introGws 20141024 gradle_intro
Gws 20141024 gradle_intro
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
Maven基礎
Maven基礎Maven基礎
Maven基礎
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
 
Closures and methodMissing are real
Closures and methodMissing are realClosures and methodMissing are real
Closures and methodMissing are real
 

Similar to Gradle handson

Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムYu Nobuoka
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方Yuki Morishita
 
Spring native について
Spring native についてSpring native について
Spring native についてTakamasa Mitsuji
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaYuta Kawadai
 
GBDC 勉強会 #2 Android Studio 実践レポート
GBDC 勉強会 #2 Android Studio 実践レポートGBDC 勉強会 #2 Android Studio 実践レポート
GBDC 勉強会 #2 Android Studio 実践レポートYutaka Kato
 
Azure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストAzure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストKuniteru Asami
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた日本マイクロソフト株式会社
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
Application Deployment on AWS
Application Deployment on AWSApplication Deployment on AWS
Application Deployment on AWSEiji Shinohara
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShiftEtsuji Nakai
 
Functional Testing in #YAPCASIA
Functional Testing in #YAPCASIAFunctional Testing in #YAPCASIA
Functional Testing in #YAPCASIAkyon mm
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 

Similar to Gradle handson (20)

Android アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステムAndroid アプリ開発における Gradle ビルドシステム
Android アプリ開発における Gradle ビルドシステム
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
Spring native について
Spring native についてSpring native について
Spring native について
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 
GBDC 勉強会 #2 Android Studio 実践レポート
GBDC 勉強会 #2 Android Studio 実践レポートGBDC 勉強会 #2 Android Studio 実践レポート
GBDC 勉強会 #2 Android Studio 実践レポート
 
Azure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステストAzure load testingを利用したパフォーマンステスト
Azure load testingを利用したパフォーマンステスト
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
Application Deployment on AWS
Application Deployment on AWSApplication Deployment on AWS
Application Deployment on AWS
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
Functional Testing in #YAPCASIA
Functional Testing in #YAPCASIAFunctional Testing in #YAPCASIA
Functional Testing in #YAPCASIA
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 

More from Nemoto Yusuke

Mattermost Plugin Bounty Programについて
Mattermost Plugin Bounty ProgramについてMattermost Plugin Bounty Programについて
Mattermost Plugin Bounty ProgramについてNemoto Yusuke
 
Scalaを触ってみた
Scalaを触ってみたScalaを触ってみた
Scalaを触ってみたNemoto Yusuke
 
実践プログラミング DSL
実践プログラミング DSL実践プログラミング DSL
実践プログラミング DSLNemoto Yusuke
 
社内勉強会 - 書籍管理Webシステム
社内勉強会 - 書籍管理Webシステム社内勉強会 - 書籍管理Webシステム
社内勉強会 - 書籍管理WebシステムNemoto Yusuke
 
社内勉強会 - chef
社内勉強会 - chef社内勉強会 - chef
社内勉強会 - chefNemoto Yusuke
 

More from Nemoto Yusuke (8)

Mattermost Plugin Bounty Programについて
Mattermost Plugin Bounty ProgramについてMattermost Plugin Bounty Programについて
Mattermost Plugin Bounty Programについて
 
Scalaを触ってみた
Scalaを触ってみたScalaを触ってみた
Scalaを触ってみた
 
SVG事始め
SVG事始めSVG事始め
SVG事始め
 
実践プログラミング DSL
実践プログラミング DSL実践プログラミング DSL
実践プログラミング DSL
 
ブログる
ブログるブログる
ブログる
 
社内勉強会 - 書籍管理Webシステム
社内勉強会 - 書籍管理Webシステム社内勉強会 - 書籍管理Webシステム
社内勉強会 - 書籍管理Webシステム
 
社内勉強会 - chef
社内勉強会 - chef社内勉強会 - chef
社内勉強会 - chef
 
Sinatra slideshare
Sinatra slideshareSinatra slideshare
Sinatra slideshare
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

Gradle handson