対象ファイル
build.gradle
はじめに
前回は環境設定ファイルである application.properties を読んだ。
今回はプロジェクトのビルド構成や依存関係(Dependencies)を管理する build.gradle を追っていく。
Java 17 環境をベースに、Spring Boot Web アプリケーションの実行環境や、JSP をレンダリングするために必要な tomcat-embed-jasper モジュールがどのように組み込まれているかを整理してみた。
build.gradle(ビルド設定ファイル)
プラグイン、JDK バージョン、リポジトリ、外部ライブラリを定義する設定ファイルだ。
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
ビルドと依存関係の処理フロー(Build & Dependency Flow)
-
プラグインのロードと環境初期化
Spring Boot プラグインおよび Dependency Management プラグインをロードし、mavenCentral()リポジトリからライブラリを自動取得する準備を行う。 -
Java 17 ツールチェーンの設定
JavaLanguageVersion.of(17)を通じて、ローカル環境の Java バージョンと一貫性を維持する JDK 17 実行環境を構成する。 -
Web および JSP モジュールの依存関係解決
Web アプリ構築用のspring-boot-starter-webと、JSP ファイルのコンパイルに必要なtomcat-embed-jasperを準備する。 -
開発利便性およびテスト環境の準備
コード変更時の自動再起動をサポートするspring-boot-devtoolsと、JUnit Platform ベースのテスト環境を構成する。
気になった部分・改善ポイント
設定内容を読んでいて、いくつか改善できそうなポイントが気になった。
1. JSP 依存関係(tomcat-embed-jasper)のスコープ設定
// 変更前:全環境(本番含む)でビルドに含まれる設定
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
// 改善案:JSP は開発・サーブレットコンパイル用として限定する
providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
Spring Boot のデフォルト Web スターターには JSP エンジンが含まれていないため tomcat-embed-jasper が必要だが、本番環境で Executable WAR/JAR として配備する際は providedRuntime を使うことで、内蔵サーバーとの競合を避けてビルドサイズも最適化できる。
2. DevTools のキャッシュ無効化設定
devtools を導入していても、JSP や静的リソースのキャッシュが効いていると変更が即座に反映されない場合がある。
// 改善案:application.properties にキャッシュオフの設定を追加する
spring.devtools.restart.enabled=true
spring.thymeleaf.cache=false
server.servlet.jsp.init-parameters.development=true
ビルド設定だけでなく、プロパティ設定と合わせて運用することでホットリロードの利便性がさらに向上する。
3. Gradle のバージョン管理と記述の一貫性
plugins ブロックでバージョンを直接記述しているが、将来的にマルチプロジェクト化したりライブラリが増えた際に管理が煩雑になる可能性がある。
// 改善案:libs.versions.toml(Version Catalogs)を活用した統一管理
// gradle/libs.versions.toml でバージョンを一元管理する設計へ移行する
構成要素のまとめ
| ブロック / 設定項目 | 設定値および内容 | 役割および動作説明 |
|---|---|---|
plugins |
org.springframework.boot 等 |
Spring Boot のビルドタスクおよびバージョン自動管理機能を適用 |
java.toolchain |
JavaLanguageVersion.of(17) |
プロジェクトで使用する JDK バージョンを 17 に固定 |
repositories |
mavenCentral() |
ライブラリを自動ダウンロードする中央リポジトリを指定 |
implementation |
spring-boot-starter-web |
Spring MVC や 内蔵 Tomcat などの Web 核心モジュールを一括追加 |
implementation |
tomcat-embed-jasper |
JSP テンプレートをコンパイルしてサーブレットへ変換する JSP エンジン |
developmentOnly |
spring-boot-devtools |
コード変更時のホットリロード機能を提供 |
testImplementation |
spring-boot-starter-test |
Controller や Web 層のテスト用ライブラリを提供 |
今回学んだこと
- Spring Boot で JSP を使うには
tomcat-embed-jasperの明示的な追加が必須であること -
providedRuntimeを活用することで、開発環境と本番環境のビルド最適化が図れること - Java Toolchain や DevTools を組み合わせることで、開発効率と環境の一貫性を高められること
次は実際の JSP 画面ファイルや静的リソース構造の確認に進んでいきたい。