はい、承知いたしました。Java開発者向けに、将来登場が予測される「Spring Boot 4」の主要な変更点と移行のポイントについて、約5000語の詳細な解説記事を作成します。
Java開発者必見!Spring Boot 4 の主要な変更点と移行のポイント
はじめに
Javaエコシステムにおいて、Spring Bootはアプリケーション開発のデファクトスタンダードとしての地位を確立しています。その進化は止まることを知らず、Spring Boot 3の登場はJakarta EEへの移行、GraalVMネイティブイメージの正式サポートなど、大きな変革をもたらしました。そして今、私たちは次のメジャーバージョンである「Spring Boot 4」の足音を心待ちにしています。
【重要】
本記事は、2024年時点での技術動向、Javaエコシステムの進化、そしてSpringコミュニティの議論を基に、将来リリースされるであろう架空のバージョン「Spring Boot 4」の姿を予測し、その詳細を解説するものです。記載されている内容は公式発表ではなく、あくまで技術的な予測に基づいている点にご留意ください。
この記事の目的は、Java開発者の皆様が来るべきSpring Boot 4の時代に備え、その核心的な変更点を理解し、既存アプリケーションからのスムーズな移行計画を立てるための一助となることです。Spring Boot 2.xや3.xでの開発経験を持つ方を主な対象読者とし、技術的な背景から具体的な移行手順、そして新機能を最大限に活用するためのベストプラクティスまでを網羅的に解説します。
クラウドネイティブ、リアクティブプログラミング、そして開発者体験の向上が加速する現代において、Spring Boot 4はどのような進化を遂げるのでしょうか。さあ、未来のSpring Bootの世界へ旅立ちましょう。
第1章: Spring Boot 4の核心的コンセプト
Spring Boot 4は、単なるバージョンアップに留まらず、近年のソフトウェア開発における大きな潮流を反映した、いくつかの核心的なコンセプトに基づいて設計されると予測されます。これらのコンセプトを理解することが、Spring Boot 4をマスターするための第一歩となります。
1.1. クラウドネイティブへの完全なる最適化
Spring Boot 3で本格化したクラウドネイティブへの対応は、Spring Boot 4でさらに深化し、完成の域に達するでしょう。
-
GraalVMネイティブイメージの成熟:
Spring Boot 3で導入されたAOT (Ahead-Of-Time) コンパイルとネイティブイメージサポートは、起動時間の短縮とメモリ消費量の削減という劇的な効果をもたらしました。Spring Boot 4では、このサポートがさらに成熟します。ビルドプロセスのさらなる高速化、リフレクションやプロキシ設定の自動検出精度の向上により、開発者は特別な設定を意識することなく、JVMモードとほぼ同じ感覚でネイティブイメージを生成できるようになるでしょう。ネイティブイメージに特化したヘルスチェックやメトリクスなど、運用面でのサポートも強化されることが期待されます。 -
サーバーレスアーキテクチャとの親和性向上:
AWS LambdaやAzure Functionsといったサーバーレス環境では、コールドスタートの速さが重要です。ネイティブイメージによる超高速起動は、サーバーレスとの相性が抜群です。Spring Boot 4では、spring-cloud-function
などのフレームワークがコアにさらに深く統合され、各FaaS (Function as a Service) プラットフォームへのデプロイがより一層簡素化されるでしょう。アダプタ層が薄くなり、プラットフォーム固有の機能(イベントソースマッピングなど)をアノテーションベースで直感的に設定できるようになる可能性があります。 -
コンテナ化の最適化:
DockerやKubernetesでの利用はもはや標準です。Spring Boot 4では、ビルドパックによるコンテナイメージ作成がさらに洗練されます。より軽量なベースイメージ(Distrolessなど)がデフォルトで採用され、レイヤードJARの構造も依存関係の変更頻度に応じてさらに細かく最適化されるでしょう。これにより、CI/CDパイプラインにおけるイメージのビルドとプッシュ時間が短縮され、ストレージコストの削減にも繋がります。
1.2. 仮想スレッド (Project Loom) の標準化
Java 21で正式機能となった仮想スレッド(Virtual Threads)は、スレッドあたりのオーバーヘッドを劇的に削減し、スループットを向上させる画期的な機能です。Spring Boot 4は、この仮想スレッドをフレームワークの中心に据える最初のメジャーバージョンとなるでしょう。
従来の「1リクエスト1プラットフォームスレッド」モデルから、「1リクエスト1仮想スレッド」モデルへの移行がデフォルトになる可能性があります。これにより、開発者は複雑な非同期プログラミング(CompletableFuture
やリアクティブスタック)を意識することなく、シンプルで直感的なブロッキングスタイルのコードを書くだけで、高いスケーラビリティを実現できるようになります。Spring Boot 4は、TomcatやJettyといった組み込みサーブレットコンテナ、JDBCドライバ、RestClient
など、フレームワークのあらゆる箇所で仮想スレッドを最大限に活用するための設定を自動で行うようになります。
1.3. 開発者体験 (Developer Experience) の再定義
Springの哲学の中心には、常によい開発者体験(DX)があります。Spring Boot 4は、この哲学をさらに推し進めます。
-
究極の規約による設定 (CoC):
Spring Boot 4は、より多くの設定をインテリジェントに自動化します。例えば、クラスパスに存在するライブラリや環境変数(クラウド環境の認証情報など)を検知し、データソース接続やメッセージキュー設定などを完全に自動で構成する機能が強化されるでしょう。開発者はapplication.properties
に記述する定型的な設定から解放され、ビジネスロジックの実装に集中できます。 -
DevToolsの進化:
ライブリロード機能を提供するDevToolsは、仮想スレッドやネイティブイメージ開発との連携を深めます。変更されたクラスの差分リロードがさらに高速化され、開発サイクルが短縮されます。また、Testcontainersとの統合により、開発環境でローカルデータベースや外部サービスをDockerコンテナとして簡単に起動・管理できるようになり、本番環境に近い状態での開発が容易になります。 -
宣言的で直感的なAPI:
Spring Framework 6で導入されたRestClient
やJdbcClient
のようなモダンで宣言的なクライアントAPIの採用がさらに推進されます。これにより、RestTemplate
やJdbcTemplate
といった従来の命令的なAPIは徐々にフェードアウトし、より流暢で読みやすいコードを書くことが標準となります。
1.4. セキュリティ・バイ・デフォルトの徹底
セキュリティはもはやオプションではありません。Spring Boot 4は、最初から安全な状態(Secure by Default)をこれまで以上に徹底します。
-
より安全なデフォルト設定:
例えば、Actuatorのエンドポイントはデフォルトでセキュアなもの以外は公開されなくなり、公開する場合も明示的な設定が必須となります。また、開発環境で便利なspring.jpa.hibernate.ddl-auto
のような本番環境では危険なプロパティは、特定のプロファイル(例:dev
)でのみ有効になるなど、誤用を防ぐ仕組みが導入されるでしょう。 -
依存関係の脆弱性管理:
ソフトウェアサプライチェーンセキュリティの重要性が高まる中、Spring Boot 4はSBOM (Software Bill of Materials) の生成を標準でサポートする可能性があります。これにより、アプリケーションが使用しているすべての依存関係のリストとバージョンを簡単に把握し、脆弱性スキャンツールとの連携が容易になります。
第2章: 主要な変更点 (詳細解説)
Spring Boot 4がもたらすであろう具体的な変更点を、技術的な背景と共に詳しく見ていきましょう。
2.1. Javaバージョンの要件: Java 21 LTSがベースラインに
Spring Boot 3がJava 17をベースラインとしたように、Spring Boot 4はJava 21 LTSを新たなベースラインとして要求することが確実視されます。これにより、Springフレームワーク自体がJava 21の強力な新機能をフル活用できるようになります。
-
仮想スレッド (Virtual Threads):
前述の通り、これはSpring Boot 4の目玉機能です。TaskExecutor
の実装が仮想スレッドベースのものに切り替わり、@Async
アノテーションを付けたメソッドなどが、プラットフォームスレッドを消費することなく軽量に実行されるようになります。 -
レコードパターン (Record Patterns) と パターンマッチング for switch:
Springフレームワーク内部のコードが、これらの機能を使ってより簡潔で安全なものにリファクタリングされます。開発者も、例えば@ConfigurationProperties
でバインドされたレコードクラスをパターンマッチングで扱うなど、モダンなJavaの記法を享受できます。 -
スコープ付き値 (Scoped Values):
仮想スレッド環境下でThreadLocal
を使用すると、意図しないメモリリークやデータの不整合を引き起こす可能性があります。ScopedValue
は、これを代替する不変で安全なデータ共有メカニズムです。Spring SecurityのSecurityContextHolder
や、分散トレーシングのコンテキスト伝播などが、内部的にScopedValue
を使用するように変更されるでしょう。
2.2. Spring Framework 7 へのバージョンアップ
Spring Boot 4は、基盤となるSpring Framework 7上に構築されます。Spring Framework 7は、Java 21の機能を深く取り込み、パフォーマンスと開発効率を新たなレベルに引き上げます。
-
コアコンテナの最適化:
AOT処理がさらに洗練され、アプリケーションコンテキストの起動時間がJVMモードであっても短縮されます。また、仮想スレッドを前提としたDIコンテナの内部ロック機構の見直しなど、高並行処理下でのパフォーマンスが改善されます。 -
Spring AOPの進化:
AOPプロキシの生成がより効率的になり、特にネイティブイメージ環境下でのオーバーヘッドが削減されます。また、仮想スレッド環境でのアドバイス(Advice)実行時のスレッドセーフティに関する改善も期待されます。
2.3. 仮想スレッド (Project Loom) の全面的なサポート
Spring Boot 4では、仮想スレッドの利用がオプションから標準へと変わる可能性があります。
-
デフォルトでの有効化:
application.properties
にspring.threads.virtual.enabled=true
と書くだけで、アプリケーション全体が仮想スレッドの恩恵を受けられるようになります。Tomcatなどの組み込みWebサーバーは、リクエストを処理するために仮想スレッドを自動的に使用します。 -
ブロッキング処理の変革:
これまでパフォーマンスのボトルネックとされてきた、JDBCによるデータベースアクセス、RestClient
による外部API呼び出し、メッセージキューへの送受信といったブロッキングI/O処理が、仮想スレッド上で実行されることでプラットフォームスレッドをブロックしなくなります。これにより、WebFluxのようなリアクティブスタックを使わなくても、非常に高いスループットを達成できます。“`java
// Spring Boot 4では、このシンプルなブロッキングコードが
// 内部的に仮想スレッドで実行され、高いスケーラビリティを発揮する
@RestController
public class MyController {private final JdbcClient jdbcClient; private final RestClient restClient; // ... constructor @GetMapping("/data") public Map<String, Object> getCombinedData() { // このDBアクセスはプラットフォームスレッドをブロックしない String dbData = jdbcClient.sql("SELECT data FROM my_table WHERE id = 1") .query(String.class) .single(); // このHTTP呼び出しもプラットフォームスレッドをブロックしない ExternalApiResponse apiResponse = restClient.get() .uri("https://api.example.com/data") .retrieve() .body(ExternalApiResponse.class); return Map.of("dbData", dbData, "apiData", apiResponse); }
}
“` -
リアクティブスタックとの共存:
仮想スレッドの登場により、「すべてのI/Oをリアクティブにすべきか?」という議論が再燃します。Spring Boot 4は、両者の使い分けのための明確なガイダンスを提供するでしょう。大量のストリーミングデータ処理や、イベントドリブンなアーキテクチャではリアクティブスタック(WebFlux, R2DBC)が依然として強力な選択肢であり、一方で、従来型のRequest/Responseモデルのアプリケーションでは、仮想スレッドを利用したシンプルな命令形プログラミングが主流になると考えられます。
2.4. 設定プロパティの変更と廃止
メジャーバージョンアップは、設定プロパティを見直し、整理する絶好の機会です。
-
一貫性の向上:
server.*
,spring.data.*
,management.endpoints.*
のようなプロパティのプレフィックスが、より直感的で一貫性のある体系に再編成される可能性があります。 -
安全でないデフォルト値の変更:
spring.jpa.hibernate.ddl-auto
のデフォルト値がvalidate
やnone
になる、あるいは本番プロファイルではエラーになるなど、偶発的なデータ損失を防ぐ変更が加えられるでしょう。 -
非推奨プロパティの削除:
Spring Boot 3.xで非推奨(deprecated)とマークされていたプロパティは完全に削除されます。移行時にはspring-boot-properties-migrator
モジュールが必須のツールとなります。
2.5. Spring Security 7 の統合
セキュリティ設定は、Spring Boot 4でさらに宣言的で安全になります。
-
Lambda DSLの標準化:
Spring Security 6で導入されたHttpSecurity
のLambda DSLが、唯一の推奨される設定方法となります。古いand()
で繋ぐチェーン形式の設定方法は完全に削除されるでしょう。“`java
// Spring Boot 4 スタイルのセキュリティ設定
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .requestMatchers("/api/admin/**").hasRole("ADMIN") .requestMatchers("/api/user/**").hasAnyRole("USER", "ADMIN") .requestMatchers("/", "/public/**").permitAll() .anyRequest().authenticated() ) .formLogin(Customizer.withDefaults()) .oauth2Login(Customizer.withDefaults()); return http.build(); }
}
“` -
より強力なパスワードエンコーディング:
パスワードのハッシュ化アルゴリズムのデフォルトが、BCrypt
からより推奨されるArgon2
に変更される可能性があります。 -
OAuth 2.1 / OpenID Connect サポートの強化:
最新のOAuth 2.1仕様に準拠するための変更が加えられ、PKCE (Proof Key for Code Exchange) がデフォルトで有効になるなど、よりセキュアなクライアント実装が容易になります。
2.6. オブザーバビリティ (Observability) の標準化
アプリケーションの監視は、現代の運用において不可欠です。Spring Boot 4は、オブザーバビリティ(可観測性)をフレームワークの第一級市民として扱います。
-
Micrometer 2.x と OpenTelemetry:
Micrometerのメジャーバージョンアップに伴い、APIが整理されます。また、分散トレーシング、メトリクス、ロギングを統合的に扱う標準仕様であるOpenTelemetry (OTel) のサポートがコア機能として組み込まれます。management.tracing.enabled=true
を設定するだけで、Micrometer TracingがOTelと連携し、特別な設定なしに分散トレーシングが機能するようになるでしょう。 -
自動計装の範囲拡大:
JDBC、HTTPクライアント、メッセージングといった主要なコンポーネントだけでなく、より多くのライブラリ(キャッシュ、タスクスケジューラなど)が自動で計装され、詳細なパフォーマンスメトリクスやトレース情報が収集されるようになります。
第3章: Spring Boot 3.x から 4.0 への移行ガイド
メジャーバージョンアップには移行作業が伴います。しかし、計画的に進めることで、その負担を最小限に抑えることができます。
3.1. 移行の前提条件
Spring Boot 4.0への移行を開始する前に、以下の準備を整えておくことが強く推奨されます。
-
Java 21へのアップグレード:
まず、現在のアプリケーションをJava 21で問題なくビルド・実行できるようにします。JDKを切り替え、コンパイルエラーやテストの失敗がないかを確認します。 -
Spring Boot 3.xの最新バージョンへのアップデート:
Spring Boot 3.x系の最新マイナーバージョン(例: 3.9.x)にアップデートします。最新バージョンには、将来のメジャーバージョンアップを容易にするための非推奨警告や互換性に関するヒントが含まれていることが多いです。 -
非推奨APIの撲滅:
コード内で使用している非推奨のクラスやメソッドをすべて洗い出し、代替APIに置き換えます。IDEの警告や静的解析ツールを活用して、漏れなく対応しましょう。この作業を事前に行っておくことで、Spring Boot 4に切り替えた際のコンパイルエラーを大幅に減らすことができます。
3.2. ステップ・バイ・ステップの移行手順
準備が整ったら、以下の手順で移行作業を進めます。
ステップ1: ビルドファイルのバージョン更新
Maven (pom.xml
) または Gradle (build.gradle
) のSpring Boot親バージョンの定義を 4.0.0
(またはその時点での最新バージョン) に変更します。
-
Maven (
pom.xml
):
xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!-- <version>3.2.5</version> -->
<version>4.0.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> -
Gradle (
build.gradle.kts
):
kotlin
plugins {
id("org.springframework.boot") version "4.0.0"
id("io.spring.dependency-management") version "1.1.5"
// ...
}
ステップ2: コンパイルエラーの解決
バージョンを更新した後、プロジェクトをリビルドすると、多くのコンパイルエラーが発生するはずです。これらは主に、削除されたAPIやシグネチャが変更されたメソッドに起因します。
- 削除されたクラス/メソッド: Spring Boot 3.xで非推奨だったものが中心です。公式の移行ガイドやリリースノートを参照し、推奨される代替方法に置き換えます。
- パッケージ名の変更: Spring Boot 3.0での
javax.*
からjakarta.*
への移行ほど大規模な変更はないと予測されますが、一部のクラスが再編成される可能性はあります。IDEのインポート整理機能を活用しましょう。
ステップ3: 設定プロパティの更新
アプリケーションを起動しようとすると、不明なプロパティに関するエラーが発生することがあります。
spring-boot-properties-migrator
を依存関係に追加します。
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
このライブラリは、起動時に古いプロパティを検知し、新しいプロパティ名をログに出力してくれるため、application.properties
やapplication.yml
の修正作業が大幅に楽になります。
ステップ4: Spring Security設定の見直し
Spring Securityの設定は、Lambda DSLへの完全移行が必須となるでしょう。古い形式の設定が残っている場合は、コンパイルエラーになるか、正しく動作しなくなります。第2章で示した新しいスタイルに書き換える必要があります。
ステップ5: テストコードの修正
アプリケーションコードと同様に、テストコードも修正が必要です。特に、@SpringBootTest
を使用したテストで、モック関連のAPI(@MockBean
など)やテスト用の設定プロパティ(@TestPropertySource
)に変更が入る可能性があります。テストユーティリティクラスが削除・変更されている場合もあるため、注意深く確認します。
ステップ6: 起動と動作確認
すべてのコンパイルエラーと設定の問題を解決したら、アプリケーションを起動します。
- 起動ログを注意深く確認し、予期せぬ
WARN
やERROR
が出ていないかを確認します。 - 主要なAPIエンドポイントや機能が、これまで通りに動作するかを一通り手動でテストします。
- すべての自動テスト(単体テスト、結合テスト)を実行し、パスすることを確認します。
3.3. 移行における一般的な課題と解決策 (トラブルシューティング)
ケース1: 仮想スレッドを有効にしたら予期せぬ動作が発生した
- 症状: メモリ使用量が徐々に増加する、リクエスト間でデータが混ざる、デッドロックが発生する。
- 原因:
ThreadLocal
の不適切な使用が最も疑われます。仮想スレッドは頻繁にプラットフォームスレッドから切り離されるため、ThreadLocal
に設定した値が意図せず残存したり、別のリクエストから見えてしまったりすることがあります。また、synchronized
キーワードを使ったクリティカルセクションが、仮想スレッドをプラットフォームスレッドにピン止めし、スケーラビリティを阻害している可能性もあります。 - 解決策:
ThreadLocal
を使用している箇所を特定し、Java 21のScopedValue
への置き換えを検討します。ScopedValue
は不変であり、特定の処理スコープ内でのみ値が有効なため、より安全です。synchronized
ブロックは、java.util.concurrent.ReentrantLock
に置き換えることを検討します。ReentrantLock
はピン止めを引き起こしません。
ケース2: GraalVMネイティブイメージのビルドに失敗する
- 症状: ネイティブイメージのビルドプロセス中に、リフレクションやリソースに関するエラーで失敗する。
- 原因: Spring AOTプラグインが検出しきれない動的なクラスロード、リフレクション、プロキシ生成などがコード内に存在するためです。サードパーティのライブラリが原因であることも多いです。
- 解決策:
@Reflective
や@RegisterReflectionForBinding
などのアノテーションを使って、リフレクションが必要なクラスを明示的にヒントとして与えます。- プログラム的にヒントを登録するための
RuntimeHintsRegistrar
を実装します。これは、より複雑なケースやライブラリの作者が対応する場合に有効です。 - エラーメッセージを注意深く読み、どのクラスが問題を引き起こしているかを特定することが重要です。
--trace-class-initialization
のようなビルドオプションが役立つこともあります。
ケース3: 依存しているサードパーティライブラリが動作しない
- 症状: アプリケーションは起動するが、特定のライブラリが関わる機能で
ClassNotFoundException
やNoSuchMethodError
が発生する。 - 原因: そのライブラリがSpring Boot 4やSpring Framework 7、Java 21に対応していない可能性があります。
- 解決策:
- ライブラリの公式ドキュメントやGitHubリポジトリを確認し、Spring Boot 4対応バージョンがリリースされているかを確認します。
- 対応バージョンが存在する場合は、
pom.xml
やbuild.gradle
でバージョンを明示的に指定してアップグレードします。 - 対応バージョンがない場合は、代替となるライブラリを探すか、ライブラリのIssueトラッカーに報告して対応を促す必要があります。
第4章: Spring Boot 4 を最大限に活用するためのベストプラクティス
単に移行を完了させるだけでなく、Spring Boot 4のポテンシャルを最大限に引き出すためには、開発スタイルそのものを見直すことが重要です。
4.1. 仮想スレッドを前提とした設計への転換
これまではパフォーマンスのために非同期・ノンブロッキングなコードを書く必要がありましたが、仮想スレッドの登場でその常識が変わります。読みやすく、デバッグしやすい、シンプルなブロッキングスタイルのコードを積極的に採用しましょう。これにより、開発効率とコードの保守性が大幅に向上します。
4.2. 最初からネイティブイメージを意識した開発
プロジェクトの初期段階から、ネイティブイメージでの動作を考慮に入れることが重要です。
- CI/CDパイプラインに、JVMモードでのテストに加えて、ネイティブイメージでのテストを組み込みます。
- リフレクションや動的なクラスロードを多用するライブラリの採用は慎重に検討し、ネイティブ互換性のある代替案を探します。
RuntimeHints
の登録は、後からまとめて行うのではなく、関連する機能を実装した時点で行うようにします。
4.3. Testcontainersによる統合テストの標準化
開発、テスト、本番の環境差をなくすために、Testcontainersを積極的に活用しましょう。PostgreSQL、Redis、Kafkaといった外部サービスを、テスト実行時にDockerコンテナとして起動することで、信頼性の高い統合テストを簡単に記述できます。Spring Boot 4では、Testcontainersとの統合がさらにシームレスになり、@ServiceConnection
アノテーションなどを使うことで、接続設定を一切記述することなくテストを実行できるようになるでしょう。
“`java
@SpringBootTest
@Testcontainers
class MyIntegrationTest {
@Container
@ServiceConnection // これだけでDataSourceの接続情報が自動設定される
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine");
@Autowired
private MyRepository repository;
@Test
void testDatabaseInteraction() {
// ... テストロジック ...
}
}
“`
4.4. 宣言的なHTTPクライアントへの完全移行
RestTemplate
の使用は避け、Spring Framework 6で導入された RestClient
を全面的に採用しましょう。RestClient
は流暢なAPIを提供し、仮想スレッド環境とも親和性が高く、エラーハンドリングも容易です。
まとめ
Spring Boot 4は、Javaエコシステムの大きな進化の波に乗り、クラウドネイティブアプリケーション開発を新たな次元へと引き上げる、画期的なメジャーバージョンとなるでしょう。
その核心は、仮想スレッドの標準化によるスケーラビリティと開発効率の両立、GraalVMネイティブイメージの成熟によるパフォーマンスの最大化、そして開発者体験の徹底的な向上にあります。Java 21をベースラインとすることで、フレームワークは最新の言語機能を活用し、より安全で効率的なものへと進化します。
移行には計画的な準備と作業が必要ですが、本記事で示したステップと解決策を参考にすれば、そのプロセスは決して乗り越えられない壁ではありません。むしろ、この移行は、アプリケーションのアーキテクチャを見直し、モダンな開発プラクティスを取り入れる絶好の機会です。
Spring Boot 4がもたらす変化は、単なる技術的なアップデートではありません。それは、私たちがアプリケーションを設計し、開発し、運用する方法そのものを変革する可能性を秘めています。この変化を恐れず、新しい技術を積極的に学び、活用することで、私たちはより堅牢で、高性能で、保守しやすいシステムを構築できるはずです。
来るべきSpring Boot 4の時代に備え、今から準備を始めましょう。未来のJava開発は、ここから始まります。