0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Boot 3.5.6 → 3.5.16 バージョンアップ調査

0
Last updated at Posted at 2026-07-24
# 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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?