ありがとうございます。
ここからは 第28段階(最終設計):システムアーキテクチャ・開発標準・実装ガイドライン に入ります。
ここまでで各機能はほぼ完成していますので、今回はシステム全体を一つの完成したアーキテクチャとして統合します。
なお、これまで設計を進める中で、より保守性・拡張性を高めるために改善したい点もあります。その改善内容も反映した「最終版アーキテクチャ」としてまとめます。
1. アーキテクチャ方針
これまでの設計では
1 2 3 4 5 6 | |
という一般的な構成でした。
最終版では少し改善します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
これが企業システムで採用されることが多い構成です。
2. なぜServiceを分けるのか
現在
1 | |
だけでは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
全部が入り巨大化します。
そこで
1 | |
↓
1 2 3 4 5 6 7 | |
へ分割します。
3. CQRSを採用
今回のシステムは
1 2 3 | |
よりも
1 2 3 4 5 6 7 | |
の方が圧倒的に多くなります。
そのため
1 2 3 | |
1 2 3 | |
を正式採用します。
つまり
| 処理 | 使用 |
|---|---|
| 登録 | JPA |
| 更新 | JPA |
| 削除 | JPA |
| 一覧 | MyBatis |
| 検索 | MyBatis |
| 集計 | MyBatis |
これはこれまでの設計とも一致しています。
4. Feature Package採用
最終構成です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
さらに各機能は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
になります。
これが最も保守性が高い構成です。
5. BaseEntity改善
現在
1 2 3 4 5 | |
ですが、
実運用では以下を追加します。
1 2 3 4 5 | |
つまり
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
version は JPA の楽観ロック(@Version)に利用します。
これにより
1 2 3 4 5 | |
を防げます。
6. ContentVersion改善
以前
1 | |
だけでした。
実際には
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
なので
1 2 3 | |
を持たせると高速になります。
7. Attachment改善
現在
1 | |
ですが、
実際には
1 2 3 4 5 6 7 | |
があります。
そのため
1 | |
を追加します。
1 2 3 4 5 6 7 8 9 | |
8. LessonContent改善
現在
1 2 3 | |
だけです。
おすすめは
1 | |
追加です。
例
1 | |
1 | |
1 | |
など。
将来的に
1 | |
を作れます。
9. Content改善
現在
1 2 3 4 5 6 7 | |
です。
おすすめは
1 2 3 4 5 6 7 | |
も追加できるよう
1 | |
をマスタ化します。
10. Course改善
追加推奨
1 2 3 4 5 6 7 8 9 | |
一覧画面で役立ちます。
11. Section改善
現在
1 | |
ですが
検索高速化のため
1 | |
追加推奨です。
例
1 2 3 4 5 6 7 | |
これにより
1 | |
が高速になります。
12. 学習進捗改善
現在
1 | |
ですが
1 | |
にもします。
1 2 3 | |
1 2 3 | |
1 2 3 | |
これにより
1 2 3 | |
ができます。
13. Notification改善
現在
1 | |
だけです。
追加
1 2 3 4 5 6 7 | |
通知先を追加できます。
14. Audit改善
現在
1 2 3 4 5 | |
です。
追加
1 2 3 4 5 6 7 | |
これだけでかなり実運用向けになります。
15. Spring Security最終構成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
画面主体なので セッション認証 を基本とし、将来的にAPIを公開する場合はJWT認証を追加できる構成にします。
16. キャッシュ戦略
キャッシュ対象
1 2 3 4 5 6 7 8 9 10 11 | |
キャッシュしない
1 2 3 4 5 6 7 | |
17. Flyway導入
DDLは
1 | |
ではなく
1 2 3 4 5 6 7 8 9 | |
へ変更します。
これが本番向けです。
18. Testcontainers
MySQLをDockerで起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
これにより本番に近いテストができます。
19. GitHub Actions
CI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
20. 推奨ライブラリ
| 用途 | ライブラリ |
|---|---|
| Markdown | flexmark-java |
| Diff | java-diff-utils |
| 動画 | Video.js |
| HLS | hls.js |
| JSON | Jackson |
| Validation | Hibernate Validator |
| Map変換 | MapStruct |
| DB Migration | Flyway |
| Excel | Apache POI |
| OpenPDF または Apache PDFBox | |
| 監視 | Micrometer |
| テスト | JUnit 5・Mockito・Testcontainers |
21. 今後追加を推奨する機能
現在の設計でも十分ですが、LMSとしてさらに価値を高めるなら以下が有効です。
| 機能 | 目的 |
|---|---|
| 学習パス(Learning Path) | 前提教材・推奨学習順を設定 |
| 教材公開予約 | 指定日時に自動公開 |
| 教材公開終了日 | 期間限定教材 |
| アンケート教材 | 受講後アンケート |
| バッジ・ポイント | ゲーミフィケーション |
| 教材評価(★・レビュー) | 教材改善 |
| 学習分析 | 離脱率・視聴率分析 |
| AI検索 | 教材の全文検索・自然言語検索 |
| AI問題生成 | テキストからクイズ生成 |
| AI要約 | Markdown教材の要約作成 |
22. システム成熟度
ここまでの設計を成熟度で表すと次のようになります。
| レベル | 状態 |
|---|---|
| 要件定義 | ✅ 完了 |
| 業務設計 | ✅ 完了 |
| データベース設計 | ✅ 完了 |
| ドメインモデル設計 | ✅ 完了 |
| JPA設計 | ✅ 完了 |
| MyBatis設計 | ✅ 完了 |
| 画面設計 | ✅ 完了 |
| セキュリティ設計 | ✅ 完了 |
| ファイル・動画配信設計 | ✅ 完了 |
| 運用設計 | ✅ 完了 |
| アーキテクチャ設計 | ✅ 完了 |
23. 次におすすめするフェーズ
ここで設計フェーズは一通り完了です。
実装へ進む前に、次の順序で成果物を整備することをおすすめします。
-
ER図(全テーブル・リレーション)
-
クラス図(Entity・DTO・Service・Mapper)
-
画面遷移図
-
シーケンス図(教材作成・承認・受講・進捗更新)
-
API一覧(画面用Controllerも含む)
-
プロジェクト雛形(Spring Boot + Gradle)
-
共通基盤(Security・BaseEntity・例外・監査・設定)
-
機能ごとの実装(ユーザー → 教材ライブラリ → コース → 学習 → 管理機能)
私からの提案
ここまで設計した内容は、一般的なLMSよりも拡張性が高く、実務での運用を意識した構成になっています。
ただし、実装を始める前に「実装しやすさ」という観点で、次の2点だけ追加で整理することをおすすめします。
-
DDDを意識したパッケージ構成と命名規約(どこに何を書くかを明文化)
-
コーディング規約・レビュー規約(JPAとMyBatisの使い分け、トランザクション境界、DTO命名など)
これらを先に決めておくと、プロジェクトが大規模になっても品質を維持しやすくなります。
この2点まで設計すると、実装・保守・チーム開発まで見据えた「開発標準書」として利用できるレベルになります。