717 Views
September 26, 25
スライド概要
2025年9月26日開催の関ジャバで登壇した資料です
PHPer → フロントエンドエンジニア 主に Next.js 書いてます
AIと頑張るSpringBoot バージョンアップ 関ジャバ'25 9月度
自己紹介 坂本 侑以(X: mono_nofoo) 株式会社 Rise UP で フロントエンドエンジニア として主に Next.js を書いてます PHP や Java も書くときは書く
なぜ SpringBoot のバージョンアップを 担当することになったか
状況 ● Java のアプリケーション3つ ○ A: SpringBoot 3.2.6(2024年12月でサポート切れ) ○ B: SpringBoot 3.3.7(2025年6月でサポート切れ) ○ C: SpringBoot 3.5.3 ● 大きなリリースが終わって自分だけ手が空いていた ○ チーム内の Java 得意な人は即、別の機能実装に…… ○ サポート切れ状態をいつまでも放置する訳にはいかない ○ AI の力を借りれば自分でも何とかなるかも?
作戦を立てよう
バージョンアップを進める上での作戦 ● スピードを優先 ○ サポート切れ状態をなるはやで解消したい ○ 動作に問題が無いなら目をつぶるのも選択肢の1つ ● 一番バージョンが古いアプリケーション A からやる ○ 一番古いヤツのバージョンアップができたなら B も苦労せずにできる (といいな) ○ A に対して直近で開発予定が無い
ざっくりとしたリリースまでの流れ
バージョンアップの流れ ● ● ● ● ● SpringBootのバージョンを上げる テスト実行 わんさかエラーや警告が出るので1個ずつ対処 検証環境で動作チェック 本番リリース ○ Blue/Green デプロイで何か起きたら即切り戻せるように
エラーや警告との向き合い方
エラーや警告との向き合い方 ● まずは自分でスタックトレースを読む ○ 自分で理解できて解消できるならそれが一番良い ○ 分からなくても「何が分からなかったか」を自覚したい ○ スタックトレースを読むという経験値稼ぎ ■ 読まないといつまでたっても読み慣れない
エラーや警告との向き合い方 ● まずは自分でスタックトレースを読む ○ 自分で理解できて解消できるならそれが一番良い ○ 分からなくても「何が分からなかったか」を自覚したい ○ スタックトレースを読むという経験値稼ぎ ■ 読まないといつまでたっても読み慣れない やらないことはうまくならない 弊社技術顧問
エラーや警告との向き合い方 ● エラー文を AI に解説してもらう ○ 「直し方を教えて」じゃなくて「解説して」と聞く ○ 何がダメでエラー or 警告となったか把握したい ○ 直し方も教えてはくれる(直るとは言ってない)
エラーや警告との向き合い方 ● 人に頼る ○ AIに聞いても分からないことは分からない ○ アプリケーションと向き合ってきた人の方がピンとくることがある ○ 時間さえ合えばいつでも技術顧問に頼れる環境なので助 かってます……!
実際に出たエラーや警告
どんなエラーが出て、どう対処したか ● ● ● ● ● ● 〇〇は非推奨 flyway で PostgreSQL 対応できない JSON にデシリアライズ出来ない ぬるぽ XML にデシリアライズ出来ない Swagger 動かない
〇〇は非推奨 サクッと書き換えられるものは書き換え ● spring-boot-jarmode-layertools ○ 現在では使われてなかったので素直にライブラリを削除した ● org.springframework.boot.test.mock.mockitoのMockBean ○ 公式が MockitoBean に置き換えろと言ってたのでパッと書き換え
〇〇は非推奨 ● RestTemplateBuilderのsetConnectTimeout(Duration) ● RestTemplateBuilderのsetReadTimeout(Duration) RestClientを使っていこうという方針だったのでRestClientへ置き 換えたかったが影響範囲がデカいし時間かかる 今後削除されるが今はまだ使えるので警告を黙らせて対応する PBIを積んでおくに留める
flyway で PostgreSQL 対応できない ● AI「Flyway 10 以降では、各データベースのサポートが「分割 モジュール化」され、flyway-core だけでは特定 DB の方言情 報が含まれません」 ● PostgreSQL用のライブラリを足せばよさげだったので足した ○ runtimeOnly "org.flywaydb:flyway-database-postgresql"
JSON にデシリアライズ出来ない ● 文字列型や整数型でないとアノテーションを付けないとデシリ アライズ出来なくなった? ● リクエストクラスで使っていたドメインクラスに対して @JsonCreator や @JsonValue を付けていった
JSON にデシリアライズ出来ない ● 文字列型や整数型でないとアノテーションを付けないとデシリ アライズ出来なくなった? ● リクエストクラスで使っていたドメインクラスに対して @JsonCreator や @JsonValue を付けていった ドメインクラスはリクエストの JSON のことまで関心 持ちたくないなぁ 弊社技術顧問
JSON にデシリアライズ出来ない ● 確かに……! ○ でももうほぼコレで対応しちゃったから、対応済みのものはそのまま (スピード優先) ● リクエストクラスのフィールドの型を文字列して、リクエストクラ ス内でドメインクラスに変換するメソッドを用意する ○ まだ対応してなかったものはこの方法で対応
ぬるぽ ● テストを実行するたびに出たり出なかったり…… ○ とあるライブラリの設定ファイルが読み取れなくてぬるぽ ● バージョンアップに関係ない、元から潜んでいたバグだった ○ testパッケージにあらかじめテスト用設定ファイルを用意する
XML にデシリアライズ出来ない ● XML上の名前とクラスのフィールド名が一致してない ○ それ用のアノテーション(@JacksonXmlElementWrapper)は元から 付いていたけどダメらしい ○ 何のアノテーションを付ければ良いか分からず…… ● 該当のフィールドは呼ばれてなさげだったので、クラスのフィー ルド名を XML と合わせた
Swagger 動かない ● 元から使っていた Swagger のバージョンが SpringBoot3.5 に対応してなかった ● Swagger のバージョンを最新にした
まとめ
まとめ ● AIに頼ることで自力で頑張るより楽出来る部分はある ● AIの回答をそのまま信じるのではなく、ちゃんと公式ドキュメン トも見に行く ● 無理そうなら分かる人に頼る