うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

Ant, Maven, Gradleのビルド #kyon_mmAdvent

kyon_mm Advent Calendar

つぎのリンクにあるAdventCalendarの五日目です。
http://connpass.com/event/1457/

Ant, Maven, Gradleの特徴

これらはビルドツールと呼ばれるものであり、端的に言えば、コンパイル、テストなどを行います。
ライブラリを自動的にダウンロードしてきたり、OSSとして簡単に公開することを提供しているものもあります。
これらの「コンパイル」「テスト」「静的解析チェック」などのビルドツールが行う作業をタスクとして登録して、実行するツールと言えばよいのですかね。

簡単に比較してみましょう。

項目 Ant Maven Gradle
記述言語 XML XML Groovyの内部DSL
柔軟性 柔軟 硬い 柔軟
使われる事が多いリポジトリ Ivy MavenCentral MavenCentral
筆者の感覚 ありえない 滅びろ 最高


結論から言うと、僕はGradle以外は使いたくありません。はい。公式ドキュメントが有志によって日本語訳されているのも素晴らしいです。

Gradle 日本語ドキュメント


では、軽くGradleの説明をしたあとに、AntからGradleへの移行方法、MavenからGradleへの移行方法をサクッと説明します。

GradleでGroovyアプリをビルドする

細かい事はDocumentを読んでもらうとして、次のコードで必要な依存ライブラリのダウンロード、コンパイル、テスト、jar作成までをこなします。

プロジェクトのルートディレクトリにbuild.gradleというファイル名で作成し、コンソールからgradleと打てば実行されます。


みよ!この簡潔さ!

apply plugin: 'groovy'

defaultTasks 'check', 'jar'

repositories {
    mavenCentral()
    maven{
        url "https://oss.sonatype.org/content/repositories/snapshots"
    }
}

dependencies{
    groovy 'org.codehaus.groovy:groovy:2.0.5'
    testCompile 'org.spockframework:spock-core:0.7-groovy-2.0-SNAPSHOT'
    testCompile 'junit:junit:4.10'
}


ここでは既存のタスクである、compile, testCompileなどを使用しているので、タスクの定義がありません。
ここでhello worldと表示するだけのタスクを追加しようとしたときは次のように書きます。

task hello << {
    println "Hello World"
} 


提供されているプラグインは基本的にapply plugin : 'groovy'などと書くわけですが、
「ちょっと複雑な処理なんだけど、他のプラジェクトでも使いたいからbuild.gradleには書きたくない」というときも自分でkyonOriginal.gradleファイルなどとしてbuild.gradleと同じディレクトリに置き、Gradleのタスク形式で書き、それをbuild.gradleでapply from:kyonOriginal.gradleとすることで、kyonOriginal.gradleで定義したタスクを使えます。


Groovyの内部DSLなので、「普通のプログラミング言語で書ければ簡単に定義できそうな処理」というのが素直にGroovyとして書けます。非常に便利です。


AntからGradleへの移行

Ant使っているプロジェクトの方、安心してください。
GradleはAntのbuild.xmlをインポートしてそのままGradleでbuild.xmlのタスクを実行できます。


build.gradleに次の行を上の方に追加すれば、他のタスクと同じように使えます。

ant.importBuild 'build.xml'

MavenからGradleへの移行

大きいものになるとそんなに簡単じゃないけど、十分にメリットはありますよと多くの人が言っているのでその通りなのだろうなぁと思っています。
ちなみにSpringはMavenからGradleへ乗り換え、Grailsも次期メジャーバージョンではGradleになる予定です。

Mavenプラグインはあるのですが、そこまで再現できていないという実情があります。
僕が移行した経験のなかではだいたいGroovyで自分でプラグインを書きました。結構簡単に書けたのでGroovy自体がこういったツールに向いている言語であるなぁと実感した場面でした。

参考Webサイト
IT検証ラボ - ビルドツールの移行性、MavenからGradleへの乗り換えは容易か:ITpro

SpringがGradleへ移行しOSGiを放棄