Gradleとは?柔軟なJVMビルドツールを解説
GradleはJVMおよびAndroidプロジェクト向けの柔軟なbuildツールで、buildをタスクのグラフとしてモデル化し、高速でインクリメンタルなrebuildのために結果をcacheします。
Gradleは規約とプログラム可能なbuildを組み合わせ、GroovyまたはKotlinのスクリプトでプロジェクトのbuild方法を記述します。Androidの標準であり、インクリメンタルなbuildと強力なcacheシステムのおかげでMavenの人気ある代替となっています。
Gradleとは
GradleはJVM言語 (Java、Kotlin、Scala)、Android、そしてそれ以外に向けたbuild自動化ツールです。buildはbuild.gradle (Groovy) またはbuild.gradle.kts (Kotlin) で定義し、plugin、依存関係、タスクを宣言します。依存関係はMaven互換のリポジトリから取得します。
タスクグラフとbuild cache
Gradleはbuildをタスクの有向グラフとしてモデル化します。inputとoutputを追跡するため、変更のないタスクはスキップされ (インクリメンタルなbuild)、以前に計算されたoutputはローカルまたはリモートのbuild cacheから再利用できます。長時間生きるGradleのdaemonが呼び出し間でJVMを温かく保ち、繰り返しのbuildをさらに高速化します。
使用例
wrapperスクリプトがプロジェクトごとにGradleのバージョンを固定します。
# build and test using the project-pinned wrapper
./gradlew build
# run a specific task
./gradlew :app:assembleReleaseCI/CDでの役割
CIでは、「./gradlew build」がコンパイル、test、成果物の組み立てを行います。wrapperを使うことでどこでも同じGradleのバージョンが保証されます。build cacheと依存関係cacheが大きなCIのてこです。温まったGradleのcacheは、数分かかるbuildを数秒に変えられます。daemonとcacheは永続化の恩恵を受けるため、これらのbuildは、温まったcacheと不安定なダウンロードに対する自動リトライを備えたマネージドrunnerで目に見えて速く実行されます。
代替ツール
Mavenは、予測可能性のために一部のチームが好む、より厳格で規約主導なモデルを提供します。Bazelは厳格なhermeticityを持つ巨大な多言語monorepoにスケールします。Gradleは、buildの柔軟性、インクリメンタル性、cacheが重要な場面で好まれ、Androidのデフォルトです。
重要なポイント
- Gradleはbuildを、cacheされインクリメンタルなタスクのグラフとしてモデル化します。
- build cacheとdaemonにより、繰り返しのbuildが格段に速くなります。
- wrapper (./gradlew) を使い、CIとローカルで同じGradleのバージョンを使います。