SlideShare a Scribd company logo
Gradleプラグインを
作成してみた
2015/1/15
@sakebook
http://github.com/sakebook
http://hatenablog.sakebook.com
自己紹介
酒本伸也 @sakebook
JX通信社(Vingow)
Android Developer & 初級ライフロガー
最近iOSも少し触る
Gradleプラグイン使ってますか
こんなの
apply plugin: ‘robolectric’
試しに作ってみた
android-versioning-gradle-plugin
versionNameとverisonCodeを

タスクから操作する
$./gradlew major #1.2.3 -> 2.0.0
$/.gradlew minor #1.2.3 -> 1.3.0
$./gradlew patch #1.2.3 -> 1.2.4
導入
buildscript {
repositories {
mavenLocal() // リポジトリにあげるまでは必要
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.github.sakebook:gradle-versioning:0.0.1'
}
}
builg.gradle
導入
apply plugin: ‘versioning'
MavenCentralにもあげてないし作成途中
要望募集!
${module}/build.gradle
動かせるようになるまでの共有
プロジェクト構成
- build.gradle // 公開に必要な情報を記入
| - gradle // Gradle本体
| - src
| - main
| - groovy // Groovyソースを配置
| - resource
| - META-INF
| - gradle-plugins
| -**.properties // **にはapplyで呼び出したい名前
**.propertiesの中身
Plugin<Project>を実装したクラスを指定
implementation-class=
com.sakebook.gradle.versioning.plugin.VersioningPlugin
class VersioningPlugin implements Plugin<Project> {
}
versioning.properties
VersioningPlugin.groovy
classpath の定義
classpath ‘com.github.sakebook:gradle-versioning:0.0.1'
classpath ${group}:${archivesBaseName}:{version}
ここの設定がclasspathを決める
group = 'com.github.sakebook'
archivesBaseName = 'gradle-versioning'
version = '0.0.1'
builg.gradle
ローカルのMavenリポジトリに
upload
uploadArchives {
repositories {
mavenDeployer {
repository(url: 'file://' + new
File(System.getProperty('user.home'), '.m2/
repository').absolutePath)
}
}
}
builg.gradle
$./gradlew clean uploadArchives
Taskのアクション指定方法
@TaskAction アノテーションを使い

Task実行時に行われるアクションを指定
class MajorTask extends VersioningTask {
@TaskAction
def majorVersionUp() {
readPropertyFile(BuildType.MAJOR)
}
}
MajorTask.groovy
DSL定義
versioning {} を定義
VersioningPlugin.groovy
project.extensions.create("versioning",
VersioningExtention.class)
class VersioningPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
def extention = project.extensions.create("versioning", VersioningExtention.class)
project.task('info') << {
println "versionName: ${extention.versionName}"
println "tagName: ${extention.tagName}"
println "versionCode: ${extention.versionCode}"
}
project.task("major", type: MajorTask)
project.task("minor", type: MinorTask)
project.task("patch", type: PatchTask)
}
}
VersioningPlugin.groovy
作成してみて
簡単なものなら別gradleファイルにして

読み込む程度が良い粒度だと感じた。
Taskの依存関係やマルチプロジェクトを

いじる際に力を発揮しそう
Groovyが書けるときっともっと楽しくなる。
参考コード
https://github.com/DeployGate/gradle-deploygate-plugin
https://github.com/robolectric/robolectric-gradle-plugin
https://github.com/mcxiaoke/gradle-packer-plugin
https://android.googlesource.com/platform/tools/base/+/
gradle_1.0.0
https://github.com/sakebook/android-versioning-gradle-plugin
以上

More Related Content

What's hot

Front-end package managers
Front-end package managersFront-end package managers
Front-end package managers
Hayashi Yuichi
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Yu Nobuoka
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
Hayashi Yuichi
 
Gradle入門
Gradle入門Gradle入門
Gradle入門
orekyuu
 
One-time Binding & $digest
One-time Binding & $digestOne-time Binding & $digest
One-time Binding & $digest
Hayashi Yuichi
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
Soichiro Kashima
 
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
WESEEKWESEEK
 
Androidアプリ入門
Androidアプリ入門Androidアプリ入門
Androidアプリ入門YanoLabLT
 
Gradleスクリプトを読み解く
Gradleスクリプトを読み解くGradleスクリプトを読み解く
Gradleスクリプトを読み解く
Shoichi Matsuda
 
React native vol3
React native vol3React native vol3
React native vol3
dcubeio
 
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Kenichi Kambara
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
Takuma Watabiki
 
いまさら触るAwt
いまさら触るAwtいまさら触るAwt
いまさら触るAwt
Keiichi Kobayashi
 
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + MarkdownWrite slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
ロフト くん
 
Angular + Typedoc + Github Page
Angular + Typedoc + Github PageAngular + Typedoc + Github Page
Angular + Typedoc + Github Page
Akihiko Kigure
 
React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発
Ryosuke Hara
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
Takuma Watabiki
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
Jesse Katsumata
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
好洋 山崎
 

What's hot (20)

Front-end package managers
Front-end package managersFront-end package managers
Front-end package managers
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
 
Gradle入門
Gradle入門Gradle入門
Gradle入門
 
One-time Binding & $digest
One-time Binding & $digestOne-time Binding & $digest
One-time Binding & $digest
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
 
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
 
Androidアプリ入門
Androidアプリ入門Androidアプリ入門
Androidアプリ入門
 
Gradleスクリプトを読み解く
Gradleスクリプトを読み解くGradleスクリプトを読み解く
Gradleスクリプトを読み解く
 
React native vol3
React native vol3React native vol3
React native vol3
 
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
いまさら触るAwt
いまさら触るAwtいまさら触るAwt
いまさら触るAwt
 
Write slides and books in VSCode + Markdown
Write slides and books in VSCode + MarkdownWrite slides and books in VSCode + Markdown
Write slides and books in VSCode + Markdown
 
Angular + Typedoc + Github Page
Angular + Typedoc + Github PageAngular + Typedoc + Github Page
Angular + Typedoc + Github Page
 
React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
 

Similar to Gradleプラグインを作成してみた

Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
Gradle再入門.pptx
Gradle再入門.pptxGradle再入門.pptx
Gradle再入門.pptx
Tomoyo Takayama
 
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方Makoto Yamazaki
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
Yohta Kanke
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!
Kazuaki Ueda
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
Yu Nobuoka
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
m ishizaki
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report
Yu Sudo
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
Akira Inoue
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
Issei Hiraoka
 

Similar to Gradleプラグインを作成してみた (20)

Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Gradle再入門.pptx
Gradle再入門.pptxGradle再入門.pptx
Gradle再入門.pptx
 
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
スマホにおけるWebGL入門
スマホにおけるWebGL入門スマホにおけるWebGL入門
スマホにおけるWebGL入門
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report2013.01.18 G*Workshop GGX 2012 Report
2013.01.18 G*Workshop GGX 2012 Report
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 

More from shinya sakemoto

ScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたいScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたい
shinya sakemoto
 
Gitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発するGitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発する
shinya sakemoto
 
Flutter for Webで値を保存する
Flutter for Webで値を保存するFlutter for Webで値を保存する
Flutter for Webで値を保存する
shinya sakemoto
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしよう
shinya sakemoto
 
Android study part5
Android study part5Android study part5
Android study part5
shinya sakemoto
 
Android study part4
Android study part4Android study part4
Android study part4
shinya sakemoto
 
Android study part3
Android study part3Android study part3
Android study part3
shinya sakemoto
 
Android study part2
Android study part2Android study part2
Android study part2
shinya sakemoto
 
Android study part1
Android study part1Android study part1
Android study part1
shinya sakemoto
 
Material Designなdrawerを実装したい
Material Designなdrawerを実装したいMaterial Designなdrawerを実装したい
Material Designなdrawerを実装したい
shinya sakemoto
 
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみたGoogle Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
shinya sakemoto
 
インストールリファラでハマった話
インストールリファラでハマった話インストールリファラでハマった話
インストールリファラでハマった話
shinya sakemoto
 
ちょっと優しい入力項目
ちょっと優しい入力項目ちょっと優しい入力項目
ちょっと優しい入力項目
shinya sakemoto
 
foursquareの楽しみ方
foursquareの楽しみ方foursquareの楽しみ方
foursquareの楽しみ方
shinya sakemoto
 

More from shinya sakemoto (14)

ScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたいScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたい
 
Gitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発するGitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発する
 
Flutter for Webで値を保存する
Flutter for Webで値を保存するFlutter for Webで値を保存する
Flutter for Webで値を保存する
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしよう
 
Android study part5
Android study part5Android study part5
Android study part5
 
Android study part4
Android study part4Android study part4
Android study part4
 
Android study part3
Android study part3Android study part3
Android study part3
 
Android study part2
Android study part2Android study part2
Android study part2
 
Android study part1
Android study part1Android study part1
Android study part1
 
Material Designなdrawerを実装したい
Material Designなdrawerを実装したいMaterial Designなdrawerを実装したい
Material Designなdrawerを実装したい
 
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみたGoogle Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
 
インストールリファラでハマった話
インストールリファラでハマった話インストールリファラでハマった話
インストールリファラでハマった話
 
ちょっと優しい入力項目
ちょっと優しい入力項目ちょっと優しい入力項目
ちょっと優しい入力項目
 
foursquareの楽しみ方
foursquareの楽しみ方foursquareの楽しみ方
foursquareの楽しみ方
 

Gradleプラグインを作成してみた