【入門】Gradleとは?機能まとめ
Gradleの機能をまとめます。設定可能な項目は大量にあるので、網羅的な説明はGradle公式ページに任せ、この記事ではGradleを利用した大半のプロジェクトで設定される代表的な設定項目をまとめます。
ちなみに読み方はグラドルではなくグレイドルだそうです。
概要
Gradleはオープンソースのビルド自動化ツールです。つまり、Javaなどのソースコードを配布可能なパッケージにするために必要な処理をまとめて行ってくれるもの。具体的にはソースコードのコンパイル、自動テスト実行、パッケージ化までをユーザーが設定した値に従って一気に実行してくれます。
設定用スクリプトの記述にはGroovyという言語を利用します。Groovyはjavaとrubyが混ざったような言語です。文法の大半はjavaと同様なのでjavaの文法を知っていれば簡単に使えます。また結局作るのは設定用のファイルなので、複雑なロジックではなく特定の項目に値を設定することがメインです。そのためjavaを知らなくても何かしらの言語に触れた経験があれば簡単に理解できます。
先ほど"設定用スクリプト"と記載しましたが、名前の通り設定ファイルではなくてスクリプトです。つまりshellスクリプトやbatのように動作して、その結果として必要な設定がされる挙動になります。設定ファイルをgradleが読み取って設定するわけではありません。
また実はGradle自身の機能は限られており、利用する機能は基本的にプラグインというものを利用します。どのプラグインをどのように利用するのかも設定用スクリプトで定義します。
Gradleのメリット
設定をスクリプトで行うために問題がある個所が明確になりやすいです。eclipseやvscodeなどのエディタであれば、エラーを検知してくれます。
またgroovyで記述するので、javaの開発をしている人にはハードルが低い点もメリットです。
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で設定可能な項目のうち主要なものは以下です。
- アプリケーションコードで利用するライブラリ
- ビルドで利用するライブラリ
- 自動テストの実行有無
- 品質チェック実行有無(コーディング規約に沿っているかや初期化されてない変数など潜在的なバグがないかの確認)
ここからは個別にスクリプト例も込みで詳細に説明します。具体例ではJavaを利用している場合の例としていますが、指定しているライブラリ以外は同様の設定で動作するので、参考になると思います。
アプリケーションコードで利用するライブラリ
アプリケーションコードで利用するライブラリを指定できます。どこにあるものを使うのか、どのバージョンを利用するのかを定義できます。設定例は以下です。
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と比べるとかなりややこしいです。
自動テストの実行有無
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公式 )