💡

短期集中インターンで体験したDDDとスクラム開発の基礎 〜損益計算書・貸借対照表システムの開発を通して〜

に公開

はじめに

5日間の短期エンジニアインターンシップで、ドメイン駆動設計(DDD)スクラム開発を体験しました。本記事では、会計システム(損益計算書・貸借対照表)の開発を通じて学んだ以下の内容を紹介します。

  • DDD・スクラムの基本的な考え方
  • モデリング〜実装〜チーム開発のプロセス
  • 実践して得られた気付きや学び

「DDDって結局何?」「インターンでアジャイル開発ってどんな感じ?」と思っている方に、実体験ベースでお届けします。


なぜDDDとスクラムを学ぶのか?

今回の開発課題は、会社の経営状態を表す損益計算書(PL)と貸借対照表(BS)を作成するシステムの構築でした。

これに取り組むにあたり、以下の2つの開発手法を採用しました。

  • DDD(ドメイン駆動設計)
    ソフトウェアが解決すべき「ドメイン」に深く入り込み、機能性と保守性を両立した設計を実現する手法。

  • スクラム開発
    アジャイル開発の一種で、小さな単位(スプリント)で開発を進めながら、ユーザーに価値を届けるフレームワーク。

この2つを組み合わせることで、「意味あるシステム」を「チームで素早く」作ることが可能になります。


ドメイン駆動設計(DDD)の実践

DDDの目的とアプローチ

DDDの主目的は、ドメインに根差した問題解決力のあるソフトウェアを作ること。そのために以下の2点を重視しました。

  1. 機能性向上

    • 業務知識を「ドメインモデル」に落とし込む
    • モデルは開発中も継続的に見直す
  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やスクラムに触れてみたい方の一歩になれば嬉しいです!

Discussion