情報畑でつかまえてロゴ
本サイトは NTTテクノロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

ビルドツールGradleスタートアップガイドの紹介「Grails/Groovy工房vol.2」[前編]

Gradleは、Groovyを利用してビルドスクリプトを記述することができるビルドツールです。本コラムでは、Javaの開発にターゲットを絞り、すぐ使えて実際の開発現場へ適用できることを目的とした、ビルドツールGradleのスタートアップガイドを紹介していきます。

はじめに

Gradleは、Javaの開発者を対象にしたビルドツールです。
また、Gradleの情報源は、 Gradle User Guide ( 翻訳版はこちら )という素晴らしいものがすでにあります。
今回のコラムでは、Javaの開発にターゲットを絞り、すぐ使えて実際の開発現場へ適用できることを目的とした、ビルドツールGradleのスタートアップガイドを紹介していきます。

ご自身や周りで、次のような方がいらっしゃいませんか?

  • AntやMavenなどのビルドツールを使っていない
  • AntやMavenを使っているが、XMLに苦しめられている
  • 私はプログラマだ
  • Groovyに興味はあるが、導入のきっかけがない

もしいらしたら、Gradleがぴったりです!

ぜひこのコラムをご覧いただき、利用をご検討ください。

では、Gradleの世界をお楽しみください!

  

Gradleとは

1. 特徴

Gradleは、動的スクリプト言語Groovyを利用してビルドスクリプトを記述することができるビルドツールです。Gradleには、以下のような特徴があります。

  • JavaVM上で動作する
  • Mavenのようにプロジェクトのライフサイクル全体をカバーしている
  • ビルドスクリプトをGroovyのDSL(Domain Specific Language)で簡潔に記述することができる
  • 複雑な箇所はGroovyスクリプトで柔軟に記述することができる
  • さまざまな機能がプラグインで用意されている
  • Mavenのリポジトリを利用することができる
NTTソフトウェア株式会社 鈴木 雅貴

つまり、Mavenのようなデフォルト規約に沿った強力なプロジェクトライフサイクルのサポートとAntのような任意のビルド処理を自在に表現するパワフルさを兼ね備えた万能選手としてのビルドツール、それがGradleです。

なんでもできるといってもAntのように手続き的処理をXMLで書き下すような苦行はもう必要ありません。プログラマにとってなじみの深いスクリプト言語で直接的に記述することができます。特にJava言語利用者にとって、Java言語と親和性の高いGroovyを活用したGradleは最適と言っていいでしょう。

現在利用実績も増えており、Groovyプロダクトはもちろんのこと、O/RマッパのHibernateもGradleへ移行しています。

2. Gradleの基本情報

Gradleの基本的な情報は以下です。なお、本書はGradleの対象バージョンを2013年2月時点での最新である1.4としています。

項目情報

公式サイト

http://www.gradle.org/

ライセンス

Apache License, Version 2.0

Gradleのインストールと設定

1. 動作環境

Java JDKの1.5以上が必要ですので、インストールしておいてください。

ちなみにGradleではGroovyを使用しますが、GradleにはGroovyが含まれているため、Groovyを別途インストールする必要はありません。また、Gradleから既存のGroovyを使用することもありません。

2. インストール

インストールはとても簡単です。

公式サイトのDOWNLOADS からGradleをダウンロードします。
動かすだけでよければバイナリのみの gradle-バージョン番号-bin.zip を、ドキュメントやソースコードも必要であれば gradle-バージョン番号-all.zip をダウンロードしてください。

ダウンロードしたファイルを解凍し、できたディレクトリごとインストールしたいディレクトリに配置してください。そして、そのディレクトリを環境変数GRADLE_HOMEに設定してください。

最後に環境変数として、Windowsなら%GRADLE_HOME%\binを、Linux/Macなら$GRADLE_HOME/binを環境変数PATHに追加してください。

インストールが成功したかどうか確認するために、以下のコマンドを実行してください。

gradle -v

Gradleのバージョンなどが正しく表示されれば成功です。

ちなみにMacの場合は、Homebrewを使ってインストールすることもできます。

brew install gradle

この場合も、環境変数は適宜設定してください。

以下のコマンドを実行してください。

3. 設定

Gradle実行時のファイルのエンコーディングやProxy等のJVMオプションは、環境変数JAVA_OPTSかGRADLE_OPTSを使って設定してください。Gradleに閉じた設定は、GRADLE_OPTSを使用するとよいでしょう。

環境変数を使いたくない場合は、gradle.propertiesという設定ファイルを利用することもできます。proxyを設定する場合は、

systemProp.http.proxyHost=proxyサーバ(HTTP)
systemProp.http.proxyPort=proxyポート番号(HTTP)
systemProp.https.proxyHost=proxyサーバ(HTTPS)
systemProp.https.proxyPort=proxyポート番号(HTTPS)

と記述したgradle.propertiesを作成し、プロジェクトルート(後述)か、Gradleのホームディレクトリ(デフォルトだとユーザのホームディレクトリ/.gradle)に配置すれば、上記の設定が有効になります。

Javaプロジェクトクイックスタート

1. 対象となるプロジェクトのディレクトリ構成

Gradleでは、プロジェクトのディレクトリ構成としてMavenを踏襲した標準ディレクトリ構成を採用しています。その基本的な構成を以下に示します。

プロジェクトルート
+--- build.gradle(ビルドスクリプト)
+--- src
+--- main(プロダクト用)
|     +--- java(Javaソース)
|     +--- resources(*.propertiesなど)
|     +--- config(設定ファイルなど)
|
+--- test(テスト用)
+--- java(テストコード デプロイ時には使用されない)
+--- resources(テストで使用されるリソースファイル)

これ以外の構成でも利用は可能ですが、そのぶん設定が必要になるため、できるだけ上記構成に従うことを推奨します。

ビルドスクリプトファイル名はデフォルトでbuild.gradleです。gradleコマンドを実行すると、カレントディレクトリのbuild.gradleを参照してビルドを実行します。build.gradle以外のファイル名を用いたい場合は、コマンド実行時にcオプションを用いて、ビルドスクリプトファイルを明示的に指定する必要があります。

gradle -c ビルドスクリプト名

上記構成のプロジェクトが準備できたら、ビルドスクリプトを作ってみましょう。

2. ビルドスクリプトの作成

2.1 Javaプロジェクト用のおまじない

ビルドファイルをエディタで開いたら、Javaプロジェクトを扱うためのおまじないとして、ビルドファイルの先頭に以下を記述してください。

基本的な準備はこれだけです。では、ビルドでどのようなことができるか確認してみましょう。Gradleではタスクという単位で作業を指定します。タスクは例えばコンパイル、テスト、JARファイル作成などです。

以下のコマンドで実行可能なタスク一覧を確認することができます。

gradle tasks

成功すると、以下のようにタスク一覧が出力されます。

:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Build tasks
-----------
assemble - Assembles all Jar, War, Zip, and Tar archives.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles the main classes.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles the test classes.
(以下略)

このように、Gradleはデフォルトでプロジェクトのライフサイクルが定義されており、基本的なところは設定なしで使えるようになっています。

2.2 文字エンコーディング設定

Javaを用いた開発では、明示的にソースコードの文字エンコーディングを指定することをおすすめいたします。Gradleにおいては、環境変数で指定する方法と、ビルドスクリプト内で指定する方法の2つがあります。

環境変数を用いる場合には、JAVA_OPTSに-Dfile.encodingを用いて設定します。例えばproxyも合わせると次のような設定になります(文字コードは適宜変更してください。特に指定がない場合はUTF-8をおすすめします)。

ビルドスクリプト内で指定するには、以下をビルドスクリプトに記述してください。

見慣れないかもしれませんが、Groovyの展開ドット演算子という記法を使って、defaultEncodingで定義したエンコーディングを、コンパイル系のタスクに設定しています。

2.3 依存関係のあるライブラリの利用

続いてassembleタスクとtestタスクを実行するbuildタスクを実行できるよう、ビルドスクリプトを編集していきます。

assembleタスクとtestタスクを実行するためには、依存関係のあるライブラリやテストに使用するJUnitなどのJARファイルが必要です。ビルド実行時にそれらを外部から入手するために、以下のような記述をビルドファイルへ追記してください。

依存関係のあるライブラリの入手先としてMavenリポジトリを追加し、依存関係のあるライブラリを指定しています。

依存関係のあるライブラリの指定方法ですが、
Maven Repository: Search/Browse/Explore で検索した結果から、Mavenタブを参考にgroup、name、versionを指定してもよいですし、Gradleタブをそのまま利用してもかまいません。以下のキャプチャ画像はCheckstyleを検索し、Gradleタブを表示した状態のものです。

Checkstyleを検索し、Gradleタブを表示した状態

Mavenリポジトリ以外のMaven形式外部リポジトリを使用している場合は、以下のようにrepositoriesへ使用するリポジトリを追加してください。

リポジトリを使っていない場合は、以下のようにdependenciesへ依存関係のあるファイルを追加してください。

2.4 ビルドの実行

これでビルドのための設定は完了です。ビルドを実行してみましょう。

gradle build

BUILD SUCCESSFULと表示されれば成功です!おめでとうございます!

3. タスクについて

3.1 プロジェクトとタスク

ビルドができるようになったところで、先ほど簡単に触れたタスクについて理解しておきましょう。

Gradleにはプロジェクトとタスクという概念があります。

Gradleによるビルドは1つ以上のプロジェクトにより実現されます。ビルドといってもアプリケーションをビルドするだけでなく、配布物を作成したり、試験環境へデプロイしたりといったものも対象になります。

プロジェクトは1つ以上のタスクにより構成されています。Gradleにおけるタスクとは、コンパイルやJARファイル作成など、分割不能な作業単位を表すものです。

3.2 デフォルトで利用可能なタスク

コマンド"gradle tasks"で、プロジェクトで実行可能なタスクを表示することができます。ここでは、Javaプラグインによりデフォルトで利用可能なタスクを紹介します。

3.2-1 ビルドに関するタスク

タスク説明
assemble コンパイルを実行しJAR、WAR、ZIP、TARファイルなどを作る
build assemble後にテストを実行する
buildDependents そのプロジェクト"が"依存するプロジェクトを含めbuildを実行する
classes メインクラスをassembleする
clean 成果物(buildディレクトリ配下)を削除する
compileJava プロダクトのコンパイルを行う
compileTestJava テストコードをコンパイルする
jar メインクラスを含むJarファイルを作成する
processResources プロダクトのリソースをクラスディレクトリにコピーする
processTestResources テストリソースをテストクラスディレクトリにコピーする
testClasses テストクラスをassembleする
uploadArchives 成果物をアップロードする

3.2-2 テストや解析を行うタスク

タスク説明
check testを含む検証タスクを実行する
test ユニットテストを実行する

3.2-3 ドキュメント作成に関するタスク

タスク説明
javadoc Javadocを生成する

3.2-4. 各種情報を表示するタスク

タスク説明
dependencies プロジェクトが利用するライブラリを表示する
help ヘルプメッセージを表示する
projects サブプロジェクトを表示する
properties プロジェクトのプロパティを表示する
tasks 実行可能なタスクを表示する

3.3 主要タスクの依存関係

多くのタスク間には依存関係が設定されています。主要なタスクの依存関係は次のようになっています。

このようにデフォルトの設定がされているおかげで、先ほどのように gradle build を実行すると、必要なタスクが次々に実行され、ビルドができたわけです。

連載シリーズ
テクノロジーコラム
著者プロフィール
鈴木 雅貴
鈴木 雅貴
作品公開の場としてのWebに可能性を感じ入社。 XML関連業務や継続的インテグレーション社内普及活動などを経て、 2013年より新たに設立されたHTML5推進室の主要メンバーとしてWeb技術を推進している。 セミナーでの講演や書籍執筆などの活動も行っている。 著書に『HTML5プロフェッショナル認定試験 レベル1 対策テキスト&問題集』(マイナビ/共著)。得意領域はCSS。 調理歴20年超。本人も原因不明のアヒル好き。