書籍概要

Spring 本格入門 実践力が身に付くWebアプリ開発

著者
発売日
更新日

概要

本書はテストの入れ方,責務分離,例外処理,API化,バッチ処理,再利用可能な構成作りなどに不安を持つ初・中級者を対象に実務で一歩先へ進むためのSpring開発に焦点を当てた書籍です。1章でSpringを使った開発現場の流れを説明しながら,なぜそうしているのかを最初に示します。2章以降はアプリ開発を通してサービス層まではjarとして共通化し,コントローラーを持つアプリケーション層を別プロジェクトで組み立てる構成を学ぶことができます。

こんな方におすすめ

  • Springを使った実践的なWebアプリ開発を行いたい人

サンプル

目次

1章 Springを使った開発現場の今

1-1 Springプロジェクトとは

  • 1-1-1 フレームワークとは
  • 1-1-2 Spring Frameworkとは
  • 1-1-3 Springプロジェクトの全体像
  • 1-1-4 本書で使用する開発環境
  • 1-1-5 Springが選ばれる理由

1-2 サーバーレンダリングからAPI連携へ

  • 1-2-1 Springで作るWebアプリケーション
  • 1-2-2 サーバーレンダリングとは
  • 1-2-3 API連携の構成とは
  • 1-2-4 なぜAPI連携が主流になったのか

1-3 サービス層のjar ファイル作成

  • 1-3-1 サービス層とは
  • 1-3-2 jarファイル作成とは
  • 1-3-3 jarファイルにするとどうなるか
  • 1-3-4 本書でのjarファイル作成の位置づけ

1-4 API連携の利点と注意点

  • 1-4-1 テストのしやすさ
  • 1-4-2 スケーラビリティの向上
  • 1-4-3 スキーマ駆動開発による効率化
  • 1-4-4 API連携の注意点

1-5 本書で作るシステム全体像

  • 1-5-1 作成するアプリケーション
  • 1-5-2 システムの最終形
  • 1-5-3 学習のロードマップ
  • 1-5-4 本書の学び方

2章 レイヤー分離を意識した設計

2-1 プロジェクトの作成

  • 2-1-1 Spring Initializrとは
  • 2-1-2 プロジェクトの作成手順
  • 2-1-3 Eclipseへのインポート
  • 2-1-4 プロジェクトの初期構成

2-2 責務の整理

  • 2-2-1 なぜ責務を分けるのか
  • 2-2-2 MVCモデルとレイヤー
  • 2-2-3 MVCを発展させた3つの層
  • 2-2-4 3つの層の関係
  • 2-2-5 責務を分けることで得られるメリット

2-3 Form/Entity/Repositoryの役割の整理

  • 2-3-1 層の間でのデータの受け渡し
  • 2-3-2 Entity-業務データの表現を担当
  • 2-3-3 Form-画面とのやりとりを担当
  • 2-3-4 Repository-データの保存・取得を担当
  • 2-3-5 3つの役割の整理

2-4 依存方向とパッケージ構成の設計

  • 2-4-1 依存方向とは
  • 2-4-2 サービス層の独立
  • 2-4-3 なぜ依存方向を守るのか
  • 2-4-4 パッケージ構成の設計
  • 2-4-5 パッケージの作成

3章 テスティングフレームワークの導入

3-1 テストの考え方

  • 3-1-1 なぜテストを書くのか
  • 3-1-2 単体テストと結合テスト
  • 3-1-3 本書のテスト戦略

3-2 JUnitとMockito の導入

  • 3-2-1 JUnitとは
  • 3-2-2 はじめてのJUnitテスト
  • 3-2-3 テストの書き方のパターン
  • 3-2-4 Mockitoとは
  • 3-2-5 Mockitoの基本的な使い方

3-3 Spring Boot TestとMockMvcの導入

  • 3-3-1 Spring Boot Testとは
  • 3-3-2 MockMvcとは
  • 3-3-3 MockMvcの基本的な使い方
  • 3-3-4 テストの道具の使い分け

4章 サービス層の実装

4-1 サービス層の役割

  • 4-1-1 サービス層が担当すること
  • 4-1-2 この章で作成するクラス

4-2 EntityとRepositoryの作成

  • 4-2-1 TaskEntityの作成
  • 4-2-2 TaskRepositoryインターフェースの作成

4-3 Service の作成

  • 4-3-1 DIとは何か
  • 4-3-2 TaskServiceの作成
  • 4-3-3 @Serviceアノテーションの役割
  • 4-3-4 現時点のサービス層の構成

4-4 サービス層のテスト

  • 4-4-1 テストクラスの作成
  • 4-4-2 findAllのテスト
  • 4-4-3 findByIdのテスト
  • 4-4-4 saveのテスト
  • 4-4-5 deleteByIdのテスト
  • 4-4-6 テストの実行

5章 永続化層の実装

5-1 永続化層とRepositoryの作成

  • 5-1-1 永続化層が担当すること
  • 5-1-2 なぜListから始めるのか
  • 5-1-3 この章で作成するクラス
  • 5-1-4 TaskListRepositoryImplの作成
  • 5-1-5 各メソッドの実装
  • 5-1-6 @Repositoryアノテーション
  • 5-1-7 DIの流れの確認

5-2 永続化層のテスト

  • 5-2-1 テストクラスの作成
  • 5-2-2 @BeforeEachの役割
  • 5-2-3 テストの実行

6章 プレゼンテーション層の実装

6-1 プレゼンテーション層とコントローラの作成

  • 6-1-1 プレゼンテーション層が担当すること
  • 6-1-2 Spring MVCのリクエスト処理フロー
  • 6-1-3 この章で作成するもの
  • 6-1-4 TaskControllerの作成
  • 6-1-5 Thymeleafテンプレートの作成
  • 6-1-6 動作確認

6-2 FormとEntityの連携

  • 6-2-1 なぜFormが必要か
  • 6-2-2 TaskFormの作成
  • 6-2-3 FormからEntityへの変換
  • 6-2-4 現時点のプロジェクト構成

6-3 プレゼンテーション層のテスト

  • 6-3-1 結合テストの考え方
  • 6-3-2 テストクラスの作成
  • 6-3-3 タスク一覧画面のテスト
  • 6-3-4 タスク詳細画面のテスト
  • 6-3-5 テストの実行
  • 6-3-6 3つの層のテスト戦略の整理

7章 入力処理の実装

7-1 検索処理の実装とテスト

  • 7-1-1 RepositoryへのfindByKeywordメソッドの追加
  • 7-1-2 ServiceとControllerへの検索処理の追加
  • 7-1-3 検索フォームのテンプレートへの追加
  • 7-1-4 サービス層の単体テスト
  • 7-1-5 動作確認

7-2 登録処理の実装とテスト

  • 7-2-1 登録処理の流れ
  • 7-2-2 コントローラへの登録処理の追加
  • 7-2-3 登録画面の作成
  • 7-2-4 一覧画面への登録リンクの追加
  • 7-2-5 テスト
  • 7-2-6 動作確認

7-3 更新処理の実装とテスト

  • 7-3-1 更新処理の流れ
  • 7-3-2 コントローラへの更新処理の追加
  • 7-3-3 編集画面の作成
  • 7-3-4 一覧画面への編集リンクの追加
  • 7-3-5 テスト
  • 7-3-6 更新実行のテストを追加する
  • 7-3-7 動作確認

7-4 削除処理の実装とテスト

  • 7-4-1 削除処理の流れ
  • 7-4-2 コントローラへの削除処理の追加
  • 7-4-3 一覧画面への削除ボタンの追加
  • 7-4-4 テスト
  • 7-4-5 動作確認

8章 バリデーション処理の実装

8-1 単項目チェックの実装

  • 8-1-1 Bean Validationとは
  • 8-1-2 依存ライブラリの追加
  • 8-1-3 バリデーションアノテーションの追加(TaskForm)
  • 8-1-4 バリデーション処理の追加(コントローラ)
  • 8-1-5 テスト
  • 8-1-6 動作確認

8-2 相関項目チェックの実装

  • 8-2-1 単項目チェックでは対応できないケース
  • 8-2-2 TaskFormValidatorの作成
  • 8-2-3 コントローラへの組み込み
  • 8-2-4 テスト
  • 8-2-5 動作確認

8-3 エラーメッセージ表示と画面再表示

  • 8-3-1 Thymeleafでのエラーメッセージ表示
  • 8-3-2 エラーメッセージのカスタマイズ
  • 8-3-3 動作確認

9章 セッションを利用した状態管理

9-1 セッション利用の目的と注意点

  • 9-1-1 HTTPはステートレスなプロトコル
  • 9-1-2 セッションとは
  • 9-1-3 セッションの注意点
  • 9-1-4 @SessionAttributesアノテーション

9-2 検索条件の保持

  • 9-2-1 現在の問題の確認
  • 9-2-2 検索条件を保持するFormクラスの作成
  • 9-2-3 TaskControllerへの@SessionAttributesの追加
  • 9-2-4 listメソッドの修正
  • 9-2-5 一覧画面のテンプレートの修正
  • 9-2-6 検索条件のクリア機能の実装
  • 9-2-7 テスト
  • 9-2-8 動作確認

9-3 入力途中データの保持

  • 9-3-1 @SessionAttributesへのtaskFormの追加
  • 9-3-2 登録画面表示メソッドの修正
  • 9-3-3 登録実行メソッドの修正
  • 9-3-4 入力途中データ保存メソッドの追加
  • 9-3-5 更新画面への対応
  • 9-3-6 テスト
  • 9-3-7 動作確認

10章 例外処理の共通化

10-1 例外設計の考え方

  • 10-1-1 なぜ例外処理を共通化するのか
  • 10-1-2 業務例外とシステム例外
  • 10-1-3 本書での例外処理方針

10-2 @ExceptionHandlerの適用

  • 10-2-1 TaskNotFoundExceptionの作成
  • 10-2-2 TaskRepositoryのOptional対応
  • 10-2-3 TaskServiceImplの修正
  • 10-2-4 TaskServiceImplTestの更新
  • 10-2-5 コントローラへの@ExceptionHandlerの追加
  • 10-2-6 共通エラー画面(error.html)の作成
  • 10-2-7 @ExceptionHandlerのテスト
  • 10-2-8 動作確認

10-3 @ControllerAdviceの適用

  • 10-3-1 @ControllerAdviceとは
  • 10-3-2 GlobalExceptionHandlerの作成
  • 10-3-3 コントローラの@ExceptionHandlerの削除
  • 10-3-4 @ExceptionHandlerと@ControllerAdviceの使い分け

10-4 共通エラー画面の整備

  • 10-4-1 アプリケーション全体のスタイル追加
  • 10-4-2 動作確認

10-5 例外処理のテスト

  • 10-5-1 GlobalExceptionHandlerTestの作成
  • 10-5-2 TaskControllerSliceTestの整理
  • 10-5-3 テストの実行

11章 DB実装への切り替え

11-1 DB実装への移行

  • 11-1-1 データベースへの切り替えの全体像
  • 11-1-2 H2データベースの導入
  • 11-1-3 依存ライブラリの追加
  • 11-1-4 データベース接続の設定
  • 11-1-5 テーブルの作成
  • 11-1-6 初期データの投入
  • 11-1-7 サービス層は変更不要

11-2 MyBatisによる永続化処理

  • 11-2-1 MyBatisとは
  • 11-2-2 TaskMapperインターフェースの作成
  • 11-2-3 MapperXMLファイルの作成
  • 11-2-4 TaskDbRepositoryImplの作成
  • 11-2-5 実装の切り替え
  • 11-2-6 ファイル構成の確認
  • 11-2-7 動作確認

11-3 DB実装のテスト

  • 11-3-1 結合テストとは
  • 11-3-2 テストクラスの作成
  • 11-3-3 @Transactionalによるデータクリーンアップ
  • 11-3-4 テストの実行
  • 11-3-5 ポリモーフィズムの効果の確認

12章 2テーブル構成によるトランザクション管理

12-1 2テーブル構成の設計

  • 12-1-1 なぜ2テーブルが必要か
  • 12-1-2 CategoryEntityの作成
  • 12-1-3 テーブル定義の追加
  • 12-1-4 TaskEntityにcategoryIdを追加
  • 12-1-5 CategoryMapperとCategoryRepositoryの作成
  • 12-1-6 TaskMapper.xmlの修正
  • 12-1-7 既存コードへの影響と対処

12-2 トランザクション処理の実装

  • 12-2-1 トランザクションとは
  • 12-2-2 @Transactionalアノテーション
  • 12-2-3 TaskServiceImplへのトランザクション適用
  • 12-2-4 トランザクションの動作確認
  • 12-2-5 ロールバックが発生するケース

12-3 ロールバック確認とテスト

  • 12-3-1 例外を発生させたロールバックの確認
  • 12-3-2 @Transactionalありとなしの動作比較
  • 12-3-3 テストコードでのロールバックの確認
  • 12-3-4 テスト用メソッドの後始末

13章 サービス層のjarファイル作成

13-1 jarファイル作成の目的

  • 13-1-1 jarファイル作成のメリットの振り返り
  • 13-1-2 現在のプロジェクト構成の確認
  • 13-1-3 マルチプロジェクト構成とは
  • 13-1-4 本章の進め方

13-2 マルチプロジェクト化と動作確認

  • 13-2-1 この節で行うこと(全体ロードマップ)
  • 13-2-2 4つの設定ファイルの役割
  • 13-2-3 設定ファイル①(settings.gradle)
  • 13-2-4 設定ファイル②(ルートのbuild.gradle)
  • 13-2-5 設定ファイル③(taskapp-domain/build.gradle)
  • 13-2-6 設定ファイル④(taskapp-web/build.gradle)
  • 13-2-7 domainパッケージのtaskapp-domainへの移動
  • 13-2-8 残りのtaskapp-webへの移動
  • 13-2-9 動作確認

13-3 jarファイル作成の体感とテスト

  • 13-3-1 この節で行うこと(全体ロードマップ)
  • 13-3-2 jarファイルが実際にビルドされることの確認
  • 13-3-3 jarファイル作成後のプロジェクト構成
  • 13-3-4 既存のテストのtaskapp-domainへの移動と動作確認
  • 13-3-5 taskapp-webがtaskapp-domain.jarを参照していることの確認
  • 13-3-6 コンポーネントスキャンの境界

サポート

ダウンロード

本書で使用したサンプルファイルおよびPDFをダウンロードできます。

データは,圧縮ファイル形式でダウンロードできます。圧縮ファイルをダウンロードしていただき,適宜解凍してご利用ください。

(2026年10月2日更新)

ダウンロード
サンプルファイル(Sample.zip)

商品一覧