SlideShare a Scribd company logo
Gradle2.4の個人的
にお気に入りな機能
@mike_neck
ってくスタイルです
自己紹介
持田真哉
(@mike_neck)
Java、Groovy好き
おじさん
【質問】
Gradleのプラグイン
作ったことある人?
Gradleのプラグインは利用す
るものであって作るなんて論外
という人?
Gradleは甘え。
真のビルドはmakeのみ。
という人?
そんな皆さんに朗報
Projectに依存せず、プラグイ
ンを作れるようになりました。
Rule based model
configuration
コンセプト
「どのようにビルドする」か
ではなく、「何をビルドする
か」記述する
例を紹介する前にモティ
ベーションの紹介
Haskellのビルドツールcabalの依存性地獄つ
らい
cabalでライブラリーを取ってくると発狂しそ
うなくらい時間がかかる
StackageプロジェクトのLong Term
Support Haskellでテンプレートを共有した
い
問題点:LTS Haskellのリリースが半端なく速
い(週1以上でリリースされる)
最新の環境を整えるためにコマンド叩くの面倒
自動化するためのShellちからがない人生だっ
た(´・ω・`)
–マリー・アントワネット
“Shellが駄目ならGradleでいいじゃない”
GradleでHaskellの
開発環境構築しよう!
せっかくだからRule based
model configuration使おう
概要
実装の規約
モデルをPOJO形式のinterfaceで提供
Default、Model、Mutate、Finalize、
Validateの各ステージごとにルールを記述
プラグインの利用者はモデルをビルドスクリプト
中に指定する
ビルドスクリプト
apply plugin: ‘lts-haskell’
model {
ltsHaskell {
dir = ‘path/to/ltshaskell’
cabal.create {install = ‘happy’}
cabal.create {install = ‘ghc-mod’}
cabal.create {install = ‘yesod’}
}
}
モデルクラス
@Managed //setter/getterを提供
public interface LtsHaskellConf {
String getDir();
void setDir(String dir);
// ManagedSetの中身も@Managedでないと落ちる
ManagedSet<HaskellVersion> getVersions();
ManagedSet<CabalPackage> getCabal();
}
ルールクラス
class LtsHaskell extends RuleSource {
@Model //modelブロックの次のブロックの名前
void ltsHaskell(LtsHaskellConf c) {
c.dir = “${getHome()}/.ltshs”
}
ルールクラス(続き)
@Mutate //モデルへの変更操作・taskを生やしていく
void create(CollectionBuilder<Task> tasks, LtsHaskellConf haskell) {
haskell.versions.each {v ->
ts.create(“create${v}Dir”).doLast {
Files.createDir(Paths.get(c.dir, v))}
ts.create(“sandbox${v}”, Exec) {
workingDir = “${haskell.dir}/$v”; dependsOn “create${it}Dir”
commandLine ‘cabal’, ‘sandbox’, ‘init’
}
haskell.cabal.inject(“sandbox${v}”) {pre, cbl ->
ts.create(“install${cbl}”, Exec) {
実行
$ ./gradlew tasks
LtsHaskell2.8
LtsHaskell2.9
$ ./gradlew LtsHaskell2.9
…
Installed gcc-mod
…
Installed yesod
$
簡単にHaskellの開発環境
作ったどー
╭( ・ㅂ・)‫ﻭو‬ ̑̑ グッ !
後は
https://github.com/mike-neck/LTS-
Haskell-Init をチェック!!!
まとめ等…
モデル(データ)とルール(関数)でタスクを構築
GradleのPluginとかProjectインターフェースの知識なくて
もプラグイン作れる
設定用の口を開くためのメソッドを作らんでもいい
Model-reportタスクで設定できる項目もわかるのでユーザーフ
レンドリー
Gradle3に向けて現在のProjectベースからRuleベースに転換
していくっぽい
以上!

More Related Content

PDF
OSS Product feat. Gradle
PDF
Gws 20141024 gradle_intro
PDF
Spring in-summer-gradle-hands on-withanswers
PDF
Gaelyk
PPTX
Jjug 20140430 gradle_advanced
PDF
Arachne Unweaved (JP)
PDF
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
PDF
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
OSS Product feat. Gradle
Gws 20141024 gradle_intro
Spring in-summer-gradle-hands on-withanswers
Gaelyk
Jjug 20140430 gradle_advanced
Arachne Unweaved (JP)
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall

What's hot (7)

PDF
俺とお前とGoogleware
PDF
AndroidStudioはじめました ~Gradle編~
PDF
Mackerelではじめる お手軽サーバー監視
PPTX
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
PDF
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
PDF
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
俺とお前とGoogleware
AndroidStudioはじめました ~Gradle編~
Mackerelではじめる お手軽サーバー監視
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Ad

Similar to gradle2.4のルールベースモデルコンフィギュレーション (20)

PDF
Groovy base gradle_20130309
PDF
明日から使えるgradle
PDF
Gradleスクリプトを読み解く
PDF
JavaとScalaとGroovyと
PDF
Gws 20120521 gradle
PDF
Gradleどうでしょう
PDF
Jjug 20140430 gradle_basic
PPTX
Gradle再入門.pptx
PPTX
Gradleでビルドするandroid NDKアプリ
PDF
Scalaでもgae
PDF
Java9 and Project Jigsaw
PDF
2016 Android × Scala @ScalaMatsuri2016
PDF
Gradle small tips for android
PDF
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
PDF
G * magazine 0
PDF
Groovy Grails eXchage 2014 報告
PDF
実戦Scala
PPTX
JavaScriptで味わう! 関数型プログラミングのメリット!!
PDF
JJUG CCC 20150411 grails3 Spring-boot
PDF
Skinny Framework で始めた Scala
Groovy base gradle_20130309
明日から使えるgradle
Gradleスクリプトを読み解く
JavaとScalaとGroovyと
Gws 20120521 gradle
Gradleどうでしょう
Jjug 20140430 gradle_basic
Gradle再入門.pptx
Gradleでビルドするandroid NDKアプリ
Scalaでもgae
Java9 and Project Jigsaw
2016 Android × Scala @ScalaMatsuri2016
Gradle small tips for android
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
G * magazine 0
Groovy Grails eXchage 2014 報告
実戦Scala
JavaScriptで味わう! 関数型プログラミングのメリット!!
JJUG CCC 20150411 grails3 Spring-boot
Skinny Framework で始めた Scala
Ad

More from Shinya Mochida (20)

PDF
サーバーサイド Kotlin のテストフレームワーク事情
PDF
IntelliJ IDEA を完全にマスターする話
PDF
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
PDF
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
PDF
swift-log について
PDF
Vim 入門
PDF
Java プログラマーのための Swift 入門 #中央線Meetup
PDF
swift-nio のアーキテクチャーと RxHttpClient
PDF
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
PDF
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
PDF
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
PDF
Javaモジュールシステム雑なまとめ
PDF
Kotlin as an AltJS
PDF
JavaのStreamで学ぶ遅延処理実装パターン
PDF
On stream-lazy-computation
PDF
Stream脳の作り方
PDF
Java8のstreamをダラダラまとめてみる
PDF
ドラクエの金銭感覚
PDF
30億のデバイスで走るjavaを支えるjavaエコシステム
PDF
Intelli j vs-eclipse-by-mike-neck #jbugj
サーバーサイド Kotlin のテストフレームワーク事情
IntelliJ IDEA を完全にマスターする話
クリーンアーキテクチャーを強制する方法を考えてみた(N番煎じ) #すえなみチャンス暑気払い
jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1
swift-log について
Vim 入門
Java プログラマーのための Swift 入門 #中央線Meetup
swift-nio のアーキテクチャーと RxHttpClient
JJUG CCC 2018 Spring - I-7 (俺が)はじめての Netty
JJUG CCC 2018 Spring LT Spring Boot アプリケーションの起動を速くする 108 の Tips #jjug_ccc #jjug
Spring Boot アプリケーションの起動をほんの少し気持ちだけ速くしてみた
Javaモジュールシステム雑なまとめ
Kotlin as an AltJS
JavaのStreamで学ぶ遅延処理実装パターン
On stream-lazy-computation
Stream脳の作り方
Java8のstreamをダラダラまとめてみる
ドラクエの金銭感覚
30億のデバイスで走るjavaを支えるjavaエコシステム
Intelli j vs-eclipse-by-mike-neck #jbugj

gradle2.4のルールベースモデルコンフィギュレーション