
こんにちは。先日、プロジェクトのビルド基盤を最新の Java 25 (LTS) と Kotlin 2.3 へと一気に引き上げ、あわせて pom.xml の大掃除を行いました。
最新の言語機能を取り入れるだけでなく、マルチモジュール構成における「設定の重複」を排除したことで、保守性が格段に向上しました。その詳細を共有します。
1. なぜやったのか(背景)
Java 25 という新たな LTS(長期サポート)版が登場したことを受け、プロジェクトのランタイムを最新化することを決断しました。
これまでの課題:
- 設定の散乱: 各モジュールの
pom.xmlに似たようなコンパイラ設定が重複し、変更が漏れやすい。 - ビルド速度: プロジェクトが大きくなるにつれ、フルビルドの待ち時間が開発のボトルネックになっていた。
- 最新機能への追従: Java 25 の最新の最適化や、Kotlin 2.3 の新機能をフルに活用したい。
2. Java 25 と Kotlin の足並みを揃える
単にバージョンを上げるだけでなく、Java と Kotlin が矛盾なく動作するよう、ルート POM の <properties> で一元管理を行いました。
<properties> <java.version>25</java.version> <kotlin.version>2.3.10</kotlin.version> <kotlin.compiler.languageVersion>2.3</kotlin.compiler.languageVersion> <kotlin.compiler.apiVersion>2.3</kotlin.compiler.apiVersion> <kotlin.compiler.jvmTarget>25</kotlin.compiler.jvmTarget> <kotlin.compiler.incremental>true</kotlin.compiler.incremental> </properties>
プロパティ設定の狙い
これらの設定を「きちんと」定義することには、以下の明確なメリットがあります。
java.version&jvmTarget(25):プロジェクトの「出口(バイトコード)」を Java 25 に固定します。これにより、Java 25 固有の最新の JIT 最適化やメモリ管理の恩恵を Kotlin 側からも最大限に引き出せます。
languageVersion&apiVersion(2.3):Kotlin 2.3 の新しい構文や標準ライブラリの仕様を明示的に指定します。コンパイラをアップデートしても、意図しない文法混在を防ぎ、コードの品質を一定に保ちます。
incremental(true):増分コンパイルを有効化。コードの一部を修正した際の再ビルド時間を劇的に短縮し、開発のサイクルを高速化します。
3. サブモジュールの軽量化:Root POM への集約
今回の修正で最も「見た目」が変わったのが、各サブモジュールの pom.xml です。チームではClean Architectureを意識して、レイヤリングとして(domain, port, rest など)それぞれをモジュールとして切り出し、マルチモジュールの構成を採用しています。
これまで各所で定義していた <repositories> や重複したプロパティ、ビルドプラグインの設定を Root POM へ移管しました。その結果、子モジュールの pom.xml は「そのモジュール特有の依存関係」だけを記述するシンプルかつ美しい形になりました。
4. エコシステムのアップデート
言語基盤の刷新に合わせ、周辺ライブラリも最新の互換バージョンへと引き上げました。
- Ktor 3.4.0: 最新ランタイムでのパフォーマンス向上
- Exposed 0.61.0: 型安全な DB アクセスの安定化
- JUnit 6 / MockK 1.14: 最新のテストフレームワークによる堅牢な検証環境
特に Java 25 のような新しい LTS への移行期には、これらのライブラリ側の対応状況も重要ですが、今回の整理で依存関係の管理がプロパティ 1 つで制御可能になったため、今後の追従も容易になります。
5. まとめ
Java 25 へのアップデートは、単なるバージョンアップ以上の価値をもたらしてくれました。
- 最新 LTS の安心感とパフォーマンス
- Kotlin 2.3 のモダンな機能
- Maven 設定の集約による「管理のしやすさ」
「最新を追い続ける」ことは大変ですが、このようにビルド基盤を整理しておくことで、そのコストを最小限に抑えることができます。ぜひ、皆さんのプロジェクトでも pom.xml の大掃除を検討してみてください!
今回の主なアップデート・ログ
| 項目 | バージョン |
|---|---|
| JDK | 25 (LTS) |
| Kotlin | 2.3.10 |
| Ktor | 3.4.0 |
| Testing | JUnit 6.0.3 / MockK 1.14.9 |
| Exposed | 0.61.0 |