Javaのビルドツールの歴史は古く、始まりは2000年頃まで遡ります。

本記事では以下の3種類のビルドツールについて、Gradleを中心に解説していきましょう。

  • Apache Ant(アパッチ アント)
  • Apache Maven(アパッチ メイヴェン)
  • Gradle(グレイドル)

まずGradleの特徴やメリット・デメリットを解説します。

次にインストール方法と使い方を説明しますので、実際に手を動かして確認しましょう。

後半はAnt・Mavenとの比較を行いながら、改めてGradleのメリット・デメリットを見返してみることにします。

最後はこれらのツールのうちどれを選ぶべきか考える項です。

Gradleの概要

Gradle(グレイドル)はオープンソースのビルド自動化ツールです。2012年にバージョン1.0がリリースされました。

AntとMavenの思想を引き継ぎ、CoCの考え方とリポジトリの仕組みを持っています。またこれらの設定ファイルのインポートも可能です。


Gradleの特徴

Gradleの特徴はGradleがGroovyによって記述されていることに起因します。


Groovyを採用

Groovy(グルービー)はJavaプラットフォーム上で動く動的プログラミング言語です。

GroovyはJavaと全く同じではありません。しかしJavaを扱ったことがあるプログラマであれば、学習コストはほとんどかからないでしょう。

文法の大部分はJavaと同じです。

ただしGroovyはRubyの影響を受けたRubyライクな言語でもあるので、Rubyに知見があればより早く習得できる言語です。

コードは比較的シンプルで、可読性の高いものになります。

Groovyの特徴や基本的な使い方については以下の記事で詳しくご紹介しています。Groovyに興味がある方は、ぜひ併せてご参照ください。

【Groovy入門】Groovyの特徴と基本の使い方を徹底解説!Groovyの用途とメリットは?基礎文法と学習方法も紹介


設定ファイルではなくスクリプト

Gradleの最大の特徴は実体はXMLを用いた設定ファイルではなく、Groovyスクリプトを用いたビルドスクリプトであるという点です。

開発者はJavaでコーディングするときと同じように、Groovyを用いてビルドスクリプトを記述することができます。


Repository

Mavenから引き継いだリポジトリの仕組みです。ビルドに必要な各種ライブラリはGradleが自動的にダウンロードしてくれるでしょう。

Gradleに専用のリポジトリはなく、MavenCentral・JCenterなど他のリポジトリからライブラリを取得します。

「build.gradle」に以下のように記述することで、参照先のリポジトリやその優先順位の指定ができる仕様です。

  1. repositories {
  2. mavenCentral()
  3. jcenter()
  4. }


Gradleのメリット

Gradleを利用すると以下のような利点があります。


スクリプトで記述できる

ご存知の通り設定ファイルに記述する内容というものは、ドキュメントを読んで見つけてこなければなりません。

また少し記述を間違えただけで動かない状態になりますが、エラーが直接出力されるというよりは、設定ファイルの誤りを指摘されます。

デバッグにはコツが必要なので、初学者には扱いづらいものです。

スクリプトであれば何行目のどの記述が間違っているかが明確に出力されます。これは通常のデバッグと同じ流れです。


Java経験者フレンドリー

Gradleが使いこなせるようになるにはGroovyを習得する必要があります。

特定のフレームワークや言語では、ビルドツールだけ仕様が異なっており、更に学習コストがかかる場合があるでしょう。

これはJavaにも当てはまることです。

今までAntやMavenでビルドしていて問題がなかったのに、わざわざGradleに移行するなんてと思う開発者もいるでしょう。

しかし学習コストが低ければ、それだけ導入のハードルは下がります。


Gradle プラグイン

Gradleプラグインを利用すると何が嬉しいのでしょうか。

実はGradle本体にはほとんど機能が含まれていません。必要な機能は開発者が後から追加します。

またカスタムプラグインを自作することも可能です。

例えば「OpenAPI Generator Gradle Plugin」は、OpenAPI定義書(openapi.yaml)からの仕様書やソースコードの自動生成を可能にします。


Gradleのデメリット

Gradleのデメリットは依存関係の優先順位とシンタックスシュガーによる弊害です。


Gradleにも癖はある

Mavenでも似たような感覚はあると思いますが、ビルドツールの設定ファイルやスクリプトを書くのにはある種のコツが必要です。

Groovyの文法が簡単で学習コストが低いことと、ビルドスクリプトを書いて動かすのとでは、求められるスキルが違います。

例えばMavenとGradleの依存関係の優先順位の差異です。Mavenのpom.xmlの設定をそのまま移植しても動かないことがままあります。


記述方法がいくつもある

同じGroovyでスクリプトを書いても、スクリプトファイルは人によってバラバラになるでしょう。

Groovyには省略記法やシンタックスシュガーが豊富で、長く複雑な構文を短く書ける反面、知らないと読んでも何をしているか分かりません。


Gradleのインストール方法

本記事ではopenjdk Dockerイメージを使用して確認を行いました。

動作環境は以下です。

  1. $ cat /etc/redhat-release
  2. Red Hat Enterprise Linux Server release 7.7 (Maipo)

  1. $ java -version
  2. openjdk version “14” 2020-03-17
  3. OpenJDK Runtime Environment (build 14+36-1461)
  4. OpenJDK 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)

もっともDockerにはgradleの公式イメージもあるので、単にgradleを実行したいだけなら、そちらを利用するのが手軽です。

インストール方法は公式サイト「Installing manually」の手順に従います。


Gradleをダウンロード

最新バージョンのGradleをダウンロードして下さい。Binary-onlyのZIPファイルは「gradle-X.X-bin.zip」です。

  1. $ curl -OL https://downloads.gradle-dn.com/distributions/gradle-6.3-bin.zip
  2. $ ls
  3. gradle-6.3-bin.zip


ZIPファイルの展開

もしunzipがインストールされていない場合は、以下のコマンドを実行してインストールして下さい。

  1. $ yum install unzip -y
  2. (中略)
  3. Installed:
  4. unzip.x86_64 0:6.0-20.el7
  5. Complete!

「/opt/gradle」ディレクトリを作成し、ZIPファイルを展開します。

  1. $ mkdir /opt/gradle
  2. $ unzip -d /opt/gradle gradle-6.3-bin.zip
  3. $ ls /opt/gradle/gradle-6.3
  4. bin init.d lib LICENSE NOTICE README


パスを通す

最後に環境変数($PATH)に「/opt/gradle」を追加してパスを通しましょう。

  1. $ export PATH=$PATH:/opt/gradle/gradle-6.3/bin
  2. $ gradle -v
  3. Welcome to Gradle 6.3!
  4. (後略)

これでインストールは完了です。


Gradleの使い方

この項では「gradle init」でプロジェクトの雛形を作成し、作成されたテンプレートを元に解説を進めていきます。

  • type of project to generate: 2: application
  • implementation language: 3: Java
  • build script DSL: 1: Groovy
  • test framework: 1: JUnit 4


gradle init

gradle init」コマンドでプロジェクトの雛形を作成を実行しましょう。以下のような選択肢が出てくるので適切なものを選んで下さい。

  1. Select type of project to generate:
  2. 1: basic
  3. 2: application
  4. 3: library
  5. 4: Gradle plugin
  6. Enter selection (default: basic) [1..4]

全ての選択肢を選び終えると、initタスクが実行されます。

  1. > Task :init
  2. Get more help with your project: https://docs.gradle.org/6.3/userguide/tutorial_java_projects.html
  3. BUILD SUCCESSFUL in 1m 38s
  4. 2 actionable tasks: 2 executed
  5. <————-> 0% WAITING
  6. > IDLE


Gradle Wrapper

srcディレクトリ配下にJavaのソースコードとテストコードが作成されている筈です。

またディレクトリに以下のディレクトリ・ファイルが生成されているのを確認できます。

  • gradle/wrapper/gradle-wrapper.jar
  • gradle/wrapper/gradle-wrapper.properties
  • gradlew(Linux)
  • gradlew.bat(Windows)

これらはGradle Wrapperといい、これらのファイルがあればLinux・Windowsの環境の別なくビルドを行える便利なツールです。


gradle

gradle」を実行するとhelpタスクが走り「Welcome to Gradle X.X.」と表示され、続いて簡単なヘルプコマンドが表示されるでしょう。


gradle tasks

gradle tasks」を実行するとtasksタスクが実行され、種類別にタスクの一覧が表示されます。

以下は一部のコマンドの抜き出しです。

  1. run – Runs this project as a JVM application
  2. build – Assembles and tests this project.
  3. clean – Deletes the build directory.

例えば「gradle build」を実行するとビルドタスクが実行されます。

Gradleは基本的にこのようにコマンドを実行して動作させるツールです。コマンドの中身は「build.gradle」に定義されています。


build.gradle

  1. plugins {
  2. id ‘java’
  3. id ‘application’
  4. }
  5. repositories {
  6. jcenter()
  7. }
  8. dependencies {
  9. implementation ‘com.google.guava:guava:28.2-jre’
  10. testImplementation ‘junit:junit:4.12’
  11. }
  12. application {
  13. mainClassName = ‘sample.App’
  14. }

少々長いので空行とコメントを除きました。

pluginsには利用するGradleプラグインのidを指定します。dependenciesは依存関係の宣言です。


Gradleプラグイン

buildタスクはどこにも書かれていません。buildタスクはJavaプラグインによって追加されたタスクだからです。

自作タスクを追加したい場合は、ファイルの末尾に以下のように追記を行って下さい。

  1. tasks.register(“helloworld”) {
  2. doLast {
  3. println ‘Hello world!’
  4. }
  5. }


カスタムタスク

自作タスクは「gradle tasks –all」の「Other tasks」に表示されます。

実行すると以下のように出力される筈です。

  1. $ gradle helloworld
  2. > Task :helloworld
  3. Hello world!
  4. BUILD SUCCESSFUL in 1s
  5. 1 actionable task: 1 executed


Antとの比較

Apache Ant(アパッチ アント)はオープンソースのビルド自動化ツールです。AntはAnother Neat Toolの頭字語です。

2000年頃、Tomcatのビルドツールとして登場しました。

Antでは設定ファイルをXMLで記述するので可読性は低いです。またMavenやGradleと違い依存関係の解決をしてくれません。

技術記事を検索しても古いものが多く、今はほとんど使用されていないのが現状でしょう。


Mavenとの比較

Apache Maven(アパッチ メイヴェン)もオープンソースのビルド自動化ツールです。登場は2004年になります。

<関連記事>
【Apache Maven入門】使用方法を初心者向けに解説!ダウンロード、インストール方法も紹介!Gradleとの違いとは

CoC(Conversion Over Configuration・設定より規約)の概念を取り入れ、設定ファイルの記述をなるべく減らそうとしました。

Mavenの設定ファイルもXMLで記述します。メリットとしてAntをそのまま使用できる点がありました。

Mavenは古いプロジェクトや昔からJavaを専売特許にしてきた企業のプロジェクトでよく見かけます。

Mavenの知見が蓄積されているので、下手にGradleに移行するよりは勝手が良いというところでしょう。

MavenもGradleも基本的にできることは同じです。


ビルドツールの技術選定

もし何もないところから新規プロジェクトを開始するなら迷わずGradleを選びます。

しかし企業やプロジェクトメンバーのスキルセットとして、既にMavenが定着しているなら選択肢には入るでしょう。

もし時間がないプロジェクトであればそのままMaven、学習コストを支払えるならやはりGradleで開始します。


おわりに

JavaのビルドツールはAnt・Maven・Gradleと移り変わってきました。また新しいツールが出るかもしれません。

今までの流れが踏襲されるならばGradleの思想や仕組みを受け継いだツールになる可能性が高いです。

少なくとも今あるリポジトリはそのまま活用していきたいですから、リポジトリ周辺の仕様はあまり変えられないでしょう。

と考えればまずはGradleをマスターして、ある程度使いこなせるようになっておくのが良いと思います。


toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。

エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。