Skip to content
Latchkey

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のバージョンを固定します。

Common Gradle commands
# build and test using the project-pinned wrapper
./gradlew build

# run a specific task
./gradlew :app:assembleRelease

CI/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のバージョンを使います。

関連ガイド