# Spring Boot 3.5.6 → 3.5.16 バージョンアップ調査
## 1. 概要
Spring Boot 3.5.6 から 3.5.16 への更新は、同じ 3.5 系内のパッチアップデートです。
大規模な API 移行は想定されませんが、3.5.7〜3.5.16 の累積更新となるため、依存ライブラリの更新や不具合修正によって、一部の挙動が変わる可能性があります。
特に重点的に確認すべき領域は次のとおりです。
- Jackson による JSON シリアライズ/デシリアライズ
- SSL/TLS のホスト名検証
- Actuator と Spring Security のリクエストマッチング
- 外部設定ファイル、環境変数、プロファイルの優先順位
- Hibernate ORM、Spring Data、DB ドライバー
- Docker、Testcontainers、Buildpacks
- AOT/Native Image
- Kafka、RabbitMQ、Spring Integration などの外部連携
---
## 2. 主な変更内容
### 2.1 依存ライブラリの更新
3.5.6 から 3.5.16 の間で、Spring Framework、Spring Security、Hibernate、Jackson、Tomcat、Netty、Micrometer など、多数の依存ライブラリが更新されます。
代表的な更新例は次のとおりです。
| ライブラリ | 3.5.16 系での主なバージョン |
|---|---:|
| Spring Framework | 6.2.19 |
| Spring Security | 6.5.11 |
| Hibernate ORM | 6.6.53.Final |
| Jackson | 2.21.4 |
| Tomcat | 10.1.55 |
| Jetty | 12.0.36 |
| Netty | 4.1.135.Final |
| Micrometer | 1.15.12 |
| Spring Kafka | 3.3.16 |
| PostgreSQL JDBC | 42.7.11 |
### 想定される影響
- アプリケーション側で固定している依存バージョンとの競合
- `NoSuchMethodError`
- `ClassNotFoundException`
- 推移的依存関係の変化
- 起動時警告の増加
- ライブラリ内部の不具合修正による挙動変化
---
### 2.2 Jackson の更新
Jackson が 2.21 系へ更新されています。
### 影響しやすい箇所
- REST API の JSON リクエスト/レスポンス
- 日付・時刻型
- enum
- Java record
- Kotlin data class
- `@JsonCreator`
- `@JsonTypeInfo`
- Mixin
- 独自 `ObjectMapper`
- 独自 Jackson Module
- GraphQL や WebSocket のメッセージ
- Actuator の JSON レスポンス
### 注意点
JSON の文字列完全一致テストを行っている場合、次の差分も確認してください。
- フィールド順序
- `null` の扱い
- 日付フォーマット
- enum の表現
- 例外メッセージ
- 多態型の型情報
- 不明フィールドの扱い
---
### 2.3 設定ファイルとプロファイル
設定読み込みに関する複数の修正が含まれます。
主な対象は次のとおりです。
- `spring.config.import`
- 外部 `application.properties`
- 外部 `application.yaml`
- 環境変数
- JVM システムプロパティ
- Profile 固有設定
- `spring.main.cloud-platform`
- 親子 ApplicationContext
- AOT/Native Image 実行時の Profile
### 想定される影響
以前の誤った優先順位や読み込み順序に依存していた場合、アップデート後に実際の設定値が変化する可能性があります。
特に次の値は確認が必要です。
- DB 接続先
- 外部 API の URL
- 認証情報の参照先
- タイムアウト
- ログレベル
- Feature Flag
- SSL Bundle
- Kafka/RabbitMQ の接続先
---
### 2.4 Actuator と Spring Security
Actuator の EndpointRequest や HTTP メソッド判定、Health Group などに修正があります。
### 影響しやすい箇所
- 独自 `SecurityFilterChain`
- `EndpointRequest`
- Actuator の公開範囲
- `/actuator/health`
- `/actuator/info`
- `/actuator/env`
- `/actuator/configprops`
- `/actuator/mappings`
- Cloud Foundry 向け Actuator
- CORS
- GET 以外の HTTP メソッド
### 想定される影響
アップデート後に、Actuator エンドポイントへの認可結果が変化する可能性があります。
---
### 2.5 SSL/TLS
SSL/TLS 関連では、ホスト名検証や SSL Bundle の適用に関する修正があります。
### 主な対象
- Java Mail
- RabbitMQ
- Reactor Netty
- GraphQL WebSocket
- Testcontainers の Service Connection
- SSL Bundle
### 想定される影響
開発・検証環境で次のような証明書を利用している場合、接続に失敗する可能性があります。
- 自己署名証明書
- SAN に接続先ホスト名が含まれていない証明書
- CN と接続先ホスト名が一致しない証明書
- 期限切れ証明書
- 不完全な証明書チェーン
---
### 2.6 OAuth2 Resource Server
`spring.security.oauth2.resourceserver.jwt.jws-algorithms` に不正な値を指定した場合の検証が改善されています。
### 確認事項
- JWT の署名アルゴリズム
- Issuer URI
- JWK Set URI
- Audience
- Token 有効期限
- Clock Skew
- 不正署名トークン
- 未対応アルゴリズム
---
### 2.7 Hibernate、Spring Data、DB
Hibernate ORM、Spring Data、Flyway、Liquibase、DB ドライバーが更新されます。
### 影響しやすい箇所
- JPQL
- Native Query
- Criteria API
- EntityGraph
- Lazy Loading
- N+1 問題
- Batch Insert/Update
- 楽観ロック
- 悲観ロック
- Envers
- Flyway
- Liquibase
- DB 方言依存処理
- PostgreSQL、MySQL、Oracle、SQL Server などの固有機能
### 注意点
H2 のみを使用したテストでは、実際の DB との差異を十分に検出できません。
---
### 2.8 Docker、Testcontainers、Buildpacks
Docker の新しいバージョンへの対応や、Testcontainers、Buildpacks に関する修正があります。
### 主な対象
- Docker 29 系
- Testcontainers
- `bootBuildImage`
- Apple Silicon
- ARM64/AMD64
- Docker Credential Helper
- Docker Compose
- Service Connection
- Layered JAR
- 署名付き JAR
### 想定される影響
- CI 上だけ Testcontainers が失敗する
- Docker API バージョンの不一致
- Buildpacks によるイメージ作成失敗
- ARM64 と AMD64 の差異
- Docker Compose のサービス検出失敗
- SSL 接続設定の差異
---
### 2.9 AOT、Native Image、Java 25
AOT、GraalVM Native Image、Java 25 対応に関する修正も含まれます。
### 対象となる場合に確認すること
- Native Image のビルド
- Reflection Hint
- Resource Hint
- Proxy Hint
- Profile の引き継ぎ
- Flyway Migration の検出
- Actuator
- Oracle UCP
- `-parameters`
- Main クラスの検出
Native Image を利用していない場合は、優先度を下げられます。
---
## 3. 必要なテスト
## 3.1 ビルドと依存関係の確認
### Maven
./mvnw -U clean verify
./mvnw dependency:tree
./mvnw spring-boot:repackage
### Gradle
./gradlew clean check
./gradlew dependencies
./gradlew bootJar
### チェック項目
- [ ] コンパイルエラーがない
- [ ] テストがすべて成功する
- [ ] 起動時に重大な警告がない
- [ ] `NoSuchMethodError` がない
- [ ] `ClassNotFoundException` がない
- [ ] Spring Boot 管理外の固定バージョンを確認した
- [ ] Jackson、Hibernate、Spring Framework の上書きがない
- [ ] Maven Enforcer の違反がない
- [ ] Dependency Convergence の問題がない
---
## 3.2 全プロファイルでの起動テスト
最低限、次の構成で起動確認を行います。
- [ ] ローカルプロファイル
- [ ] 単体テスト用プロファイル
- [ ] 結合テスト用プロファイル
- [ ] ステージングプロファイル
- [ ] 本番相当プロファイル
- [ ] 環境変数を利用した構成
- [ ] 外部設定ファイルを利用した構成
- [ ] Secret Manager や Config Server を利用した構成
### 確認項目
- [ ] DB 接続先が正しい
- [ ] 外部 API の URL が正しい
- [ ] Profile が正しく有効化されている
- [ ] SSL 設定が正しい
- [ ] タイムアウト値が正しい
- [ ] ログレベルが正しい
- [ ] Feature Flag が正しい
- [ ] 起動後の Health Check が正常
---
## 3.3 API 回帰テスト
### 正常系
- [ ] GET
- [ ] POST
- [ ] PUT
- [ ] PATCH
- [ ] DELETE
- [ ] ページング
- [ ] ソート
- [ ] ファイルアップロード
- [ ] ファイルダウンロード
### JSON
- [ ] 日付・時刻
- [ ] enum
- [ ] `null`
- [ ] 空文字
- [ ] 空配列
- [ ] 不明フィールド
- [ ] record
- [ ] 多態型
- [ ] 大きな数値
- [ ] Unicode
- [ ] 独自 Serializer/Deserializer
### 異常系
- [ ] 入力値エラー
- [ ] 業務エラー
- [ ] 認証エラー
- [ ] 認可エラー
- [ ] リソース未存在
- [ ] タイムアウト
- [ ] 外部システム障害
- [ ] 例外レスポンス形式
---
## 3.4 DB 統合テスト
実際に使用している DB、または同一バージョンの Testcontainers を利用します。
- [ ] 空 DB に Flyway/Liquibase を適用できる
- [ ] 既存 DB に差分 Migration を適用できる
- [ ] CRUD が正常
- [ ] 複雑な JPQL が正常
- [ ] Native Query が正常
- [ ] Criteria API が正常
- [ ] Lazy Loading が正常
- [ ] Transaction Commit が正常
- [ ] Transaction Rollback が正常
- [ ] 楽観ロックが正常
- [ ] 悲観ロックが正常
- [ ] Unique 制約が正常
- [ ] 外部キー制約が正常
- [ ] Batch Insert/Update が正常
- [ ] Envers の履歴登録と検索が正常
---
## 3.5 セキュリティテスト
- [ ] ログイン成功
- [ ] ログイン失敗
- [ ] ログアウト
- [ ] JWT 正常系
- [ ] JWT 期限切れ
- [ ] JWT 署名不正
- [ ] JWT 未対応アルゴリズム
- [ ] OAuth2 Login
- [ ] Client Credentials
- [ ] CORS
- [ ] CSRF
- [ ] ロール別アクセス制御
- [ ] 未認証時のレスポンス
- [ ] 権限不足時のレスポンス
- [ ] Actuator の公開範囲
- [ ] Actuator に対する GET 以外のアクセス
- [ ] エラーページの HTML エスケープ
---
## 3.6 外部連携テスト
### SMTP
- [ ] TLS 接続
- [ ] STARTTLS
- [ ] 証明書のホスト名検証
- [ ] SMTP 認証
- [ ] 実メール送信
### RabbitMQ
- [ ] SSL 接続
- [ ] Publish
- [ ] Consume
- [ ] 再接続
- [ ] Retry
- [ ] DLQ
- [ ] Health Check
### Kafka
- [ ] Produce
- [ ] Consume
- [ ] Consumer Group
- [ ] Transaction
- [ ] Retry
- [ ] DLT
- [ ] Health Check
### Redis
- [ ] 接続
- [ ] Read/Write
- [ ] TTL
- [ ] Serialization
- [ ] Cluster/Sentinel
- [ ] Health Check
### GraphQL
- [ ] Query
- [ ] Mutation
- [ ] Validation Error
- [ ] `@ControllerAdvice`
- [ ] WebSocket
- [ ] Origin 制御
---
## 3.7 Actuator と監視
- [ ] `/actuator/health`
- [ ] `/actuator/info`
- [ ] `/actuator/metrics`
- [ ] `/actuator/prometheus`
- [ ] `/actuator/env`
- [ ] `/actuator/configprops`
- [ ] `/actuator/mappings`
- [ ] Health Group
- [ ] Readiness
- [ ] Liveness
- [ ] 認証・認可
- [ ] メトリクス名
- [ ] Tag
- [ ] SLO
- [ ] アラート条件
---
## 3.8 Docker と CI/CD
- [ ] 実行可能 JAR の作成
- [ ] Docker Image の作成
- [ ] `bootBuildImage`
- [ ] Docker Compose 起動
- [ ] Testcontainers
- [ ] CI 上での結合テスト
- [ ] ARM64
- [ ] AMD64
- [ ] コンテナの Health Check
- [ ] Graceful Shutdown
- [ ] Layered JAR
- [ ] 本番と同じ起動コマンド
---
## 3.9 性能テスト
最低限、主要 API について 3.5.6 と 3.5.16 を比較します。
### 比較項目
- [ ] 平均レスポンスタイム
- [ ] p95 レスポンスタイム
- [ ] p99 レスポンスタイム
- [ ] Throughput
- [ ] Error Rate
- [ ] CPU 使用率
- [ ] Memory 使用量
- [ ] GC 回数
- [ ] DB Connection Pool
- [ ] Thread 数
- [ ] 外部 API 接続数
---
## 4. 推奨実施順序
1. Spring Boot のバージョンのみを 3.5.16 に変更する
2. 3.5.6 と 3.5.16 の依存関係ツリーを比較する
3. コンパイルと単体テストを実行する
4. Spring Context 起動テストを実行する
5. 全 Profile で起動確認する
6. 実 DB を利用した結合テストを実行する
7. Kafka、RabbitMQ、SMTP などの外部連携を確認する
8. セキュリティと Actuator を確認する
9. Docker Image を本番と同じ方法で作成する
10. ステージング環境で回帰テストを実施する
11. 性能比較を実施する
12. 本番投入後に監視指標を比較する
---
## 5. 優先度別テスト
### 優先度: 高
- JSON の互換性
- 設定ファイルと環境変数の優先順位
- DB/JPA/Hibernate
- 認証・認可
- Actuator
- SSL/TLS
- Docker Image の起動
- Testcontainers を含む CI
- 外部システム接続
### 優先度: 中
- Micrometer のメトリクス
- Kafka/RabbitMQ の再接続
- Buildpacks
- Docker Compose
- ファイルアップロード
- 非同期処理
- Scheduled Task
- Graceful Shutdown
### 利用している場合のみ
- Native Image
- AOT
- Java 25
- Jetty
- GraphQL WebSocket
- Cloud Foundry
- Envers
- Oracle UCP
- WAR 配備
---
## 6. リリース判定チェックリスト
### ビルド
- [ ] `clean verify` または `clean check` が成功
- [ ] 依存関係に競合がない
- [ ] 起動時に重大な警告がない
### 機能
- [ ] 主要 API が正常
- [ ] JSON 互換性を確認済み
- [ ] DB Migration が正常
- [ ] 外部連携が正常
- [ ] Batch/Scheduler が正常
### セキュリティ
- [ ] 認証・認可が正常
- [ ] JWT 検証が正常
- [ ] Actuator の公開範囲が正しい
- [ ] CORS/CSRF が正常
- [ ] SSL 証明書が正常
### 運用
- [ ] Health Check が正常
- [ ] メトリクスが取得できる
- [ ] ログ形式に問題がない
- [ ] Docker Image が起動する
- [ ] Graceful Shutdown が正常
- [ ] ロールバック手順が確認済み
---
## 7. 参考リリースノート
- Spring Boot 3.5.6
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.6
- Spring Boot 3.5.7
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.7
- Spring Boot 3.5.8
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.8
- Spring Boot 3.5.9
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.9
- Spring Boot 3.5.10
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.10
- Spring Boot 3.5.11
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.11
- Spring Boot 3.5.12
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.12
- Spring Boot 3.5.13
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.13
- Spring Boot 3.5.14
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.14
- Spring Boot 3.5.15
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.15
- Spring Boot 3.5.16
https://github.com/spring-projects/spring-boot/releases/tag/v3.5.16