Maven と Gradle
Maven と Gradle とは
Maven と Gradle は、Java プロジェクトの「ビルド」と「依存関係管理」を自動化するツールである。ビルドとは、ソースコードをコンパイルし、テストを実行し、実行可能なファイル(JAR / WAR)を生成する一連の処理を指す。依存関係管理とは、プロジェクトが利用する外部ライブラリ(Spring、MyBatis 等)をインターネット上のリポジトリから自動的にダウンロードし、プロジェクトに組み込む仕組みのことである。
なぜ SIer で重要か
SIer の Java プロジェクトでは、数十〜数百のライブラリを利用することが当たり前であり、これらを手動で管理することは現実的ではない。ビルドツールはプロジェクトの構成を定義し、チームメンバー全員が同じ手順でビルドできることを保証する。プロジェクトに参加したらまず pom.xml(Maven)や build.gradle(Gradle)を読むことになるため、ビルドツールの基礎知識は必須である。
基本概念
Maven
Maven は 2004 年に Apache Software Foundation からリリースされたビルドツールである。XML 形式の pom.xml(Project Object Model)にプロジェクトの設定を記述する。
<!-- pom.xml の基本構造 -->
<project>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
</project>
Maven の特徴は「規約ベース(Convention over Configuration)」であることだ。ディレクトリ構成(src/main/java、src/test/java 等)やビルドの流れが標準で決まっており、設定ファイルに余計な記述をしなくても規約に従うだけで動作する。
Gradle
Gradle は 2012 年に登場した比較的新しいビルドツールで、Groovy または Kotlin で記述する build.gradle(または build.gradle.kts)にプロジェクトの設定を記述する。
// build.gradle の基本構造
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
}
group = 'com.example'
version = '1.0.0'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Gradle は Maven と比較して記述量が少なく、ビルドスクリプトにロジックを書ける柔軟性がある。ビルド速度も Maven より高速で、特にインクリメンタルビルド(変更された部分だけ再ビルド)やビルドキャッシュの仕組みが優れている。
Maven と Gradle の比較
| 観点 | Maven | Gradle |
|---|---|---|
| 設定ファイル | pom.xml(XML) | build.gradle(Groovy / Kotlin) |
| 記述量 | 多い(XML の冗長さ) | 少ない |
| 柔軟性 | 規約ベースで制約が強い | スクリプトでカスタマイズしやすい |
| ビルド速度 | 標準的 | 高速(キャッシュ・インクリメンタルビルド) |
| 学習コスト | 低い(決まったルールに従うだけ) | やや高い(Groovy / Kotlin の知識が必要) |
| SIer での採用率 | 高い | 増加傾向だが Maven が依然として主流 |
依存関係管理の仕組み
Maven も Gradle も、外部ライブラリを Maven Central Repository というインターネット上の公開リポジトリから自動でダウンロードする。ライブラリは groupId(組織名)、artifactId(ライブラリ名)、version(バージョン番号)の 3 つで一意に識別される。この仕組みにより、チームメンバー全員が同じバージョンのライブラリを使うことが保証される。
SIer のプロジェクトでは、セキュリティ上の理由からインターネットに直接アクセスできない環境も多い。その場合、社内に プライベートリポジトリ(Nexus、Artifactory 等)を立て、そこを経由してライブラリを取得する構成が一般的である。
ビルドライフサイクル
Maven のビルドは以下のフェーズを順番に実行する。Gradle も同様の概念を持つ。
| フェーズ | 処理内容 |
|---|---|
| compile | ソースコードをコンパイルする |
| test | ユニットテストを実行する |
| package | JAR / WAR ファイルを生成する |
| verify | 品質チェック(静的解析等)を実行する |
| install | ローカルリポジトリにアーティファクトを配置する |
| deploy | リモートリポジトリにアーティファクトをアップロードする |
たとえば mvn package を実行すると、compile → test → package がこの順番で自動的に実行される。
SIer での使われ方
Maven が主流の理由
SIer のプロジェクトでは Maven が依然として広く使われている。その理由は以下の通りである。
- 枯れた技術への信頼: Maven は 20 年以上の実績があり、動作が安定している。SIer は「枯れた技術」を好む傾向がある
- 規約ベースの統一性: プロジェクトの構成が標準化されているため、異なるプロジェクトに異動しても構成が同じで理解しやすい
- 既存資産の蓄積: 過去のプロジェクトで作成された
pom.xmlやビルド手順書がそのまま流用できる
Gradle の採用が増えている領域
一方で、Android アプリ開発では Gradle が事実上の標準であり、Spring Boot の公式でも Gradle のサポートが充実しているため、新規プロジェクトで Gradle を採用するケースも増えている。
まとめ
- Maven と Gradle は Java プロジェクトのビルドと依存関係管理を自動化するツールである
- Maven は XML ベースの規約重視、Gradle は Groovy / Kotlin ベースの柔軟性重視という特徴がある
- SIer の現場では Maven が依然として主流だが、Gradle の採用も増えている
- 依存関係は Maven Central Repository から自動取得され、チーム全体で同じライブラリバージョンを保証する
- プロジェクトに参加したらまず
pom.xmlまたはbuild.gradleを確認し、プロジェクト構成を把握することが重要