Mavenとは?インストールから使い方までサンプル付きでわかりやすく解説!
- 1.Gradleとは?
- 2.ビルドツールについておさらい
- 3.Gradleの特徴
- 4.Gradleのインストールと設定
- 5.Gradleの使い方
- 6.Gradleを使うメリット
- 7.Gradleを使うデメリット
- 8.Apache Ant・Apache Mavenとの比較
Java向けのビルドツールとしては比較的新しい「Gradle」。
Mavenは知っているけどGradleは知らない、という方も多いことでしょう。
本記事では、Gradleの特徴や他のビルドツールとの違いを詳しく解説していきます。
1.Gradleとは?
Gradleは、主にJava向けに開発されたビルドツールです。
Javaと同様に、JVM上で動作するKotlinやScalaはもちろんのこと、PythonやC++にも対応しています。
2.ビルドツールについておさらい
Gradleについて詳しく説明する前に、まずは「ビルドツール」についておさらいしておきましょう。
ビルドツールとは、プログラムのビルドや実行を自動化するツールです。
ビルドツールを利用することで、
・必要なライブラリのインストール
・Javaファイルのコンパイル
・自動テスト
・パッケージ(JarやWar)の作成
など、さまざまな手順を一括で実行してくれます。
ビルドからテストまでを一括で実施してくれるということは、人の手による作業を減らす役割を担っています。
そのため、複数人で開発をするような現場であれば、このようなビルドツールは必須の存在といえるでしょう。
3.Gradleの特徴
それでは、Gradleの特徴から紹介していきます。
① Groovyによるスクリプト
Gradleの大きな特徴が、JVMで動作するスクリプト言語である「Groovy」を用いて記述する点です。
Gradleは後述の「Apache Ant」や「Apache Maven」の思想を受け継いで開発されていますが、これらのビルドツールでは、XMLによる”設定ファイル”を利用してビルドの設定を記述していました。
一方で、Gradleは設定ファイルではなく”スクリプト言語”を用いてビルド手順を記述します。
スクリプト言語を用いて記述することで、AntやMavenと比べて非常に柔軟なビルドスクリプトを作成できるため、より高度なビルドを構成することが可能となりました。
またGradleのバージョン5.0からは、GroovyだけでなくKotlinによるスクリプト記述も可能となっています。
② Mavenとの互換性
GradleはMavenと高い互換性を持っており、Mavenのリポジトリを利用することも可能です。
そのため、Mavenを用いたプロジェクトをGradleに移行する場合にも非常に楽に移管できます。
③ プラグインによる拡張
実は、Gradle自身の機能は少なく、必要な機能は開発者がスクリプトを記述する必要があります。
とはいえ、すべてを自分で記述することは難しいでしょう。
Gradleにはさまざまなプラグインが用意されており、それらのプラグインを利用することで、効率的に開発できるようになっています。
もちろん、オリジナルのカスタムプラグインを作成することも可能ですし、そのプラグインを公開することもできます。
④ Android開発の標準ビルドツール
モバイル向けOSであるAndroidのアプリを作る場合には、「Android Studio」を利用して開発をすることになります。
このAndroid StudioにはGradleが標準搭載されており、Androidアプリのビルドを行う場合にはGradleを利用することになります。
そのため、Androidアプリ開発者であれば必然的にGradleの習得が必要になるのです。
4.Gradleのインストールと設定
それでは、実際にGradleを動かす準備をしましょう。Windows・Macそれぞれのインストール方法を紹介します。
①動作環境
Gradleをインストールする前に、Javaがインストールされていることを確認しましょう。
②Windowsでのインストール方法
はじめに、Windowsでのインストール方法からご紹介します。
ダウンロード
Javaがインストールされていること確認できたら、Gradleをダウンロードしましょう。
Gradleをダウンロードするには、https://gradle.org/releases/ へアクセスします。
最新バージョンの「binary-only」のリンクを押下してください。今回の例では、v7.4.2をダウンロードします。
すると、zipファイルがダウンロードされます。
インストール
ダウンロードしたzipを、Cドライブの直下に解凍します。
パスを通す
最後に、コマンドからGradleを実行させるためにパスを通しましょう。
システムのパスを変更するため、「システム環境変数の編集」を開きます。
Cortanaに「path」と入力することで、簡単に検索できます。
システムのプロパティが表示されるので、「環境変数」をクリックします。
環境変数のダイアログが表示されますので、「システム環境変数」の「Path」をダブルクリック。このとき、ユーザー環境変数ではない点に注意しましょう。
以下のように、パスの一覧にGradleのパスを指定します。このとき、パスの最後に「\bin」を追加することに気を付けてください。
パスの設定が終了したら、PowerShellを起動して以下のコマンドを実行してみましょう。
gradle -v
正常にインストールが完了していれば、以下のように表示されます。
> gradle -v
Welcome to Gradle 7.4.2!
Here are the highlights of this release:
- Aggregated test and JaCoCo reports
- Marking additional test source directories as tests in IntelliJ
- Support for Adoptium JDKs in Java toolchains
For more details see https://docs.gradle.org/7.4.2/release-notes.html
------------------------------------------------------------
Gradle 7.4.2
------------------------------------------------------------
Build time: 2022-03-31 15:25:29 UTC
Revision: 540473b8118064efcc264694cbcaa4b677f61041
Kotlin: 1.5.31
Groovy: 3.0.9
Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM: 18.0.1.1 (Oracle Corporation 18.0.1.1+2-6)
OS: Windows 10 10.0 amd64
③Macでのインストール方法
Macを利用しているのであれば、Homebrewを利用することで簡単にインストールできます。
brew install gradle
5.Gradleの使い方
インストールが完了したところで、Gradleの使い方をマスターしていきましょう。
①gradleコマンド
GradleをPowerShellなどのシェルから実行する場合、「gradle」コマンドを利用します。
gradle <コマンド名>
たとえば、さきほどの「gradle -v」は、gradleのバージョン情報を表示するためのコマンドです。
②initコマンド
Gradleを用いたプロジェクトを作成する場合、「init」コマンドを利用します。
gradle init
すると、対話形式でプロジェクトの作成が進んでいきます。
今回は、設定内容の例を紹介します。
プロジェクト種別
まずは、作成するプロジェクトの種別を選択します。今回はアプリを開発するので「2」を選択しましょう。
Starting a Gradle Daemon (subsequent builds will be faster)
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
言語の選択
次に、使用するプログラミング言語を選択します。
今回はJavaを使用したいので「3」を入力します。(デフォルトがJavaなので、そのままEnterでもかまいません)
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6]
マルチプロジェクトの設定
マルチプロジェクトの設定を行いましょう。
ここで「yes」を選択すると、Javaのプロジェクトを複数作成しひとつにまとめることができます。
今回は単純なアプリを作成したいので「no」を入力します。
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project)
スクリプト言語の選択
スクリプト言語を選択します。
今回はGroovyを利用するため「1」を入力します。
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1 #
最新の記述を利用するか
最新のコードを利用するか聞かれますが、今回は安定版である記述をするため「no」を選択しましょう。
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]
単体テスト
利用する単体テストの種類を選択します。
今回は標準的なJUnit Jupiterを選択するため「4」を入力します。
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 4
プロジェクト名
作成するアプリの名前を入力します。
今回は「GradleSample」を作成します。
Project name (default: project): GradleSample
ソースパッケージ
Javaのソースコードを格納するパッケージを指定します。
今回はデフォルトのまま利用しましょう。
Source package (default: GradleSample):
プロジェクト作成完了
以下のように表示されれば、プロジェクトの作成は完了です。
> Task :init
Get more help with your project: https://docs.gradle.org/7.4.2/samples/sample_building_java_applications.html
BUILD SUCCESSFUL in 2m 54s
2 actionable tasks: 2 executed
③tasksコマンド
gradleで実行できるタスクを確認するために「tasks」コマンドを実行しましょう。
「gradle init」で作成したプロジェクトで以下のコマンドを実行すると、実行できるタスクが表示されます。
> gradle tasks
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project 'GradleSample'
------------------------------------------------------------
Application tasks
-----------------
run - Runs this project as a JVM application
Build tasks
-----------
assemble - Assembles the outputs of this project.
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 main classes.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles test classes.
・・・(略)・・・
BUILD SUCCESSFUL in 5s
1 actionable task: 1 executed
このタスクに指定したものを実行することで、対応したタスクを実行できます。
たとえば、プロジェクトをビルドする場合には「build」を利用するため、以下のようなコマンドを実行します。
gradle build
⑤build.gradle
Gradleのビルドスクリプトを記述するのが「build.gradle」です。
build.gradleは以下のような記述がされています。
plugins {
// 使用する外部プラグインを指定
id 'application'
}
repositories {
// この記述があることで、Mavenと同じセントラルリポジトリが利用できる
mavenCentral()
}
dependencies {
// 利用するライブラリ(testImplementationは、テスト時にのみ利用される)
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// 利用するライブラリ
implementation 'com.google.guava:guava:30.1.1-jre'
}
application {
// メインクラス
mainClass = 'GradleSample.App'
}
// 「test」タスクの設定
tasks.named('test') {
// JUnitを用いたテストを有効化する
useJUnitPlatform()
}
非常にシンプルであることがわかります。
たとえば、依存関係を追加したい場合には、dependenciesのブロックに使用したいライブラリの情報を記述していきます。
⑥Gradle Wrapper
プロジェクトの作成が完了すると、以下のようなファイルが生成されています。
・gradlew.bat
・gradlew
これらはGradleを起動するためのスクリプトです。
後述する「gradle」コマンドのかわりにこのgradlewを実行することで、同様の機能を実現できます。
Windowsの場合には「gradlew.bat」を、LinuxまたはMacの場合には「gradlew」を指定して実行します。
gradlew.bat build
この記述は、以下のコマンドと同じ動作をします。
gradle build
このGradle Wrapperは、Gradleの自動インストールと実行をしてくれるスクリプトです。
Gradleがインストールされていない環境でビルドを実行する場合には、「gradle」ではなく「gradlew」を実行することで、Gradleを利用できるようになります。
6.Gradleを使うメリット
Gradleの基本的な使い方・コマンドを理解したところで、Gradleを利用するメリットを紹介します。
① Groovyにより柔軟なビルド設定が可能
Gradleは、設定ファイルではなくビルドスクリプトを作成することでビルドを実行することになります。
ビルドの順番や依存関係といった順番もすべてスクリプト化することが可能であるため、非常に柔軟なビルド設定を作成できます。
② Gradle Wrapperによる自動インストール
Gradleの機能紹介ですこし解説しましたが、Gradleにはプロジェクトのビルド時にGradleを自動でインストールする「Gradle Wrapper」という機能を有しています。
Javaプロジェクトの作成時にこのGradle Wrapperが生成されることで、
他の開発者はGradleのインストール手順を実施することなく、Gradleによるビルドが可能となります。
また、このGradle Wrapperを利用することでGradleのバージョンも揃うため、開発者の全員が同じバージョンのGradleを用いてビルドができるようになるのです。
この機能は、大規模開発における開発環境の差異が原因による問題発生を、最小限に抑える手助けとなります。
③ Mavenの資産が利用可能
GradleでもMavenでも、最終的に生成されるものはjarファイルであるため、Mavenで作ったライブラリをGradleで読み込んだり、GradleからMaven向けにライブラリをビルドしたりすることも可能です。
Gradleは依存関係を自動で解決する機能を有しており、必要な外部ライブラリがある場合にはそのライブラリを自動でダウンロードしてくれます。
そのほか、GradleはMaven向けのセントラルリポジトリからライブラリを取得することも可能であるため、Gradleに変更したからといって使用ライブラリを変更する必要はありません。
依存性の解決については、Mavenの記事を参照してみてください。
7.Gradleを使うデメリット
Gradleのメリットを理解したところで、Gradleを利用するデメリットや注意点をおさえておきましょう。
① 学習に時間がかかる
Gradleは細かいカスタマイズができる反面、習得時に時間がかかるというデメリットを持ちます。
とはいえ、プログラミング言語として存在する以上、Javaなどの開発経験があれば、Gradleの記述をする場合にはそれほど難しくありません。
慣れるまでは少し時間がかかりますが、習得してしまえば非常に使いやすいツールと言えるでしょう。
② 記述方法が変わることがある
2022年現在でも、Gradleは新しいバージョンがリリースされ続けており、
定期的にメジャーバージョンアップが行われています。
バージョンアップの際には新機能の追加ももちろんあるのですが、スクリプトの記述方法が変更になる場合があります。
そのため、インターネットでGradleの記述を検索しても、最新のバージョンでは動かない古い情報がヒットすることも。
また、Gradleの記載にはGroovyではなくKotlinも利用可能となったこともあり、初学者が調べながら習得するにはハードルが高いといえるでしょう。
Mavenはどうなのか?
ちなみに、Mavenも定期的にバージョンアップはされてはいますが、最新のメジャーバージョンである「Maven3」は2010年にリリースされています。
XMLの記述方法は大きく変わっていないため、Gradleと比べても学習に困ることは少ないでしょう。
③ Mavenに対する優位性が低い
非常に高機能なGradleですが、多くの場合にはその機能を使いこなせず役不足となってしまうことも。
すでにMavenでビルド環境を整えているのであれば、コストをかけてまでGradleへ移行する必要はありません。Gradleに移行する理由ができてからでも十分間に合います。
必ずしも「Gradleの方が良い!」とはかぎらないことは覚えておきましょう。
事実、既存のプロジェクトの多くは今でもMavenが採用されているので、Java開発者を目指すのであれば、MavenとGradleの両方の書き方をしっかりと把握しておくことが大事です。
8.Apache Ant・Apache Mavenとの比較
Gradleと同様に、Java向けのビルドツールとして挙げられるのが「Apache Ant」と「Apache Maven」です。
Gradleとこれらのソフトウェアは何が違うのでしょうか?特徴とGradleとの違いを紹介します。
①Apache Antの特徴
Apache Antは、Javaのビルドを自動化するために登場したソフトウェアで、Javaのプロジェクトのビルド、およびテストに特化したツールです。
プロジェクトの設定をすべてXMLで記述する必要があり、柔軟性の高い反面、設定が非常に面倒でメンテナンスしにくいというデメリットを持っていました。
発表年は2000年と古く機能も少ないため、現在でもAntが採用されているプロジェクトはかなり少ないでしょう。
②Apache Mavenの特徴
Apache Mavenは、Apache Antのデメリットを克服すべく開発されたソフトウェアで、2004年に登場しました。
Antと同様、XMLによる記述するという共通点を持ちますが、設定内容が非常に簡略化されているのが特徴です。
ビルドやテストといったタスクはすでに定義されているため、それらを呼び出すだけでほとんどのビルド作業が完了します。
また、AntにはないMavenの大きな特徴が「依存性の解決」です。
Mavenでは、利用できるライブラリを「Mavenリポジトリ」として公開することで、外部ライブラリの利用が容易になりました。
前述の通り、GradleでもこのMavenリポジトリを参照することでライブラリの読み込みが可能です。
Mavenの詳しい説明は、以下の記事もあわせて参照してみてください。
③3つのソフトウェアを比較
紹介した3つのソフトウェアを比較すると、以下のようになります。
説明 | Ant | Maven | Gradle |
発表年 | 2000 | 2004 | 2007 |
記述方法 | XML | XML | Groovy |
構成ファイル | build.xml | pom.xml | build.gradle |
プロジェクトのビルド | ○ | ○ | ○ |
自動テスト | ○ | ○ | ○ |
依存性の解決 | × | ○ | ○ |
MavenとGradleでは、機能面において大きな違いはありません。
スクリプトによる細かいタスクの定義が可能である点や、Gradle Wrapperの存在がGradleのメリットとして挙げられます。
新規のプロジェクトではGradleを選択するプロジェクトが増えてきていますが、今でも多くのJavaプロジェクトではMavenが採用されているのが現状です。
Javaエンジニアとして活躍するためには、GradleとMavenの違いをしっかりと押さえて、どちらも使えるようになっておくと良いでしょう。