はじめに
5日間の短期エンジニアインターンシップで、ドメイン駆動設計(DDD)とスクラム開発を体験しました。本記事では、会計システム(損益計算書・貸借対照表)の開発を通じて学んだ以下の内容を紹介します。
- DDD・スクラムの基本的な考え方
- モデリング〜実装〜チーム開発のプロセス
- 実践して得られた気付きや学び
「DDDって結局何?」「インターンでアジャイル開発ってどんな感じ?」と思っている方に、実体験ベースでお届けします。
なぜDDDとスクラムを学ぶのか?
今回の開発課題は、会社の経営状態を表す損益計算書(PL)と貸借対照表(BS)を作成するシステムの構築でした。
これに取り組むにあたり、以下の2つの開発手法を採用しました。
-
DDD(ドメイン駆動設計)
ソフトウェアが解決すべき「ドメイン」に深く入り込み、機能性と保守性を両立した設計を実現する手法。 -
スクラム開発
アジャイル開発の一種で、小さな単位(スプリント)で開発を進めながら、ユーザーに価値を届けるフレームワーク。
この2つを組み合わせることで、「意味あるシステム」を「チームで素早く」作ることが可能になります。
ドメイン駆動設計(DDD)の実践
DDDの目的とアプローチ
DDDの主目的は、ドメインに根差した問題解決力のあるソフトウェアを作ること。そのために以下の2点を重視しました。
-
機能性向上
- 業務知識を「ドメインモデル」に落とし込む
- モデルは開発中も継続的に見直す
-
保守性向上
- 頻繁な変更に耐えられる設計パターンを使う(例:エンティティ、リポジトリ、値オブジェクト)
モデリング手法:"sudo"モデリングの活用
導入しやすく、DDDのエッセンスを体験できる「sudoモデリング」を実施しました。以下の4種類の図を作成しました。
1. システム関連図(System Context Diagram)
- 会計システムと「経営企画部門」などの外部アクターとの関係を定義
- 例:ユーザーが仕訳データを入力 → PL/BSを確認する流れ
2. ユースケース図(Use Case Diagram)
- ユーザーの視点から必要な機能を洗い出し
- 登場したユースケース例:
- 部署登録 / 科目登録 / 仕訳登録
- 損益計算書・貸借対照表の閲覧
- CSVダウンロード、仕訳のフィルタリングなど
3. オブジェクト図(Object Diagram)
- ドメインオブジェクトの具体例を示した図
- 例:部署「東京営業1課」や、勘定科目「給料」「交通費」、仕訳データのサンプルなど
4. ドメインモデル図(Domain Model Diagram)
- 上記を抽象化して整理したクラス図形式
- 属性・制約・関連性・集約の範囲などを明示
- Department, Account, JournalEntry などのエンティティを定義
- 借方・貸方の明細や勘定科目の階層構造などもモデルに反映
モデルとコードの整合性 + レイヤードアーキテクチャ
DDDの核心は、「モデル ≒ コード」にすること。
その実現のため、以下のような設計方針を採用しました。
- レイヤードアーキテクチャ(ドメイン層・アプリケーション層・インフラ層の分離)
-
依存性逆転の原則(DIP)によって安定性と保守性を確保
例:UseCase層はインターフェースに依存し、実装はインフラ層に任せる
スクラム開発の体験
スプリント構成
5日間のインターンで、2つのスプリント(2.5日 × 2)を実施。各スプリントで以下のイベントを行いました。
- スプリントプランニング
- デイリースクラム
- スプリントレビュー
- レトロスペクティブ(KPT)
チームビルディング
-
インセプションデッキで開発目的を共有
→ PL/BS作成の自動化による経営者の工数削減がゴール -
ワーキングアグリーメントでチームの行動規範を明確化
→「楽しく開発しよう」「AIも使おう」「何でも聞こう」など
使用技術と開発環境
- Docker + MySQL による開発環境構築
- バックエンドは Spring Boot / Kotlin(DIも意識)
- 開発中のトラブル(DB接続など)は Claude などのAIツールで解決支援
インターンを通して得られた学び
DDDに関する学び
- モデル→実装→再モデリングの循環が開発に深みを与える
- DDDによって「何を作るべきか」がクリアになり、開発が進めやすくなった
スクラム開発の学び
- チーム開発の楽しさと、目的の共有が重要だと実感
- モブプロ・ペアプロでの会話が、理解を深め、バグ防止にもつながった
その他の気づき
- AI活用は便利だが、中身の理解あってこそ本領を発揮する
- エンジニアとしてのキャリアや働き方を考えるきっかけになった
今後の課題・挑戦したいこと
- 削除・編集機能の実装
- PL/BSの高度なフィルタリング・期間指定
- 負債の解消
- フロントエンドの改良(リファクタリング、CSV出力など)
参考資料リンク集
最後に
たった5日間のインターンでしたが、DDDとスクラムという「現場で求められる開発スキル」を実践的に体験できたことは、大きな財産になりました。
この記事が、これからDDDやスクラムに触れてみたい方の一歩になれば嬉しいです!