販売管理システムのケーススタディ
Java + Spring Boot によるエンタープライズアプリケーション開発
本書について
本書は、グラス片手にデータベース設計 販売管理システム編 の参照実装開発プロジェクトを題材に、販売管理システムの設計・実装・テスト・運用までを体系的に解説します。エクストリームプログラミング(XP)とテスト駆動開発(TDD)を実践しながら、貧血ドメインモデルからリッチドメインモデルへの進化過程を追体験できます。
対象読者
- Java による Web アプリケーション開発経験者
- エンタープライズシステム開発に興味のあるエンジニア
- TDD/XP を実践したい開発者
- ドメイン駆動設計(DDD)を学びたいエンジニア
目次
第1部: 導入と基盤
| 章 | タイトル | 概要 |
|---|---|---|
| 第1章 | プロジェクト概要 | 販売管理システムの業務概要、システム全体像、開発手法 |
| 第2章 | 開発環境の構築 | 技術スタックの選定、バックエンド・フロントエンド環境、CI/CD |
| 第3章 | アーキテクチャ設計 | レイヤードアーキテクチャ、依存関係、パッケージ構造 |
第2部: データモデリング
| 章 | タイトル | 概要 |
|---|---|---|
| 第4章 | データモデル設計の基礎 | ER モデリング、全体データモデル、JIG-ERD |
| 第5章 | マスタデータモデル | 組織・商品・取引先・在庫関連マスタ |
| 第6章 | トランザクションデータモデル | 販売・調達・在庫トランザクション |
| 第7章 | ドメインモデルとデータモデルの対応 | 貧血からリッチモデルへ、MyBatis マッピング |
| 第8章 | ドメインに適したデータの作成 | テストデータ設計、テストフィクスチャ |
第3部: マスタ管理機能
| 章 | タイトル | 概要 |
|---|---|---|
| 第9章 | 認証・ユーザー管理 | 認証ユースケース、Spring Security、JWT |
| 第10章 | 部門・社員マスタ | 階層構造、CRUD 操作、React コンポーネント |
| 第11章 | 商品マスタ | 商品分類、顧客別販売単価、バリデーション |
| 第12章 | 取引先管理 | パーティモデル、顧客・仕入先マスタ |
第4部: 販売管理機能
| 章 | タイトル | 概要 |
|---|---|---|
| 第13章 | 受注管理 | 受注ワークフロー、受注ルール、CSV インポート |
| 第14章 | 出荷・売上管理 | 出荷指示、売上計上、ドメインモデル改善 |
| 第15章 | 請求・回収管理 | 請求データ生成、入金管理、消込処理 |
第5部: 調達管理機能
| 章 | タイトル | 概要 |
|---|---|---|
| 第16章 | 発注管理 | 発注ワークフロー、ドメインイベント、明細管理 |
| 第17章 | 仕入・支払管理 | 仕入管理、支払管理、リファクタリング |
第6部: 在庫管理機能
| 章 | タイトル | 概要 |
|---|---|---|
| 第18章 | 在庫管理 | 倉庫・棚番マスタ、在庫データ、在庫ルール |
第7部: 品質とリファクタリング
| 章 | タイトル | 概要 |
|---|---|---|
| 第19章 | テスト戦略 | テストピラミッド、TestContainer、受け入れテスト |
| 第20章 | 継続的リファクタリング | 値オブジェクト、メソッド抽出、ドメインサービス |
| 第21章 | アーキテクチャの検証 | ArchUnit、JIG、品質メトリクス |
第8部: 運用と発展
| 章 | タイトル | 概要 |
|---|---|---|
| 第22章 | 非機能要件 | 実行履歴管理、データダウンロード機能 |
| 第23章 | リリース管理 | バージョニング、CI/CD、JIG アーカイブ |
| 第24章 | 今後の展望 | 機能拡張、アーキテクチャ進化、AI/ML 統合 |
技術スタック
| カテゴリ | 技術 |
|---|---|
| 言語 | Java 25 |
| フレームワーク | Spring Boot 3.x |
| ORM | MyBatis |
| ビルド | Gradle |
| フロントエンド | React + TypeScript |
| ビルドツール | Vite |
| テスト | JUnit 5, Cypress |
| ドキュメント | JIG, JIG-ERD |
| 品質管理 | SonarQube, ArchUnit |
システム概要図
開発タイムライン
| フェーズ | 期間 | 主な成果物 |
|---|---|---|
| Phase 1 | 2024-10-02 〜 2024-10-10 | 環境構築 |
| Phase 2 | 2024-10-12 〜 2024-11-05 | マスタ管理 |
| Phase 3 | 2025-01 〜 2025-01-31 | 取引先管理 |
| Phase 4 | 2025-02 〜 2025-04 | 受注管理 |
| Phase 5 | 2025-05 〜 2025-08 | 発注管理 |
| Phase 6 | 2025-08-23 〜 2025-09-22 | 在庫管理 |
| Phase 7 | 2025-09 | 出荷・売上管理 |
| Phase 8 | 2025-10-28 〜 2025-11-01 | 仕入・支払管理 |
| Phase 9 | 2025-11-04 〜 2025-11-28 | ドキュメント整備 |
開発フェーズ詳細
Phase 1: 環境構築とセットアップ(2024-10-02 〜 2024-10-10)
概要
プロジェクトの基盤となる開発環境を構築。フロントエンド・バックエンド両方の初期セットアップを実施。
主な作業内容
- Vite + React + TypeScript によるフロントエンド環境構築
- Spring Boot によるバックエンド API 環境構築
- ESLint、Gradle などの開発ツール設定
- CI/CD パイプラインの初期構築
代表的なコミット
| コミット | 日付 | 内容 |
|---|---|---|
e7d06554 |
2024-10-02 | build: フロントエンドセットアップ |
成果物
- フロントエンド基盤(React + TypeScript + Vite)
- バックエンド基盤(Spring Boot + Gradle)
- 開発環境設定ファイル群
Phase 2: マスタ管理機能開発(2024-10-12 〜 2024-11-05)
概要
システムの基盤となるマスタデータ管理機能を実装。部門、社員、ユーザー、商品の CRUD 機能を開発。
主な作業内容
- 部門マスタ管理(階層構造対応)
- 社員マスタ管理(部門割当、従業員詳細情報)
- ユーザー管理機能
- 商品マスタ管理(顧客別販売単価対応)
アーキテクチャ
代表的なコミット
| コミット | 日付 | 内容 |
|---|---|---|
b1913fcb |
2024-10-21 | feat: 部門・社員(フロントエンド実装開始) |
7e3b42dd |
2024-11-01 | feat: 部門・社員(従業員詳細情報拡張) |
8274ac90 |
2024-11-01 | feat: 部門・社員(API 従業員管理追加) |
dac9fa60 |
2024-11-05 | feat: 商品(顧客別販売単価対応) |
技術的なポイント
- 貧血ドメインモデルでの初期実装
- MyBatis による柔軟なデータアクセス
- React コンポーネントの段階的構築
Phase 3: 取引先管理システム開発(2025-01 〜 2025-01-31)
概要
顧客と仕入先を統合した取引先管理システムを構築。パーティモデルを採用し、同一組織が複数の役割を持てる設計を実装。
主な作業内容
- 取引先グループ管理
- 取引先分類管理
- 地域マスタ管理
- 取引先マスタ(顧客・仕入先統合)
- 顧客マスタ管理
- 仕入先マスタ管理
データモデル
代表的なコミット
| コミット | 日付 | 内容 |
|---|---|---|
c8107799 |
2025-01-31 | docs: TODO(パートナー管理 API/UI 完了マーク) |
成果物
- 取引先管理 API(CRUD 完全実装)
- 取引先管理 UI
- パーティモデルによる柔軟な組織管理
Phase 4: 受注管理システム開発(2025-02 〜 2025-04)
概要
販売プロセスの入口となる受注管理機能を実装。受注から売上計上までのワークフローを構築。
主な作業内容
- 受注一覧・検索・登録・編集・削除
- 受注明細管理
- 受注ステータス管理
- 受注ルール設定
ワークフロー
Phase 5: 発注管理システム開発(2025-05 〜 2025-08)
概要
調達プロセスの中核となる発注管理機能を実装。仕入先への発注から入荷までのワークフローを構築。
主な作業内容
- 発注一覧・検索・登録・編集・削除
- 発注ダウンロード機能
- 発注ステータス管理
- ドメインイベントパターンの実装
- ナビゲーションへの調達セクション追加
アーキテクチャ改善
代表的なコミット
| コミット | 日付 | 内容 |
|---|---|---|
| - | 2025-08-23 | feat: ナビゲーションに調達セクション追加 |
| - | 2025-09-06 | refactor: 発注管理 |
Phase 6: 在庫管理システム開発(2025-08-23 〜 2025-09-22)
概要
倉庫・棚番を含む包括的な在庫管理システムを実装。在庫の追跡、管理、レポーティング機能を構築。
主な作業内容
- 在庫一覧・検索・登録・編集・削除
- 在庫ダウンロード/アップロード機能
- 倉庫マスタ管理
- 棚番管理
- 在庫ルール設定
- E2E テスト実装
データモデル
代表的なコミット
| 日付 | 内容 |
|---|---|
| 2025-09-19 | feat: 在庫管理(段階的実装) |
| 2025-09-20 | feat/test/refactor: 在庫管理 |
| 2025-09-22 | feat: 倉庫管理 |
技術的なポイント
- ドメインモデルの参照から値への変更
- CSV インポート/エクスポート機能
- Cypress による E2E テスト
Phase 7: 出荷・売上管理システム開発(2025-09)
概要
受注から出荷、売上計上までの一連のプロセスを管理する機能を実装。
主な作業内容
- 出荷管理機能
- 売上計上管理
- 参照から値への変更によるドメインモデル改善
- E2E テスト実装
ワークフロー
Phase 8: 仕入・支払管理システム開発(2025-10-28 〜 2025-11-01)
概要
最も集中的な開発期間。4日間で100以上のコミットを実施し、仕入から支払までの調達プロセス後半を完成。
主な作業内容
- 仕入一覧・検索・登録・編集・削除
- 仕入ステータス管理
- 支払管理・支払実績
- ダウンロード機能
- 広範なテスト実装(単体・統合・E2E)
- メソッド抽出によるリファクタリング
コミット統計
| 日付 | コミット数 | 主な作業 |
|---|---|---|
| 2025-10-28 | 30+ | 仕入/支払管理基盤実装 |
| 2025-10-29 | 40+ | 機能拡張、テスト実装 |
| 2025-10-30 | 30+ | バグ修正、リファクタリング |
| 2025-10-31 | 10+ | テスト追加 |
| 2025-11-01 | 10+ | 最終調整、品質向上 |
代表的なコミット
| コミット | 日付 | 内容 |
|---|---|---|
74c99f63 |
2025-11-01 | refactor: 仕入/支払管理 |
5abf5a6c |
2025-11-01 | feat: 仕入/支払管理 |
Phase 9: ドキュメント整備と環境改善(2025-11-04 〜 2025-11-28)
概要
Java 25 対応、ビルドツールの最新化、ドキュメント構成の大幅な見直しを実施。
主な作業内容
- Java 25 アップデート対応
- ビルドツール・プラグインの最新化
- JIG プラグイン: 2025.10.1
- ArchUnit: 1.4.1
- SonarQube プラグイン: 7.0.1.6134
- ドキュメント構成の大幅リファイン
- DevContainer 環境の整備
- 発注管理のユースケース・モデル・UI 仕様追加
代表的なコミット
| コミット | 日付 | 内容 |
|---|---|---|
fabc718a |
2025-11-04 | fix: ArchUnit を 1.4.1 にアップデート |
f751e491 |
2025-11-05 | fix: SonarQube プラグイン更新 |
bd8a1ea9 |
2025-11-28 | docs: ドキュメント構成と内容を大幅リファイン |
e23b06e9 |
2025-11-28 | docs: 発注管理のユースケース・モデル・UI 仕様を追加 |
実装機能一覧
| 機能モジュール | 実装期間 | ステータス | 備考 |
|---|---|---|---|
| 環境構築 | 2024-10-02 〜 2024-10-10 | 完了 | フロントエンド・バックエンド基盤 |
| 部門管理 | 2024-10-12 〜 2024-11-01 | 完了 | 階層構造対応 |
| 社員管理 | 2024-10-12 〜 2024-11-01 | 完了 | 部門割当、詳細情報 |
| ユーザー管理 | 2024-10-15 〜 2024-11-01 | 完了 | 認証・認可 |
| 商品管理 | 2024-11-05 〜 | 完了 | 顧客別販売単価対応 |
| 取引先管理 | 2025-01 〜 2025-01-31 | 完了 | パーティモデル採用 |
| 受注管理 | 2025-02 〜 2025-04 | 完了 | ワークフロー対応 |
| 発注管理 | 2025-05 〜 2025-08 | 完了 | ドメインイベント実装 |
| 在庫管理 | 2025-08-23 〜 2025-09-22 | 完了 | 倉庫・棚番管理含む |
| 出荷・売上管理 | 2025-09 | 完了 | 受注連携 |
| 仕入・支払管理 | 2025-10-28 〜 2025-11-01 | 完了 | 集中開発 |
開発パターンと特徴
1. 段階的な機能展開
各モジュールは独立して開発され、段階的に統合。モジュール間の依存関係を最小化し、並行開発を可能に。
2. テスト重視
TDD アプローチに従い、各フェーズで以下のテストを実装:
- 単体テスト(ドメイン層、サービス層)
- 統合テスト(API 層)
- E2E テスト(Cypress)
3. 継続的リファクタリング
ドメインモデルの段階的改善:
- 貧血ドメインモデル → リッチドメインモデル
- 参照 → 値オブジェクトへの変更
- メソッド抽出による複雑度低減
4. 密集的なコミット
特に仕入/支払管理フェーズでは1日に30以上のコミットを実施。
小さな変更を頻繁にコミットする XP のプラクティスを徹底。
5. ドキュメント同期
機能実装と同時に以下を更新:
- UI 仕様書
- ユースケース定義
- データモデル定義
- API 仕様
リリースバージョン履歴
本プロジェクトでは各マイルストーンごとにリリースバージョンを作成し、JIG および JIG-ERD によるアーキテクチャドキュメントをアーカイブしています。
| バージョン | リリース日 | 主な内容 |
|---|---|---|
| v0.1.0 | 2025-04 | 初期リリース(基盤構築、認証機能) |
| v0.2.0 | 2025-04 | マスタ管理(部門・社員) |
| v0.3.0 | 2025-04 | マスタ管理(商品) |
| v0.4.0 | 2025-04 | 取引先管理 |
| v0.5.0 | 2025-04 | 受注管理(基盤) |
| v0.6.0 | 2025-04 | 受注管理(完成) |
| v0.7.0 | 2025-06 | 発注管理 |
| v0.8.0 | 2025-09 | 出荷・売上管理 |
| v0.9.0 | 2025-09 | 在庫管理(基盤) |
| v0.10.0 | 2025-09 | 在庫管理(完成) |
| v0.11.0 | 2025-11 | 仕入・支払管理 |
リリース成果物
各バージョンには以下のアーカイブが含まれています:
docs/assets/release/
├── v0_1_0/
│ ├── jig/ # アプリケーション構造分析
│ │ ├── application.html # サービスメソッド一覧
│ │ ├── architecture.svg # アーキテクチャ図
│ │ ├── business-rule.xlsx # ビジネスルール一覧
│ │ ├── composite-usecase.svg # ユースケース複合図
│ │ ├── domain.html # ドメインモデル一覧
│ │ └── term.html # 用語集
│ └── jig-erd/ # ER図
│ ├── library-er-overview.svg # 概要ER図
│ ├── library-er-summary.svg # サマリーER図
│ └── library-er-detail.svg # 詳細ER図
├── v0_2_0/
│ └── ...
└── v0_11_0/
└── ...
リリース手順
チェックリスト:
- ドキュメントの更新(ユースケース、ドメインモデル、データモデル、UI)
- スナップショットの作成(JIG/JIG-ERD アーカイブ)
- バージョンタグ付け
- リリースの作成
ユースケース定義
本システムのユースケースは docs/dev.adoc に定義されています。
主要ユースケース一覧
詳細なユースケース定義は以下のファイルを参照してください:
-
ユースケース図・仕様:
docs/dev.adoc -
Gherkin 仕様:
docs/assets/配下の各.featureファイル
開発環境構築
開発環境の構築手順は docs/build.adoc に詳細に記載されています。
セットアップ概要
フロントエンド環境
| ツール | 説明 |
|---|---|
| NVM | Node.js バージョン管理 |
| Vite | 高速ビルドツール |
| React | UI フレームワーク |
| TypeScript | 型安全な JavaScript |
| Jest | テストフレームワーク |
| Cypress | E2E テストフレームワーク |
バックエンド環境
| ツール | 説明 |
|---|---|
| Java 25 | プログラミング言語 |
| Gradle | ビルドツール |
| Spring Boot | アプリケーションフレームワーク |
| MyBatis | O/R マッパー |
| Flyway | データベースマイグレーション |
| JIG | アーキテクチャドキュメント生成 |
| JIG-ERD | ER 図自動生成 |
詳細な構築手順は docs/build.adoc を参照してください。
関連リソース
- GitHub リポジトリ - ソースコード
本書のポイント
- 実践ベース - 13ヶ月の実際の開発プロジェクトを題材に、実践的なノウハウを提供
- データモデリング重視 - ER 設計からドメインモデルへの対応まで体系的に解説
- 段階的な成長 - 貧血ドメインモデルからリッチドメインモデルへの進化過程を追体験
- テスト重視 - TDD の実践例を豊富に掲載
- XP プラクティス - 小さなコミット、継続的リファクタリングの実践
- ツール活用 - JIG、JIG-ERD、ArchUnit など Java エコシステムのツールを紹介