概要: Javaプロジェクトで広く使われるビルドツールGradleについて、基礎知識から具体的なコマンドの使い方、デバッグ方法までを解説します。Gradle Wrapperの利用方法やテスト実行、よくあるトラブルへの対処法も紹介します。
Gradleとは?ビルドツールの基礎知識とMavenとの違い
Gradleの基本概念と役割
Gradleは、JavaなどのJVMプロジェクトで利用できるビルド自動化ツールです。ソースコードのコンパイル、テスト実行、外部ライブラリの依存関係解決、JARやWARへのパッケージング、成果物の公開まで、ビルドに関わる一連の処理を自動化できます。Gradle自体がJavaコンパイラではない点に注意してください。あくまで各種処理をタスクとして構成し、適切な順序で実行する役割を担います。最新安定版はGradle 9.6.1で、実行にはJDK 17以上が必要です。ビルド設定はGroovy DSL(build.gradle)またはKotlin DSL(build.gradle.kts)で記述します。主要な概念としてProject、Task、Dependency、Plugin、Repositoryがあり、これらを組み合わせてビルド処理を定義します。
Mavenとの違いを理解する
GradleとMavenは、どちらもJavaで広く使われるビルドツールですが、ビルド設定の記述方法に大きな違いがあります。MavenがXML形式のpom.xmlを使用するのに対し、GradleはGroovyまたはKotlinのDSLで柔軟に記述できます。比較表で確認しましょう。
| 比較項目 | Gradle | Maven |
|---|---|---|
| 設定ファイル | build.gradle / build.gradle.kts | pom.xml |
| 記述言語 | Groovy DSL / Kotlin DSL | XML |
| 柔軟性 | 高い(スクリプトで制御可能) | 制約が強い(規約重視) |
| ビルド速度 | 増分ビルド・キャッシュ等で高速化可能 | プロジェクト構成による |
| 利用状況 | Android・新規JVMプロジェクトで採用多数 | 既存エンタープライズ系で広く利用 |
「Gradleが必ず速い」「Mavenは古い」という断定は避けるべきです。実際のビルド時間はプロジェクト構成や設定によって変わり、両方とも現在も活発に利用されています。GradleはMaven互換リポジトリから依存関係を取得でき、公式の移行機能も提供しています。
Gradle Wrapperの重要性
Javaプロジェクトでは、システムにインストールしたGradleを使うよりもGradle Wrapper(gradlew / gradlew.bat)の利用が公式推奨です。Wrapperはプロジェクトごとに使用するGradleバージョンを固定し、必要なバージョンを自動取得して実行する仕組みです。これにより開発者全員とCI環境が同じGradleバージョンを使用でき、バージョン差異によるビルドの失敗を防げます。代表的なファイルは、Linux/macOS用のgradlew、Windows用のgradlew.bat、バージョンを指定するgradle-wrapper.propertiesです。既存プロジェクトでは、まずWrapperの有無と指定バージョンを確認しましょう。
要点:Gradleはビルド自動化ツールで、Mavenとは設定記述方法が異なる。システムへのインストールよりもWrapperの利用が推奨される。
Gradleビルドの実行方法!基本コマンドとWrapperの使い方
基本コマンドの構文と主要タスク
Gradleコマンドの基本構文はgradle [taskName...] [--option-name...]です。タスク名はスペース区切りで複数指定でき、オプションはタスク名の前後どちらにも配置できます。Java Plugin適用時の主要タスクを以下にまとめます。
gradle build:コンパイル、テスト、JAR作成を含む全ビルドgradle assemble:成果物(JAR等)のみ生成gradle check:テスト・検証タスクをすべて実行gradle clean:buildディレクトリの内容を削除gradle clean build:クリーンしてからビルドgradle jar:JARのみ生成gradle compileJava:Javaソースのコンパイル
マルチプロジェクトではコロン(:)でタスクパスを指定します。例えば子プロジェクトのテストはgradle :subproject:testのように実行します。
Gradle Wrapperの使い方
Wrapperを使用する場合は、gradleを./gradlew(macOS/Linux)またはgradlew.bat(Windows)に置き換えるだけです。以降のすべてのコマンドはWrapperでも同じように動作します。
- プロジェクトに
gradlew(またはgradlew.bat)が存在するか確認する gradle/wrapper/gradle-wrapper.propertiesで指定Gradleバージョンを確認する- 使用中のJDKバージョンが指定Gradleバージョンと互換性があるか確認する
./gradlew buildのようにタスクを実行する
Wrapperを使えば、Gradleを手動インストールしていない環境でも、指定バージョンのGradleが自動的にダウンロードされビルドが実行されます。これによりプロジェクトごとに異なるGradleバージョンを使い分けることも容易です。
タスク確認と実行制御オプション
プロジェクトで利用可能なタスクを確認するにはgradle tasksを実行します。タスク一覧がグループ別に表示され、gradle tasks --allで詳細情報も確認できます。特定タスクの詳細はgradle help --task タスク名で表示可能です。実行制御に役立つオプションは以下の通りです。
--dry-run(-m):タスクを実際に実行せず、実行されるタスク構成を確認--rerun-tasks:up-to-dateチェックを無視して全タスクを強制再実行--continue:タスク失敗後も残りのタスクを続行-x タスク名(--exclude-task):指定タスクを除外して実行--offline:ネットワークにアクセスせずビルド
タスク名は一意に識別できる範囲で省略可能です。例えばgradle cheはcheckタスクとして認識されます。
Gradleでテストを実行・スキップする方法!–testsオプションの活用
テスト実行の基本と–testsフィルタ
テスト実行はgradle testで行います。特定のテストのみ実行したい場合は--testsオプションでフィルタリングできます。ワイルドカード*を使った柔軟な指定が可能です。
gradle test --tests "SomeTest":クラス名で指定(任意パッケージ)gradle test --tests "org.gradle.SomeTest":完全修飾クラス名で指定gradle test --tests "org.gradle.SomeTest.someMethod":クラス+メソッドを指定gradle test --tests "*SomeTest.someMethod":クラス名部分にワイルドカードgradle test --tests "com.gradle.tooling.*":パッケージ配下を再帰的に指定gradle test --tests "*IntegTest":命名規約による指定
--testsは複数回指定して、複数のパターンを組み合わせることも可能です。どのテストが実行対象になるか事前に確認したい場合はgradle test --test-dry-runを使用します。これはテストを実際に実行せず、対象テストの一覧を表示するオプションです。
テストをスキップする方法
ビルド時にテストをスキップしたい場合は、-x(--exclude-task)オプションでtestタスクを除外します。
gradle build -x test:ビルド全体からテストのみ除外gradle assemble:初めからテストを含まないタスクを選択gradle build --exclude-task test:-xの長い形式で指定
assembleはコンパイルとJAR作成のみを行い、テストを実行しないため、成果物だけが必要な場合に有効です。ビルド高速化のために一時的にテストをスキップする場合は-x testが便利ですが、品質確認の観点から定常的なスキップは避けるべきです。
–tests使用時の注意点
--testsオプションを使用する際は、いくつかの制約と注意点があります。まず--testsはJava/JVM開発のテストタスク専用であり、Androidのテストタスクではサポートされません。また、旧来の-Dtest.single=...方式は非推奨となり、公式には--testsによるフィルタリングが推奨されています。さらに、Gradle 9.4.0以降では--test-dry-runでフィルタ設定の検証が可能です。複数の--testsパターンを指定した場合、いずれかに一致するテストが実行されます。パターンが複雑になる場合は、ビルドスクリプト側でfilterブロックを使用して恒久的なフィルタを設定する方法もあります。
要点:--testsで柔軟なテストフィルタリングが可能。-x testでテストをスキップできる。Androidテストタスクでは--testsは使えない。
Gradleでデバッグする方法!–stacktraceや–scanの使い方
スタックトレースとログレベル
ビルド失敗時に原因を特定するには、スタックトレースの表示が有効です。gradle build --stacktrace(-s)はユーザー例外のスタックトレースを出力し、--full-stacktrace(-S)はすべての例外の完全なスタックトレースを表示します。ログの詳細度は以下のオプションで制御できます。
| オプション | 出力内容 | 用途 |
|---|---|---|
-q(--quiet) |
エラーのみ | ビルド結果だけを確認したい場合 |
-i(--info) |
詳細ログ | タスクの実行状況を確認したい場合 |
-d(--debug) |
非常に冗長なデバッグログ | 根本原因の調査が必要な場合 |
-s(--stacktrace) |
ユーザー例外のスタックトレース | コンパイルエラー等の原因特定 |
注意すべきは-vはverboseではなくversion表示を意味する点です。gradle -vはGradle/Groovy/JVM/OSのバージョン情報を表示して終了します。詳細なログが必要な場合は-iまたは-dを使用してください。
ビルドスキャン(–scan)の活用
gradle build --scanを実行すると、ビルドスキャンと呼ばれるWebベースの詳細レポートが作成されます。ビルドスキャンでは、タスクの実行時間、依存関係の解決結果、キャッシュのヒット状況などをブラウザ上で視覚的に確認できます。ビルドが遅い原因を特定したり、依存関係の問題を調査したりする際に有効です。ただし、ビルドスキャンはDevelocity(旧Gradle Enterprise)に関連する機能であり、利用条件を事前に確認する必要があります。無料のパブリックビルドスキャン対象外の場合もあるため、組織のポリシーに従って使用しましょう。
バージョン確認とプロファイリング
トラブルシューティングの第一歩として、環境情報の確認が重要です。gradle -v(--version)でGradleのバージョン、Groovy/Kotlinのバージョン、JVM、OSの情報を確認できます。実行環境を表示した上でタスクを続行したい場合はgradle -V(--show-version)を使用します。また、ビルドのパフォーマンスを分析したい場合はgradle --profileを実行すると、タスクごとの実行時間を分析したHTMLレポートがbuildDir/reports/profileに生成されます。どのタスクが時間を消費しているかを特定し、ビルド高速化の手がかりを得られます。プロジェクト構造やタスクの詳細はgradle tasks --all、gradle projects、gradle dependenciesでも確認できます。
Gradle実行時の注意点!Daemonの仕組みとタスク管理・Eclipse連携
Gradle Daemonの仕組みと制御
Gradleは3.0以降、Daemon(デーモン)がデフォルトで有効です。Daemonはビルド実行用のJVMを常駐させ、毎回JVMとGradleのクラスを初期化するコストを省くことで、後続ビルドを高速化します。Daemonの状態はgradle --statusで確認でき、安全に停止するにはgradle --stopを使用します。kill -9などによる強制終了はレジストリが壊れる可能性があるため避けるべきです。Daemonのアイドルタイムアウトはgradle.propertiesのorg.gradle.daemon.idletimeoutプロパティで指定でき、単位はミリ秒です。デフォルトは約3時間とされていますが、IDE経由で起動したDaemonは異なるタイムアウトが適用される場合があります。CI環境などでDaemonを無効化したい場合は--no-daemonを指定します。ただし、continuous build(-t)は--no-daemonでは動作しません。
Javaアプリの実行(runタスクとJavaExec)
Javaアプリをコマンドラインから実行するには、Application Pluginを適用してgradle runを使用します。ビルドスクリプトにmainクラスを設定します。
plugins {
id "application"
}
application {
mainClass.set("com.example.MainClass")
}
mainメソッドへ引数を渡すにはgradle run --args="引数1 引数2"のように、全引数を単一のダブルクォート文字列で指定します。Application Pluginを使わない場合は、JavaExecタスクタイプをビルドスクリプトに定義する方法があります。従来のmainClassNameプロパティは非推奨となり、mainClass.set()の使用が推奨されています。Mavenのexec:javaに相当する単一コマンドはGradleにはなく、runタスクかJavaExecタスクが標準的な方法です。
タスク管理と継続的ビルド
Gradleではtasksコマンドでタスク一覧を確認できますが、特定グループのみ表示するgradle tasks --group="build setup"や、特定タスクの詳細を確認するgradle help --task タスク名も便利です。ソースコード変更を監視して自動的にタスクを再実行するcontinuous build(-t、--continuous)も利用できます。これはテストやコード生成など、特定のタスクと組み合わせて使用します。また、マルチプロジェクトでは--parallelによる並列ビルド、--max-workers=Nによるワーカー数指定も可能です。Eclipseとの連携については、GradleプロジェクトをEclipseにインポートする際、Buildshipプラグインが標準的に使用されます。ビルドスクリプトの依存関係をEclipseのクラスパスと同期させるにはgradle eclipseタスクが利用できます。
要点:Daemonはデフォルト有効でビルドを高速化する。停止はgradle --stopを使う。Javaアプリ実行はApplication Pluginのrunタスクが標準。
まとめ
よくある質問
Q: Gradleとは何ですか?
A: GradleはJavaなどのJVMプロジェクトで利用できるビルド自動化ツールです。ソースコードのコンパイル、テスト実行、依存関係の管理、JARファイルなどのパッケージングといった一連の処理を自動化できます。
Q: Gradleでビルドを実行する基本的なコマンドは?
A: プロジェクトのルートディレクトリで `gradle build` コマンドを実行します。Gradle Wrapperが用意されているプロジェクトでは、`./gradlew build`(Windowsの場合は `gradlew.bat build`)を使用するのが公式推奨です。
Q: Gradleで特定のテストだけを実行するには?
A: `gradle test –tests “パッケージ名.テストクラス名”` のように、`–tests` オプションでテストをフィルタリングできます。ワイルドカード(*)も利用可能です。
Q: Gradleでテストをスキップしてビルドするには?
A: `gradle build -x test` のように、`-x`(または `–exclude-task`)オプションで `test` タスクを除外します。これにより、テストを実行せずにビルドできます。
Q: Gradleのデバッグに役立つオプションは?
A: スタックトレースを出力する `–stacktrace`(-s)、詳細なログを出力する `–info`(-i)、ビルドスキャンを作成する `–scan` などがあります。エラーの原因調査に役立ちます。
