ビルドツールGradleのインストールと使い方、Jenkins/Git連携:小山博史のJavaを楽しむ(18)(2/5 ページ)
オープンソースのビルドツール「Gradle」の主な特長やLinux/Windowsでの環境構築方法、さまざまな使い方に加え、CI/バージョン管理との連携方法を解説します。
Gradleの基本的な使い方
ビルドツールはソースコードやリソースファイルなどの素材から動作するアプリケーションを生成するためのものです。使ってみるためにはソースコードなどを用意してからになりそうなものですが、Gradleはそういったものがなくても使えます。一体何の役に立つのかというのはさておき、動かしてみると分かることも多いですから、まずは使ってみましょう。
Gradleでは、ビルドに関する設定は「build.gradle」というファイルに記述します。Gradleを実行するには、「gradle」コマンドを使います。このコマンドは、インストール時の動作確認で使いました。
最初のプロジェクト用に「build.gradle」を作成
開発ではプロジェクト単位でプログラムを作成することが多いため、一般的なIDEでもプロジェクト単位でソース、ドキュメント、成果物を管理します。Gradleでも同様にプロジェクト単位でビルドファイルを用意することが想定されています。
ということで、まずは最初のプロジェクト用に「proj01」ディレクトリを用意し、その中に「build.gradle」ファイルを用意して、動かしてみます。
task task01 { doLast { println 'Hello Gradle' } }
Gradleではタスク単位で処理が実行できます。この例では「task01」というタスクを用意しています。このタスクは「Hello Gradle」というメッセージをprintlnメソッドで表示する処理となっていて、何もビルドはしませんが、build.gradleファイルに必要なコードを理解するには良い例となっています。
Linuxだと、これぐらいならエディターを起動しなくても、ヒアドキュメントの機能を使って次のように入力をすれば、できてしまいます。
$ mkdir proj01 $ cd proj01 $ cat << HERE > build.gradle > task task01 { > doLast { > println 'Hello Gradle' > } > } HERE $
実行結果
これで、build.gradleファイルができるので、gradleコマンドでtask01タスクを実行します。
このように、カレントディレクトリをbuild.gradleファイルがある場所としてから、gradleコマンドを実行するというのが基本です。
$ gradle task01 :task01 Hello Gradle BUILD SUCCESSFUL Total time: 6.516 secs
「Hello Gradle」というメッセージがコンソールに表示されているのが分かるでしょうか。「-q」オプションを付けると、画面に出力されるログメッセージを抑制できます。こちらの方がtask01の実行結果が分かりやすいですね。普段はこちらを使って、ログメッセージも見たいときは「-q」オプションを外すのが良いでしょう。
> gradle -q task01 Hello Gradle
省略した書き方
ちなみに、先ほどのbuild.gradleはもっと短縮できて、次のように記述することもできます。
task task01 << { println 'Hello Gradle' }
タスクを増やすには
また、タスクを増やすこともできます。gradleコマンド実行時にtask01の代わりにtask02をパラメーターで指定すると、「Hello Gradle2」というメッセージが表示されるようになります。
task task01 << { println 'Hello Gradle' } task task02 << { println 'Hello Gradle2' }
ここまでで、メッセージを出力するだけのビルドができるようになりました。本格的なビルドファイルを用意するときは、「println 'Hello Gradle'」と書いた処理のところに、ビルドに必要な処理を記述することになります。
チーム開発でGradleを使うためのGradle Wrapperとは
次にJavaプロジェクトのビルドファイルの例を紹介するのですが、その前に「Gradle Wrapper」を紹介しておきます。個人でGradleを使うのではなく、チーム開発でGradleを採用するなら、Gradle Wrapperを使いましょう。
これを使うと、Gradleを使ったことがない開発者が開発に参加しても、プロジェクトのコードをチェックアウトして、ちょっとコマンドを実行するだけで、すぐにGradle環境が構築できます。
Gradle Wrapperの使い方
実際に使ってみた方がイメージしやすいので、Gradle Wrapperの機能を試しに利用してみましょう。「projgw01」ディレクトリを作り、そこに下記の内容で「build.gradle」ファイルを作成します。「wrapper」タスクに引数が指定されていますが、ここではこう書くものだと思ってください。利用するGradleのバージョンを「gradleVersion」へ指定しています。
task wrapper(type: Wrapper) { gradleVersion = '1.11' }
「projgw01」をカレントとして、gradleコマンドでwrapperタスクを実行します。
$ gradle wrapper
projgw01には、次のような構成でディレクトリとファイルが生成されます。gradleディレクトリと、そこに含まれるファイル、gradlewスクリプトファイル、「gradlew.bat」バッチファイルがあれば、他の人は簡単にGradleを導入できます。
バージョン管理システムを使っている場合は、これらをリポジトリへ追加してコミットしましょう。単純に試すなら、projgw01をアーカイブして、Gradleがインストールされていない別のマシンへ持っていっても良いですね。
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
配布する前に、この環境でも「gradlew」コマンドを使えるようにしておきましょう。次のコマンドを実行すると、gradlewコマンド用のGradle環境が構築されます。
$ ./gradlew
これで、gradleVersionで指定してあったバージョンのGradleがダウンロードされて「$HOME/.gradle/wrapper/」にインストールされます。ここで、gradlewコマンドは、gradleコマンドのラッパーなので、gradleコマンドと同様に使うことができます。
例えば、タスクの一覧を表示するには、tasksタスクを実行すれば良いので、次のようにコマンドを実行します。
$ ./gradlew tasks :tasks All tasks runnable from root project Build Setup tasks - init - Initializes a new Gradle build. [incubating] Help tasks -- dependencies - Displays all dependencies declared in root project 'projgw01'. dependencyInsight - Displays the insight into a specific dependency in root project 'projgw01'. help - Displays a help message projects - Displays the sub-projects of root project 'projgw01'. properties - Displays the properties of root project 'projgw01'. tasks - Displays the tasks runnable from root project 'projgw01'. Other tasks --- wrapper To see all tasks and more detail, run with --all. BUILD SUCCESSFUL Total time: 1.954 secs
この結果から、「projects」「tasks」といったタスクがヘルプタスクとして用意されていること、最初に用意したwrapperタスクが使えることが分かります。
なお、「$HOME/applications/gradle」へインストールしたGradleと「$HOME/.gradle/wrapper」の下にインストールされたGradleと2つのGradleが存在することになるので注意しましょう。gradlewコマンドを使えば、「$HOME/.gradle/wrapper」の下にインストールされたGradleが使われます。
他のマシンへのインストール
gradlewコマンドの動作確認もできたので、次にこの環境をGradleがインストールされていない他のマシンへ配布して使えるのかを確認してみましょう。
コマンドを実行するマシン上にはJDKがインストールされている必要はありますし、インターネットに接続されている必要があります。通常はリポジトリからチェックアウトして、gradlewコマンドを実行するだけで、Gradle環境が構築できます。
ここではリポジトリを用意するのではなく、次のようにしてアーカイブファイル「projgw01.tgz」を作成して、Ubuntu上の別ユーザー「user001」のホームディレクトリへ持っていくことで、他のマシンへ配布したのと同等の環境を用意しました。
$ tar czf projgw01.tgz projgw01 $ sudo cp projgw01.tgz /home/user001/ $ sudo chown user001:user001 /home/user001/projgw01.tgz
user001にユーザーを切り替えて、gradlewコマンドを実行するだけで、Gradleがダウンロードされて先ほどと同様にインストールされます。user001が使うJDKは「/opt/java/jdk1.7.0_51」にあらかじめインストールしておきました。ここの「JAVA_HOME=/opt/java/jdk1.7.0_51」の例のように環境変数はコマンド実行時にコマンドの前に付けて指定することもできます。
$ su - user001 $ tar xf projgw01.tgz; cd projgw01 $ JAVA_HOME=/opt/java/jdk1.7.0_51 ./gradlew
tasksタスクも動かすと、先ほどの例と同様の結果が出力されます。
$ JAVA_HOME=/opt/java/jdk1.7.0_51 ./gradlew tasks (略)
Gradleのインストールは非常に簡単なので、ここまで必要だろうかと思うかもしれません。しかし、プロジェクトに必要なファイルを一式入手したら、gradlewコマンドを実行するだけでいいというのはやはり便利です。チーム開発へ導入しやすくなるこういった機能が提供されているところがうれしいですね。
Copyright © ITmedia, Inc. All Rights Reserved.