AIと頑張るSpringBoot_バージョンアップ

717 Views

September 26, 25

スライド概要

2025年9月26日開催の関ジャバで登壇した資料です

profile-image

PHPer → フロントエンドエンジニア 主に Next.js 書いてます

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

AIと頑張るSpringBoot バージョンアップ 関ジャバ'25 9月度

2.

自己紹介 坂本 侑以(X: mono_nofoo) 株式会社 Rise UP で フロントエンドエンジニア として主に Next.js を書いてます PHP や Java も書くときは書く

3.

なぜ SpringBoot のバージョンアップを 担当することになったか

4.

状況 ● Java のアプリケーション3つ ○ A: SpringBoot 3.2.6(2024年12月でサポート切れ) ○ B: SpringBoot 3.3.7(2025年6月でサポート切れ) ○ C: SpringBoot 3.5.3 ● 大きなリリースが終わって自分だけ手が空いていた ○ チーム内の Java 得意な人は即、別の機能実装に…… ○ サポート切れ状態をいつまでも放置する訳にはいかない ○ AI の力を借りれば自分でも何とかなるかも?

5.

作戦を立てよう

6.

バージョンアップを進める上での作戦 ● スピードを優先 ○ サポート切れ状態をなるはやで解消したい ○ 動作に問題が無いなら目をつぶるのも選択肢の1つ ● 一番バージョンが古いアプリケーション A からやる ○ 一番古いヤツのバージョンアップができたなら B も苦労せずにできる (といいな) ○ A に対して直近で開発予定が無い

7.

ざっくりとしたリリースまでの流れ

8.

バージョンアップの流れ ● ● ● ● ● SpringBootのバージョンを上げる テスト実行 わんさかエラーや警告が出るので1個ずつ対処 検証環境で動作チェック 本番リリース ○ Blue/Green デプロイで何か起きたら即切り戻せるように

9.

エラーや警告との向き合い方

10.

エラーや警告との向き合い方 ● まずは自分でスタックトレースを読む ○ 自分で理解できて解消できるならそれが一番良い ○ 分からなくても「何が分からなかったか」を自覚したい ○ スタックトレースを読むという経験値稼ぎ ■ 読まないといつまでたっても読み慣れない

11.

エラーや警告との向き合い方 ● まずは自分でスタックトレースを読む ○ 自分で理解できて解消できるならそれが一番良い ○ 分からなくても「何が分からなかったか」を自覚したい ○ スタックトレースを読むという経験値稼ぎ ■ 読まないといつまでたっても読み慣れない やらないことはうまくならない 弊社技術顧問

12.

エラーや警告との向き合い方 ● エラー文を AI に解説してもらう ○ 「直し方を教えて」じゃなくて「解説して」と聞く ○ 何がダメでエラー or 警告となったか把握したい ○ 直し方も教えてはくれる(直るとは言ってない)

13.

エラーや警告との向き合い方 ● 人に頼る ○ AIに聞いても分からないことは分からない ○ アプリケーションと向き合ってきた人の方がピンとくることがある ○ 時間さえ合えばいつでも技術顧問に頼れる環境なので助 かってます……!

14.

実際に出たエラーや警告

15.

どんなエラーが出て、どう対処したか ● ● ● ● ● ● 〇〇は非推奨 flyway で PostgreSQL 対応できない JSON にデシリアライズ出来ない ぬるぽ XML にデシリアライズ出来ない Swagger 動かない

16.

〇〇は非推奨 サクッと書き換えられるものは書き換え ● spring-boot-jarmode-layertools ○ 現在では使われてなかったので素直にライブラリを削除した ● org.springframework.boot.test.mock.mockitoのMockBean ○ 公式が MockitoBean に置き換えろと言ってたのでパッと書き換え

17.

〇〇は非推奨 ● RestTemplateBuilderのsetConnectTimeout(Duration) ● RestTemplateBuilderのsetReadTimeout(Duration) RestClientを使っていこうという方針だったのでRestClientへ置き 換えたかったが影響範囲がデカいし時間かかる 今後削除されるが今はまだ使えるので警告を黙らせて対応する PBIを積んでおくに留める

18.

flyway で PostgreSQL 対応できない ● AI「Flyway 10 以降では、各データベースのサポートが「分割 モジュール化」され、flyway-core だけでは特定 DB の方言情 報が含まれません」 ● PostgreSQL用のライブラリを足せばよさげだったので足した ○ runtimeOnly "org.flywaydb:flyway-database-postgresql"

19.

JSON にデシリアライズ出来ない ● 文字列型や整数型でないとアノテーションを付けないとデシリ アライズ出来なくなった? ● リクエストクラスで使っていたドメインクラスに対して @JsonCreator や @JsonValue を付けていった

20.

JSON にデシリアライズ出来ない ● 文字列型や整数型でないとアノテーションを付けないとデシリ アライズ出来なくなった? ● リクエストクラスで使っていたドメインクラスに対して @JsonCreator や @JsonValue を付けていった ドメインクラスはリクエストの JSON のことまで関心 持ちたくないなぁ 弊社技術顧問

21.

JSON にデシリアライズ出来ない ● 確かに……! ○ でももうほぼコレで対応しちゃったから、対応済みのものはそのまま (スピード優先) ● リクエストクラスのフィールドの型を文字列して、リクエストクラ ス内でドメインクラスに変換するメソッドを用意する ○ まだ対応してなかったものはこの方法で対応

22.

ぬるぽ ● テストを実行するたびに出たり出なかったり…… ○ とあるライブラリの設定ファイルが読み取れなくてぬるぽ ● バージョンアップに関係ない、元から潜んでいたバグだった ○ testパッケージにあらかじめテスト用設定ファイルを用意する

23.

XML にデシリアライズ出来ない ● XML上の名前とクラスのフィールド名が一致してない ○ それ用のアノテーション(@JacksonXmlElementWrapper)は元から 付いていたけどダメらしい ○ 何のアノテーションを付ければ良いか分からず…… ● 該当のフィールドは呼ばれてなさげだったので、クラスのフィー ルド名を XML と合わせた

24.

Swagger 動かない ● 元から使っていた Swagger のバージョンが SpringBoot3.5 に対応してなかった ● Swagger のバージョンを最新にした

25.

まとめ

26.

まとめ ● AIに頼ることで自力で頑張るより楽出来る部分はある ● AIの回答をそのまま信じるのではなく、ちゃんと公式ドキュメン トも見に行く ● 無理そうなら分かる人に頼る