Maven vs Gradle: CIにはどちらのJVM buildツールを?
JVMプロジェクトでは、buildツールがCI時間を支配します。MavenとGradleはそこへ至る、非常に異なる道を取ります。
どちらもJVMプロジェクトをコンパイル、テスト、パッケージ化します。Mavenは宣言的なXMLと規約を用い、Gradleは強力なインクリメンタルbuildとcacheを備えた、プログラム可能なGroovy/Kotlin DSLを用います。
| Maven | Gradle | |
|---|---|---|
| 設定 | XML (pom.xml)、宣言的 | Groovy/Kotlin DSL、プログラム可能 |
| インクリメンタルbuild | 限定的 | 強力 (taskレベル) |
| build cache | ローカルリポジトリのみ | ローカル + リモートのbuild cache |
| 大規模buildでの速度 | より遅い | しばしばより速い (cache、daemon) |
| 学習曲線 | 低い | 高い |
CIにおいて
Gradleのインクリメンタルbuildとbuild cache (ローカルおよびリモート) は、大規模なマルチモジュールプロジェクトでリビルド時間を劇的に削減でき、多くの大規模コードベースがGradleを好む理由です。Mavenはよりシンプルで予測しやすく、その規約優先の設定モデルは理解しやすいものです。Gradleのdaemonはローカルでは役立ちますが、エフェメラルなCIランナーでは効果が小さくなります。
CIでcacheする
Mavenでは ~/.m2/repository を、Gradleでは ~/.gradle/caches を、buildファイルとlockfileでキー付けしてcacheしましょう。Gradleでは、CI job間で共有されるリモートのbuild cacheが、単一で最大の高速化です。
結論
速度が重要な大規模またはポリグロットのbuild: Gradle、特にリモートのbuild cache付き。よりシンプルなプロジェクトや規約を重んじるチーム: Maven。CIを速く保つために、どちらでも依存関係をcacheしましょう。
関連ガイド
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…
How to Speed Up GitHub Actions: 9 High-Impact TacticsMake GitHub Actions faster: caching, parallelization, test splitting, Docker layer caching, slimmer images, a…
GitHub Actions Cost Calculator - Estimate & Cut Your CI BillFree GitHub Actions cost calculator: enter your monthly CI minutes and runner size to see your current bill a…