ポンコツPdM

プロフィール画像

SIerでの開発・プロジェクト運営の経験をもとに、Java・Springの実装、設計・テスト、チーム開発で役立つ手順をまとめています。

    Spring BootのServiceをJUnitとMockitoでテストする方法を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがRepositoryのモックを学ぶイラスト。

    設計・テスト・レビュー

    2026/11/4

    Spring BootのServiceをJUnit・Mockitoでテストする方法|Repositoryをモックする基本

    AIによる要約Serviceの単体テストではSpring Boot全体を起動せず、JUnit 5とMockitoでRepositoryをモックします。@Mockで依存先を作り、@InjectMocksまたはコンストラクタでServiceへ渡し、戻り値だけでなく保存処理が正しい引数で呼ばれたかも確認します。成功ケース、対象なし、業務ルール違反を分けてテストし、DB制約やトランザクションは結合テストへ任せます。 Spring BootのServiceは、Repositoryからデータを取得し、条件を判定し、更 ...

    Spring Bootで@RequestParamのバリデーションが効かない原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがValidationとSpring MVCを学ぶイラスト。

    実装・エラー解決

    2026/11/5

    Spring Bootで@RequestParamのバリデーションが効かない原因|@Validatedは必要?

    AIによる要約@RequestParamへ@NotBlankや@Minを付けても効かないときは、Validation依存関係、Springのバージョン、例外の受け取り方を確認します。Spring Framework 6.1以降のSpring MVCにはControllerメソッドの検証機能があり、旧来のAOP方式で使うクラスレベルの@Validatedを外す方が適切な構成もあります。@Validだけでは制約にならず、BindingResultも単純なRequestParam検証の受け皿ではありません。 S ...

    Spring Bootでapplication.propertiesを外部化する方法を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアが環境変数とProfileを学ぶイラスト。

    実装・エラー解決

    2026/11/5

    Spring Bootでapplication.propertiesを外部化する方法|環境変数とProfileの優先順位

    AIによる要約Spring Bootの設定は、jar内のapplication.propertiesへ本番値を直接書かず、環境変数やjar外の設定ファイルで上書きできます。開発・検証・本番の共通構造はProfileで分け、パスワードなどの秘密情報は環境変数やシークレット管理へ寄せます。外部ファイルを追加するspring.config.additional-locationと、既定の検索場所を置き換えるspring.config.locationの違いに注意が必要です。 Spring Bootでは、DB接続 ...

    Spring Bootの@GetMappingと@PostMappingの違いを解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがGETとPOSTの使い分けを学ぶイラスト。

    実装・エラー解決

    2026/11/4

    Spring Bootの@GetMappingと@PostMappingの違い|@RequestMappingとの使い分け

    AIによる要約@GetMappingは一覧表示や詳細表示など、基本的にサーバーの状態を変更しない取得処理へ使います。@PostMappingは登録、申請、ファイル取込など、状態を変更する処理へ使います。@RequestMappingはController全体の共通パスや、HTTPメソッド以外の条件も含めて指定するときに使います。削除をGETで実装せず、成功後はredirectすることが現場で重要な確認点です。 Spring BootのControllerでは、@GetMappingと@PostMappin ...

    Thymeleafで入力エラー後にFormの値が消える原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがFormとBindingResultを確認するイラスト。

    実装・エラー解決

    2026/11/4

    Thymeleafで入力エラー後に値が消える|Formとselectを保持する方法

    AIによる要約Thymeleafで入力エラー後に値や選択状態が消えたら、送信値・Form・再表示HTMLを順に確認します。この記事では氏名と部署を入力し、メールだけを不正にしたPOSTを実行します。部署コードがFormに残っていても、選択肢の一覧をModelへ戻し忘れるとselectを再現できません。失敗時と修正後のHTMLを比較し、th:field・BindingResult・エラー時のreturnも確認します。 登録画面で入力エラーが起きたとき、利用者が入力した内容は残したまま、該当項目の近くにエラー ...

    Javaの例外クラス名の付け方を解説する記事のアイキャッチ。Java道場風の学習空間で若手エンジニアが業務例外とシステム例外の命名を考えるイラスト。

    設計・テスト・レビュー

    2026/11/4

    Javaの例外クラス名はどう付ける?業務例外とシステム例外の命名ルール

    AIによる要約例外クラス名は、どの処理で落ちたかではなく、何が成立しなかったかを表すと使いやすくなります。業務ルール違反にはInsufficientStockExceptionのような具体名を、外部APIやDBなど技術的な失敗にはExternalApiTimeoutExceptionのような原因が分かる名前を付けます。BusinessExceptionやSystemExceptionだけで済ませず、呼び出し側が判断できる粒度を残すことが重要です。 業務システムでは、在庫不足、二重申請、締め日超過、外部AP ...

    Spring Data JPAの@MappedSuperclassと@Embeddableの違いを解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがJPAのEntity設計を学ぶイラスト。

    設計・テスト・レビュー

    2026/11/4

    Spring Data JPAの@MappedSuperclassと@Embeddableの違い|共通項目をどこへまとめる?

    AIによる要約@MappedSuperclassは、作成日時や更新日時のようなEntity共通のマッピングを継承させる仕組みです。@Embeddableは、住所や金額のような意味のある値を、所有Entityの一部として組み込む仕組みです。単なる重複削減ではなく、「Entityとして共通の性質か」「独立した値のまとまりか」で使い分けます。 JPAでEntityを増やすと、ID、作成日時、更新日時、住所、担当者コードなど、似たフィールドが繰り返し登場します。重複を減らすために親クラスへまとめたくなりますが、す ...

    JavaのServiceが肥大化した時にクラスを分ける基準を解説する記事のアイキャッチ。Java道場風の学習空間で若手エンジニアが設計を考えるイラスト。

    設計・テスト・レビュー

    2026/11/4

    SpringのServiceが肥大化したらどこで分ける?計算・保存・通知の分割例

    SpringのService分割を、注文処理のBefore/Afterで比較。計算と通知を分けても、在庫・保存・監査の順番を保ちます。SpringとH2で正常・失敗時のDBを検証し、全文コードと実行用ZIPを提供します。

    Spring Bootの@RequestParamとFormクラスの違いを解説する記事のアイキャッチ。若手エンジニアがJava道場風の学習空間で入力値の受け取り方を学ぶイラスト。

    実装・エラー解決

    2026/11/4

    Spring Bootの@RequestParamとFormクラスの違いは?使い分けを解説

    AIによる要約@RequestParamは単発の値を受け取るときに便利です。一方、Formクラスは画面入力や検索条件のように複数項目を1つの入力として扱いたいときに向いています。迷ったら、値が業務上ひとまとまりかどうかで判断します。 Spring BootのControllerを書き始めると、@RequestParamで値を受け取る書き方と、Formクラスでまとめて受け取る書き方の両方が出てきます。 注文一覧にキーワードと状態を足す場合は @RequestParam で十分です。開始日と終了日が加わり、入 ...

    JavaのList.containsがfalseになる原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがListとequalsの関係を学ぶイラスト。

    実装・エラー解決

    2026/11/5

    JavaのList.containsがfalseになる原因|equalsを実装しても見つからない時の確認点

    AIによる要約List.containsは、見た目やフィールド値を自動で比べるのではなく、要素との同値判定で一致を探します。自作クラスでequalsを実装していない、比較項目が違う、型や文字列が揃っていない場合は、値があるように見えてもfalseになります。デバッガで全項目を見る前に、何を同じとみなすクラスなのかを確認することが近道です。 業務システムでは、取得済みのユーザー一覧に対象ユーザーが含まれるか、選択済み明細に同じ商品があるか、といった確認でList.containsを使います。StringやI ...