【入門】Gradleとは?機能まとめ

Gradleの機能をまとめています。設定可能な項目は大量にあるので網羅的な説明はGradle公式ページに任せ、この記事ではGradleの基本情報を説明します。
ちなみにGradleの読み方はグラドルではなくグレイドルです。
概要
Gradleはオープンソースのビルド自動化ツールです。つまり、Javaなどのソースコードを配布可能なパッケージにするために必要な処理をまとめて行ってくれるツールです。具体的にはソースコードのコンパイル、自動テスト実行、パッケージ化までをユーザーが設定した値に従って一気に実行してくれます。
Gradleでどのようにビルドするのかを設定するスクリプトにはGroovyという言語が採用されています。Groovyはjavaとrubyが混ざったような言語です。文法の大半はjavaと同様なのでjavaの文法を知っていれば簡単に使えます。またバージョン5.0からはKotlinでの記述にも対応しました。
実はGradle自身の機能は限られており、Gradleを通して利用する機能は基本的にプラグインというものを利用します。どのプラグインをどのように利用するのかは設定用スクリプトで定義します。
Gradleのメリット
設定をスクリプトで記述するために問題がある個所が明確になりやすいです。EclipseやVSCodeなどのgroovyやkotlinの解釈をしてくれるエディタを使っていれば、記述ミスを検知してくれます。
またjavaに文法が似たgroovyやKotlinで記述できるので、javaの開発をしている人にとっては学習コストが低く済む点もメリットです。
Gradleのデメリット
記述方法が柔軟すぎる点がデメリットにあげられます。スクリプトとして動作すればどんな順番で書いても良く、型が少ないためです。
また省略記法が豊富で、すでに出来上がっているGradle設定を新規参入者が見た時に分かりにくくなりがちな点もデメリットです。
Gradleで利用するファイル
Gradleを動作させるために必要なファイルとその役割を説明します。
build.gradle
Gradleにおけるメインの設定用スクリプトです。プロジェクト単位で作成し、利用するライブラリやパッケージの名称、パッケージ作成後のアップロード場所など、プロジェクト全体にかかわる設定を記述します。このファイルは特に重要なので、後の章でどのような設定項目があるのか詳細に説明します。
settings.gradle
マルチプロジェクトの管理を行うファイルです。マルチプロジェクト内のルートプロジェクトに配置して、どのフォルダをサブプロジェクトとして扱うかを定義してマルチプロジェクトの範囲と、各プロジェクトとのフォルダとしての位置関係の定義を担います。
gradle.properties
build.gradleやsettings.gradleで利用する変数をキーバリュー形式で定義できるファイルです。このファイルに記述する内容はほとんどが他のファイルで利用する変数の定義ですが、中には"org.gradle.jvmargs"といったJVM設定などgradleのビルドスクリプトが裏で勝手に読み取って設定を反映させることもあるので、どこで利用されているか分からない値を設定しているような場合は検索して確認しておきましょう。
重要用語解説
この後Gradleで設定可能な項目について説明をするのですが、その設定項目自体について正しく理解をするために必要な用語の解説を最初にします。
- Task:ビルドのプロセスで実行される処理を小分けにしたもの。プログラミングでいう関数だと考えれば良い。複数のタスクが合わさってビルドが行われることもあれば、一つの大きなタスクでビルドが行われることもある。コンパイルだけでなくデプロイ、テスト実行、ドキュメント作成など様々な処理を設定可能。
- Dependency:アプリケーションコードやテストコード、ビルドスクリプトが動作するときに利用するライブラリのこと。
- plugin:ビルド時に利用できる追加機能。プラグイン名を指定してインポートすることで、そのプラグインの機能がビルドプロセスで使われる。
- Repositories:PluginやDependencyの取得元を記述する。URLなどを記述できる。リモートリポジトリからだけでなくローカルにあるものも設定可能。複数の取得元を設定でき、上から順番にインポート対象のライブラリを探すことになる。
設定可能項目
Gradleで設定可能な項目のうち主要なものは以下です。
- アプリケーションコードで利用するライブラリ
- ビルド時に利用するライブラリ
- 自動テストの実行有無
- 品質チェック実行有無(コーディング規約に沿っているかや初期化されてない変数など潜在的なバグがないかの確認)
ここからは記述例も含めて具体的に説明します。
アプリケーションコードで利用するライブラリ
アプリケーションコードで利用するライブラリを指定できます。どこにあるものを使うのか、どのバージョンを利用するのかを定義できます。設定例は以下です。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'junit:junit:4.13.2'
}
dependenciesでアプリケーションコードで利用するライブラリを設定できます。implementationでは実際に動作するアプリケーションコードで利用するライブラリを、testImplementationではテスト時のみに利用するライブラリを指定しています。
このようにどのタイミングで利用するライブラリなのかも設定可能です。
ビルドで利用するプラグイン
ビルドに利用するプラグインを適用する方法は2つあります。1つ目がpluginsを利用するやり方。2つ目がapply plugin:です。
一つ目のpluginsではGradle Plugin Portalに公開されているプラグインの適用が可能です。以下がコード例です。
plugins {
id 'org.springframework.boot' version '4.5.5'
id 'java'
}
この例では特定のバージョンのspring bootとjavaを適用しています。Gradle Plugin Portalにはよく利用されるプラグインが大体あるので、基本この記載方法で問題ありません。
Gradle Plugin Portalに公開されていないマイナーなプラグインや自作のプラグインの場合にはpluginsは利用できないので、apply plugin:を利用する必要があります。またapply plugin:を利用する場合にはどこから持ってくるのかを明示する必要があります。以下がコード例です。
buildscript {
repositories {
maven()
}
dependencies {
classpath 'com.someorg:myplugin:1.0.0'
}
}
apply plugin: 'myplugin'
要素が多く少し複雑なのですが、やっていることは以下です。
- repositoriesにより、どこにあるリポジトリから情報を取得するのかを設定(この例だとMavenリポジトリ)
- dependenciesにより、どのリソースを利用可能にするか設定(repositoriesで設定したリポジトリから取得)
- apply pluginにより、ビルドに利用するプラグインを設定(dependenciesで設定したリソースから取得)
pluginsと比べるとかなりややこしいため、pluginsを利用できるならpluginsを利用しましょう。
自動テストの実行有無
Javaのプロジェクトではプロジェクト内のテストケースが実行されるようにデフォルトで設定されています。
これを無効にするには以下のような設定をします。
test {
enabled = false
}
品質チェック実行有無
品質チェック用のプラグインを適用することで動作します。例として、コード規約に沿っているかチェックする"checkstyle"を適用するコードを載せます。
apply plugin: 'checkstyle'
この一行を追加するだけで、ビルド時にcheckstyleでの品質チェックが行われます。
より深く理解してもらうために少しだけ内部的な部分もお話ししておきます。Gradleによるビルド実行時には以下のタスクが実行されることがデフォルトで決まっています。
- コンパイル
- テスト
- 品質チェック
- パッケージング
品質チェックのタスクはcheckという名称なのですが、checkstyleを適用することによりcheckタスク実行時にcheckstyleを利用することが内部的に設定されます。このような動きによってcheckstyleプラグインを適用するだけでビルド時に利用されるようになるのです。
まとめ
Gradleは柔軟かつプラグインにより豊富な機能を利用することが出来る強力なビルド自動化ツールです。使いこなすことで開発に必要な工数を大幅に減らすことが出来ます。
時間をかけてでもプラグインや設定によって何ができるのかじっくり調べてみると良いでしょう。きっと長期的にみると良い結果になります。
ちょっと細かいけど知っておいた方が良いこと
最後に少し細かいのですが、知っておくと役に立つGradle関係の知識を共有します。
タスクの個別実行方法
Gradleではbuild.gradleでタスクをいくつもつくることが出来るのですが、それらをgradleコマンドを利用して個別に実行する方法をお伝えします。実行方法は以下です。
gradle タスク名
タスク名からタスクを特定するためにはbuild.gradleを参照できる場所である必要があるので、build.gradleを置いているプロジェクトのルートディレクトリで実行する必要があります。
gradlew
gradleをコマンドで実行するときにはgradleコマンドを利用します。しかし末尾にwがついかgradlewコマンドも存在します。この末尾のwはラッパー(wrapper)を意味しています。
この二つの違いは、システム全体で利用されるgradleかプロジェクトに設定されているgradleを利用するかです。gradlewを使うことでプロジェクト参加者全員が同じgradleを利用することが出来るようになるため、基本的にはgradlewを使います。またgradlewはプロジェクトのリポジトリに含むために、開発者はgradleを別途インストールする必要もなく楽です。
簡単にgradlewを利用できるようにするところから利用するまでを解説します。
- build.gradleでプロジェクトで利用するgradleのバージョンを指定する。例:wrapper {gradleVersion = '8.2’}
- wrapperタスクを実行する。実行方法:gradle wrapper
これによりプロジェクト内にgradlewコマンドを実行するためのファイルが作成されます。 - gradlewコマンドを実行するためのファイルを共有
- 共有された開発者がgradlewコマンドを利用する。実行方法は以下。単純にフォルダにある実行可能なファイルを実行しているだけです。
- windowsでは「gradlew.bat タスク名」
- linuxでは「./gradlew タスク名」
参考
- Gradle User Manual ( Gradle公式 )