概要: GradleはJavaプロジェクトのビルド自動化に欠かせないツールです。本記事では、プロジェクト作成(gradle init)から、Gradle Wrapperの利用、Groovy/Kotlin DSLの選択、主要コマンドまでを初心者向けに解説します。
Gradleとは何か?Java開発における役割と基本概念
ビルド自動化ツールとしての役割
Gradleは、JavaなどのJVMプロジェクトで利用できるビルド自動化ツールです。コンパイル、テスト実行、外部ライブラリの取得、依存関係の解決、JARなどのパッケージング、成果物の公開まで、開発に必要な一連の処理をまとめて自動化できます。Gradle自体がJavaコンパイラではない点に注意してください。Javaコンパイルなどの処理を適切なタスクとして構成し、実行する役割を担います。(出典:Gradle「Gradle Build Tool Features」)
主要な概念:Project・Task・Plugin
Gradleを理解する上で、Project、Task、Pluginの3つの概念が重要です。Projectはビルド対象となる単位で、通常は1つのプロジェクトが1つの成果物を生成します。Taskはコンパイルやテスト、JAR作成などの具体的な処理単位です。PluginはJava Pluginのように、一連のタスクや設定をまとめて提供する拡張機能です。JavaプロジェクトではJava Pluginを適用することで、コンパイルやテストなどのタスクが自動的に利用可能になります。(出典:Gradle「Gradle Build Tool Features」)
Mavenとの違いと選択の考え方
MavenもJavaで広く使われるビルド・依存関係管理ツールですが、GradleではGroovyまたはKotlinを使ったDSLでビルド処理を柔軟に記述できる点が大きな違いです。一方、MavenはXML形式のpom.xmlを利用します。GradleはMaven互換リポジトリからライブラリを取得でき、MavenからGradleへの移行機能も公式に用意されています。「Gradleが必ずMavenより高速」と断定するのは避けるべきで、ビルド時間はプロジェクト構成や設定によって変わります。(出典:Gradle「Gradle Build Tool Features」)
要点:GradleはJavaのコンパイル・テスト・パッケージングを自動化するビルドツール。Groovy/Kotlin DSLで柔軟に設定でき、Maven互換リポジトリも利用可能。
Gradleプロジェクト作成の手順と生成される構成
gradle initコマンドによるプロジェクト初期化
Gradleで新規Javaプロジェクトを作成するには、gradle initコマンドを使用します。このコマンドは対話式でプロジェクト種別、実装言語、Javaバージョン、ビルドスクリプトDSL、テストフレームワークなどを順に尋ねます。非対話モードではコマンドラインオプションで指定可能です。Javaアプリケーションを作成する場合の推奨コマンド例は次のとおりです。
gradle init --type java-application --dsl kotlin --test-framework junit-jupiter --package my.project --project-name my-project --no-split-project --java-version 17- 実行後、Gradle Wrapper(gradlew / gradlew.bat)が自動生成されます
initタスクは自動的にGradle Wrapperも生成するため、システムにGradleをインストールしていない環境でもプロジェクトをビルドできます。(出典:Gradle「Build Init Plugin」)
生成される標準プロジェクト構造
gradle initでJavaアプリケーションを作成すると、以下のような構造が生成されます。
settings.gradle(.kts):ルートプロジェクト名とサブプロジェクト定義gradlew/gradlew.bat:Gradle Wrapperスクリプトgradle/wrapper/:Wrapper用のjarファイルとpropertiesファイルapp/build.gradle(.kts):アプリケーションのビルド設定app/src/main/java/:メインのソースコードapp/src/test/java/:テストコード
ルートプロジェクト直下にコードを置くのではなく、appサブプロジェクトとして構成される点が重要です。(出典:Gradle「Part 1: Initializing the Project」)
ビルドスクリプトDSLの選択
gradle initでは、ビルドスクリプトのDSLとしてGroovy DSLまたはKotlin DSLを選択できます。Gradle公式チュートリアルではKotlin DSLをデフォルトとして扱っており、近年の新規プロジェクトではKotlin DSLが推奨される傾向にあります。Kotlin DSLはbuild.gradle.ktsというファイル名になり、IDEの補完機能や型チェックの恩恵を受けられます。Groovy DSLを選択した場合はbuild.gradleが生成されます。(出典:Gradle「Part 1: Initializing the Project」)
要点:gradle initで対話式にプロジェクトを作成。Gradle Wrapperが自動生成され、appサブプロジェクトとしてソースコードが配置される。
Gradle Wrapperとは?gradleコマンドとの違いと使い方
Wrapperの仕組みとメリット
Gradle Wrapperは、プロジェクトが使用するGradleバージョンを固定し、必要に応じて自動取得・実行する仕組みです。代表的なファイルはgradlew(Linux/macOS用)、gradlew.bat(Windows用)、gradle/wrapper/gradle-wrapper.propertiesなどです。初回実行時に指定されたバージョンのGradleがダウンロードされ、~/.gradle/wrapper/dists/にキャッシュされます。開発者全員が同じGradleバージョンを使用でき、CI環境でも同じバージョンを再現できるため、公式に推奨されています。(出典:Gradle「Gradle Wrapper Basics」)
gradleコマンドとの違い
システムにインストールしたGradleを直接使う場合、gradleコマンドを使用しますが、プロジェクトごとにバージョンを固定できないという問題があります。Wrapperを使用すれば、プロジェクトに含まれるgradle-wrapper.propertiesに指定されたバージョンが必ず使用されます。既存プロジェクトでは、まずgradlewの有無を確認し、存在する場合はシステムにインストールしたGradleではなくWrapperを使ってビルドするのが基本です。Wrapperファイル一式はソース管理(Git等)にコミットすることが推奨されています。(出典:Gradle「Gradle Wrapper Basics」)
Wrapperの生成とバージョン更新
Wrapperを生成するにはgradle wrapperコマンドを実行します。特定のバージョンを指定する場合はgradle wrapper --gradle-version 8.5のように指定します。既存プロジェクトのGradleバージョンを更新する場合も同じコマンドを使用します。なお、WrapperでGradleを実行するにはJDK 17以上が必要です。また、gradle wrapperコマンド自体は、システムにインストールされたGradle(または既存のWrapper)を使用して実行します。
| 操作 | コマンド |
|---|---|
| Wrapper生成(現在のバージョン) | gradle wrapper |
| Wrapper生成(バージョン指定) | gradle wrapper --gradle-version 9.6.1 |
| Wrapperでビルド実行 | ./gradlew build(Windowsはgradlew.bat build) |
要点:WrapperはプロジェクトごとにGradleバージョンを固定する公式推奨の仕組み。gradleコマンドではなくgradlewを使用する。
Groovy DSLとKotlin DSLの選び方とbuild.gradleの基礎
2つのDSLの特徴と違い
Gradleのビルド設定にはGroovy DSLとKotlin DSLの2種類があります。Groovy DSLは従来から利用されており、動的言語ならではの柔軟な記述が特徴です。Kotlin DSLは静的型付けによるコード補完やエラー検出が可能で、IDEとの相性が良い点が利点です。どちらを選ぶかはプロジェクトの方針や開発チームのスキルに依存しますが、Gradle公式チュートリアルではKotlin DSLがデフォルトとして扱われています。
build.gradleの基本的な構成要素
ビルドスクリプトには主に以下の要素を記述します。
- plugins:使用するプラグインを宣言(例:
application、java) - repositories:依存関係を取得するリポジトリ(例:
mavenCentral()) - dependencies:外部ライブラリへの依存関係
- java:Javaツールチェーンやコンパイル設定
- application:メインクラスの指定など
GradleはMaven CentralなどのMaven互換リポジトリからライブラリを取得し、推移的依存関係の解決にも対応します。(出典:Gradle「Gradle Build Tool Features」)
依存関係のconfigurationと使い分け
Javaプロジェクトで使用する主な依存関係のconfigurationは以下のとおりです。
| configuration | 用途 | 外部への公開 |
|---|---|---|
implementation |
コンパイル・実行時に必要 | 非公開 |
api |
コンパイル・実行時に必要(java-library用) | 公開 |
compileOnly |
コンパイル時のみ必要 | 非公開 |
runtimeOnly |
実行時のみ必要 | 非公開 |
testImplementation |
テストのコンパイル・実行時に必要 | 非公開 |
implementationを使うことで、依存関係が外部APIに公開されず、ビルドの高速化と疎結合化が期待できます。(出典:Gradle「Dependency Management」)
要点:Kotlin DSLは静的型付けでIDE補完に優れ、公式もデフォルトとして扱う。依存関係はimplementationを標準的に使用する。
Gradleの主要コマンドとログ・フォーマットの確認方法
よく使うビルドコマンド
Gradleで頻繁に使用するコマンドとMavenコマンドの対応を以下の表にまとめます。
| Maven | Gradle | 用途 |
|---|---|---|
mvn clean |
./gradlew clean |
ビルド産物の削除 |
mvn compile |
./gradlew compileJava |
コンパイル |
mvn test |
./gradlew test |
テスト実行 |
mvn package |
./gradlew build |
ビルド(テスト含む) |
mvn clean package -DskipTests |
./gradlew clean build -x test |
テストをスキップしてビルド |
mvn dependency:tree |
./gradlew dependencies |
依存関係ツリー表示 |
buildタスクはテストを含む完全ビルド、assembleタスクはテストを実行せずパッケージングのみを行う点に注意してください。(出典:Gradle「Part 2: Running Gradle Tasks」)
タスク一覧とプロジェクト情報の確認
Gradleではプロジェクトの状態を確認するためのコマンドが充実しています。
./gradlew tasks:利用可能なタスク一覧を表示./gradlew tasks --all:内部タスクを含む詳細なタスク一覧./gradlew projects:サブプロジェクト一覧を表示./gradlew properties:プロジェクトのプロパティを表示./gradlew --version:Gradleバージョンを確認./gradlew help --task <task名>:特定タスクの詳細情報
アプリケーションを実行するにはapplicationプラグインが必要です。javaプラグインのみではrunタスクは使用できません。なお、テストレポートはbuild/reports/tests/test/index.htmlに出力されます。(出典:Gradle「Part 2: Running Gradle Tasks」)
ログレベルとタスク実行状態の見方
Gradleの実行結果では、各タスクの状態が以下のように表示されます。
| 表記 | 意味 |
|---|---|
| (なし) | 通常実行 |
UP-TO-DATE |
入力・出力に変更がなくスキップ |
FROM-CACHE |
ビルドキャッシュから復元 |
SKIPPED |
-x等で明示的にスキップ |
FAILED |
実行失敗 |
詳細なログを確認するには--infoオプションや--debugオプションを使用します。エラー発生時には--stacktraceオプションでスタックトレースを表示できます。特定のテストのみ実行する場合は./gradlew test --tests *ServiceTestのように指定します。(出典:Gradle「Part 2: Running Gradle Tasks」)
要点:build=テスト含む完全ビルド、assemble=テストなしパッケージング。タスク一覧はtasksコマンド、詳細ログは–info/–debugで確認。
“`
まとめ
よくある質問
Q: gradle initで作成できるプロジェクトの種類は?
A: gradle initでは、basic、application、library、gradle-pluginなどのプロジェクト種別を選択できます。Javaアプリケーションを作成する場合はjava-application、Javaライブラリを作成する場合はjava-libraryを指定します。
Q: gradleとgradlewの違いは何ですか?
A: gradleはシステムにインストールされたGradleを実行するコマンドです。一方、gradlewはGradle Wrapperのことで、プロジェクトごとに使用するGradleバージョンを固定して実行できます。公式ではWrapperの利用が推奨されています。
Q: Groovy DSLとKotlin DSLのどちらを選ぶべきですか?
A: Groovy DSLは従来から使われており、build.gradleファイルを使用します。Kotlin DSLはbuild.gradle.ktsファイルを使用し、Kotlinの型安全性やIDEサポートが特徴です。Gradle 8.2以降の公式チュートリアルではKotlin DSLがデフォルトとして扱われています。
Q: Gradleプロジェクトで利用できる主要なタスクは?
A: 代表的なタスクとして、compileJava(コンパイル)、test(テスト実行)、build(テストを含むビルド)、assemble(パッケージング)、clean(ビルド産物の削除)などがあります。./gradlew tasksで利用可能なタスクを一覧表示できます。
Q: Gradleのログレベルや出力フォーマットを変更するには?
A: コマンドラインオプションで変更できます。–infoで詳細なログ、–debugでデバッグレベルのログが出力されます。また、–console=plainでプレーンテキスト形式のログになります。
