以下の内容はhttps://ozaki25.hatenadiary.jp/entry/2025/11/15/163800より取得しました。


「JJUG CCC 2025 Fall」に参加してきました

開発と運用を楽にするSpring Boot on AWSテクニック集

Masatoshi Tadaさん
https://docswell.com/s/MasatoshiTada/537VVD-spring-boot-on-aws

テスト

  • ローカルでのテスト
    • 何も考えずに起動して動くのが理想
    • でも壁がある
    • DockerCompose
      • ミドルウェアのセットアップが入ったものを
      • spring-boot-docker-compose
        • 起動時に勝手にdocker composeしてくれる
        • テストの時も勝手に起動して停止してくれる
        • DBの接続情報などをapplication.ymlに持たなくて良くなる
    • モックとプロファイルでの切り替え
      • @Profile("local") とか @Profile("production") とか
      • ローカルは固定値返すなどのモックで
      • 本番は外部のサービスへ
      • application.ymlのspring.profiles.activeにlocalを指定する
      • 環境変数のSPRING_PROFILES_ACTIVEでも
    • Local StackでAWSサービスを再現
      • コンテナイメージが提供されている
      • AWSのセットアップのBeanをProfileで切り替えてLocalStackに向けるように

デプロイ

  • Amazon ECS
    • コンテナ実行環境
    • 永続的なアプリ/スケジュールドなバッチ
    • デプロイするためにはコンテナ化する
    • 用語
    • ecspresso
      • サービスとタスクをデプロイするCLI
      • クラスター/ロードバランサー/IAMなどはTerraformなど別のもので
      • Terraform連携も対応してる
      • Terraformだけでもできるけど
        • アプリだけデプロイできるのがいい
        • 想定外のデグレードを防げる
      • 薄いラッパーなのでECSのjsonそのまま書く感じに近い
        • 変数参照したりできるのが違う
    • ルートファイルシステムは変更不可にするといい
      • セキュリティ的な観点で
      • ただし組み込みTomcatは起動時にファイルを作るのでそれ用のボリュームが必要
    • Dockerfile
      • ベースイメージに脆弱性がないかは必ず確認
      • アプリ用のユーザを作成しそのユーザでアプリを実行する
        • 何も考えないとルートユーザで動いちゃう
      • 組み込みTomcatが使うフォルダをVOLUMEで指定
        • Buildpacksだとこれができない
      • imageのタグはコミットハッシュにすると内容と紐づいて便利
      • ecspresso deployでデプロイ
  • AWS Lambda
    • サーバーレス/FaaS
    • aws-lambda-java-coreを追加すればOK
    • RequestHandoerインターフェースの実装クラスを作るとそこがエントリーポイントになる
    • lambrollでデプロイ
      • ecspressoと同じ出自
      • Lambdaのコードだけをデプロイできる
      • 理由もecspressoと同じで想定外の変更をしてしまう心配がない
    • jarが50MB超えるとS3に置いてそれをアップロードすることになる

耐障害性

  • 自システム
    • マルチAZ
    • 負荷分散の問題
      • 異なるアプリにリクエストがいくとセッションがどれかに保存されてると問題になる
      • SpringSessinで外部ストレージにセッションを持てる
        • どのアプリに振り分けられても問題なし
        • 外部ストレージはRDB/Redis
        • MongoDBとHazelcastもあるがSpringチームがメンテしてるわけではない
    • SpringSessionの注意点
  • 連携先システム
    • 少し時間を置けば成功するタイプのエラーもある
    • Spring Retry
      • 7からcoreに入った
      • org.springframework.core.retry
    • リトライで考えること
      • どれだけ待たせていいのか
      • 待ち時間をどうするか
        • 固定とかだんだん増やしていくかとか
      • 最大リトライを何回にするか
    • 使い方
      • RetryTemplate
      • AOP

その他

  • 構造化ログ
    • ログはJSONにする
  • Microsoft Entra ID連携
    • ALBにEntraIDを設定
    • Spring Securityで設定
  • @SpringBootTest
    • テストは全てこれを使う
    • @WebMvcTest とか @JdbcTest などもある
      • AutoConfigurationの範囲を縮めてる
      • 効果は小さい割にハマると面倒なので使わなくていい
  • SpringBoot4.0
    • 2025/11/20リリース
    • 変更点がたくさんある
    • マイグレーションガイドを見るといい
    • ライブラリ名がリネームされてるもの
      • starter-webstarter-webmvc
      • starter-test が細分化されたり
    • RestTemplateが非推奨化
      • まだだけどいずれ使えなくなる
      • RestClientに移行する
    • Jacksonが2から3へ
      • パッケージ名とグループIDが変わる
      • ただしjakson-annotationsのみ変更されない

nullの10億ドルの過ちから未来へ:Spring Boot 4とJSpecifyが描くnull安全設計

  • 尾形さん(ウェルスナビ株式会社)
  • 藤原さん(ウェルスナビ株式会社)
    https://docswell.com/s/WN_Tech-PR/ZM6PPE-2025-11-15-125730

  • SpringBootのアップデートをしていて

    • 古いバージョンを使っているアプリが多くアップグレード対応
    • SpringBoot4でJSペシfy準拠のnull安全アノテーションが導入されることを発見
  • Javaとnull
    • 1995年にJavaが登場
    • その時からnullが導入されていた
    • 何も参照していない状態
  • Javaのnullの課題
    • 型システムでnullを判別できない
      • つまり静的解析で判定できない
    • null許容化明示されないので設計書やコメントで補足しないといけない
      • この変数はnull入れて良いの?という議論が起きてしまう
  • null安全アノテーションの乱立
  • Java標準のnull安全アノテーション
  • Optional
    • Java8から使える
    • nullの有無を型で明示的に表現できる
    • 値の存在確認が強制させる
  • Kotlinの台頭
    • null安全な言語
  • Helpful NullPointerException
    • java14から
    • 何がヌルポになったか分かりやすくなった
      • 具体的に何がnullで落ちたのか
  • JSpecify
    • null安全の標準化に向けた動き
    • null関連のアノテーションのライブラリ
    • 4つのアノテーション
      • @Nillable
        • フィールド/戻り値/引数などにつけられる
      • @NonNull
        • フィールド/戻り値/引数などにつけられる
        • これは基本使わない
      • @NullMarked
        • NonNullをつけて回るのが面倒
        • これをパッケージにつけると全部NonNullにできる
        • Nullableをつけるとそれで上書きれる
      • @NullUnmarked
        • パッケージやメソッドやクラス内がNullチェックの対象外になる
  • NullAway

間も無くリリース Spring Boot 4!

makingさん
https://docs.google.com/presentation/d/1qK72RCPPOM1ALKPb-NWgO9KP03XUcQOM_58NX_IiwG0/mobilepresent?slide=id.p

  • SpringFramework7が11/14にリリース
  • SpringBoot4が11/20リリース
  • OSSサポートは13ヶ月
    • 毎年マイナーバージョンを上げていくとちょうどいい
  • Spring Boot 4.0
    • Spring Framework 7.0
    • Spring Security 7.0
    • Spring Batch 6.0
    • Spring Data 2025.1
    • Spring Integration 7.0
    • Spring gRPCは1.1でSpring Boot 4.1に含まれる予定
      • Spring gRPC 1.0はSpring Boot 4に対応

Spring Boot4.0の変更点

  • モジュール化
    • 今までAutoconfigurationがモノリスで1つのjarだった
      • 機能が増えるにつれてサイズも増大
      • 保守性も悪くなった
      • 利用側でも必要ない機能が入ってしまったり時間がかかったり
    • 各技術ごとにjarが分割された
      • それに伴ってパッケージ名が変わった
    • アップグレード
      • Spring Initializrで改めて必要なモジュール選んで生成したものをコピーして持っていくといい
        • 何が必要なのかの選別が大変だから
      • 暗黙的に有効になっていたやつをもらさないように注意
        • ライブラリが内部的に使ってたとかもあるので
      • 過渡期用の全部入りセットもある
        • spring-boot-starter-classic
      • サードパーティがAutoConfiguration使ってたらライブラリ側が対応してくれるのを待たないといけない
  • Jackson3
    • 2から3に上がる
    • パッケージ名が変わる
    • ObjectMapperを使っていたとこがJsonMapperなどそれぞれ用意されるようになった
    • 例外がチェック例外から非チェック例外になって扱いやすくなった
    • 2は非推奨だけど使うことはできる
    • サードパーティが暗黙的に使ってることもあるので注意

Spring Framework 7.0の変更点

  • レジリエンス機能
    • リトライサポート
      • Spring Retryがコアに入った
      • Java Configクラスに@EnableResilientMethodsつけておくと有効化される
      • @Retryableでリトライの定義
      • @ConcurrencyLimitで同時実行数の制限ができる
  • APIバージョニング
    • headerでバージョン入れてもらって振り分けるようなケース
    • 従来は自前で振り分けてた
    • 設定とGetMappingなどに書いたversionでいい感じにできる
  • Interface HTTP Client
    • インターフェースベースのHTTPクライアント
    • 従来は同じような設定をコピペで毎回書かないといけなかった
    • 同じような設定をグループとしてまとめられるようになった
  • RestTestClient
    • WebClientに対応するWebTestClientのRestClient版
    • JSONのアサートできたり
    • どこまで組み込んだ状態で使うかバリエーションがある
  • JmsClient
    • JdmcTemplateに対するJdbcClientのJmsTemplate版
    • FluentなAPIで扱えるようになる
    • priorityとかtimetolieveを設定したいとかなると良さが見えてくる
  • BeanRegistration
    • プログラマティックにDIコンテナにBeanを登録する方法
      • ifとかforを使ってということ
    • 今までは1個ずつやってかないといけなかった
  • JSpecify
    • Null Saftyにする取り組み
    • GAになってSpring Framework7に入った
    • IDEやNullAwayで検出する
    • org.springframework.lang.NullableはDeprecated
    • フレームワークの内部は全部これに移行された
    • @NullMarkedをつけると全部NonNullになる
      • nullが入るものに@Nullableをつけていく
    • NullAway

AI駆動開発の最前線:GitHub Copilot Agent Mode と Coding Agent で実現する高速マイクロサービス開発

てらだよしおさん

  • AI駆動開発に適応できないといけない時代
  • マイクロサービスなECアプリをを数日で動くものまでできる
    • モノリスよりもマイクロサービスの方が相性がいい
  • AIコーディング
    • 同じ指示でも結果が違う
    • Vibeコーディングは運任せ
      • やらせるにしても仕様をしっかり書いて単位を小さく
    • 設計仕様を作らせる
    • 実装計画をたてさせる
  • GitHub Copilot Agent Mode
    • VSCode上でプロンプト渡して動かすやつ
  • GitHub Coding Agent
    • issueに作業を登録
    • copilotを担当者にアサイ
    • そうするとコードを書いてプルリクエストを作ってくれる
    • プランに応じてAPIアクセスの上限などもあるので注意
      • 4並列くらいならできる
    • 内部的にはGitHub Actionsが動いてるので注意
      • 課金も対象
    • 仕様書をしっかり作っておくことが重要
      • つまりやることが決まっているような場合に強い
  • AIとの向き合い方
    • AIは嘘を付くしごまかすし壊してしまう
    • 常に検証/テスト/レビューを実施する

アーキテクチャと考える迷子にならない開発者テスト

irofさん

  • テストは難しい
    • テストエンジニアと呼ばれる専門家がいるくらい一大トピック
    • 片手間でできるようなものではない
  • 開発者とテスト
    • 誰もがテストと向き合ってる
    • スペシャリストになるのは難しくても知識を取り入れる必要がある
  • 開発者テスト
    • 今回の話のスコープ
    • 作ったものが思ったとおりに動くか自分でやるテスト
  • アーキテクチャは難しい
    • アーキテクトと呼ばれる専門家がいるくらい一大トピック
    • 片手間でできるようなものではない
  • アーキテクチャという言葉の曖昧さ
    • 抽象的な概念
    • 構造をモデルで表したとしても単一に定まらない
    • 複数同時に存在することもある
      • 切り口によっていろいろ
  • アプリケーションアーキテクチャ
    • 今回の話のスコープ
  • アプリケーションを構造で捉える
    • 言語構造
      • Javaだとパッケージがあってクラスがあってメソッドがあってみたいな
      • この構造はテストにあまり役に立たない
      • メソッドしか見ない
      • メソッドのテストが最小粒度
    • アーキテクチャを捉える
      • Controller - Service - Repository
      • それぞれに暗黙の期待がある
      • 各レイヤーに役割をもたせるのがアーキテクチャ
    • テストの意味とコツ
      • こういう欠陥を見つけたいという視点でテストが存在している
      • 関係ない理由で結果が変わらないような紛れが少ない状態でテストする
      • 見つけ痛い欠陥の近くでテストする
        • そうすれば原因が分かりやすく修正しやすい
  • テストする範囲と道具
    • 自分の作ったコードで存在し得る欠陥を考える
    • その欠陥がないことを確認するテストを書く
    • アーキテクチャに持たせている意味が成立していることを見ていく
      • 意味があれば各レイヤーで何をテストするべきかが分かりやすくなる



以上の内容はhttps://ozaki25.hatenadiary.jp/entry/2025/11/15/163800より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14