1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データモデル × 仕様駆動開発 = 迷子にならないシステム開発フロー

1
Last updated at Posted at 2026-06-28

やって来るAI開発時代、変わりゆくシステム開発フローのひとつに データモデル × 仕様駆動開発 があると思います。
これを検証する為にデータモデルツールを バイブコーディングで自作 し、ツールで作成したデータモデル( spec.md )を使用して GitHub Spec Kit のフローで家計簿管理のデモシステムを作ってみました。
生成AIは基本的に Antigravity を使用しました。

コンセプト

業務システムの目的は基本的に台帳を管理することです。台帳について考える時「 どのような 台帳を管理するか」と「 どのように 台帳を管理するか」という二つの観点があります。
「どのような」に対応するのがデータモデル(≒ ドメインモデル)で変更コストが大きいです。一方、「どのように」に対応するのがUIやAPIで変更コストが比較的小さいです。
生成AIは試行錯誤が得意とはいえ、都度全体に影響を与える変更が入ってしまっては実務として耐えられません。そこで、変更コストが大きいデータモデル(≒ ドメインモデル、何を管理したいか)を先に固めておいて、変更コストが小さいUIやAPI等を生成AIを活用して試行錯誤する、というのが基本的なコンセプトです。
また、どのような方法であっても業務要件を生成AIに伝える必要がありますが、実装と切り離したデータモデルやドメインモデルとして業務要件を整理することで最も効率よく正確に生成AIとコミュニケーションすることが出来るのではないか、という気もしています。

まずは開発過程をスクショで見てください

データモデルの作成

データモデルにはドメイン層に相当するビジネスロジックの埋め込みまで行います。

  1. テーブルを配置し、関連線を引く
    01_データモデル(サンプル無し).png

  2. コード定義はサブビューで定義する
    02_コード定義.png

  3. テーブル定義を編集する(外部キーやユニークキーは複数定義できます)
    03_テーブル定義.png
    データ型として作成したコード定義を選択できます(値オブジェクトは後述)
    18_データ型の設定.png

  4. ビジネスロジックは自然言語で記入する
    04_導出定義.png

  5. AIに依頼してサンプルインスタンス作成(geminiのAPIを利用)
    05_インスタンス生成.png

  6. サンプルインスタンスを見てモデルの妥当性を検証する
    06_データモデル(サンプル有り).png

    • 自然言語のロジックがAIに伝わるか確認
    • インスタンスを見てモデルの不備を確認
    • GitHub Spec Kitに渡してテストの前提データとして使用(機能テストのとき、マスタデータなどスコープ外の前提データを賄う)
  7. 集約を定義する(機能の単位をAIが検討する材料にします)
    14_集約定義.png

  8. 値オブジェクトの定義も可能(今回の例では使っていません)
    17_値オブジェクト設定.png

このようにデータモデル/値オブジェクト/集約の定義を統合することで、 ドメインモデル全体を設定 できることを目指しました( ドメインモデリングツール )。
19_ドメインモデル.png

Github Spec Kitのフローで開発

まずは下記の3点を用意します。
16_ディレクトリ構成.png
※赤枠は上から順番に「システム開発憲法」「データモデル正本」「全体鳥瞰図・CRUD図」です。

  1. システム開発憲法
    つまり constitution.md です。ここにMyベストプラクティスを詰め込みました。かといって煩雑になりすぎても本質を見失うので、シンプルに把握できる範囲に留めています。

  2. データモデル正本
    ツールから出力した spec.md です。

  3. 全体鳥瞰図・CRUD図による構成確認
    機能の単位をAIと相談しながら決めます。名前は spec.md です。
    ここで決めた機能を Github Spec Kit の開発単位にします。今回は下記のように決めました。
    15_CRUD図.png

  4. 各機能の仕様を策定
    ドメインモデル以外の仕様は各機能のspec.mdの中で決める必要があります。例えば、年月プルダウンに表示する期間の範囲はドメインモデルには含まれないので、各機能のspec.mdに含めました。

    FR-004: 年月選択プルダウンの動的生成
    プルダウンの年月選択肢には、最大で過去6か月分の確定月(存在する場合)と、最新の未確定月(最も新しい確定月の翌月、確定月が1つもない場合はシステム開始月 2026-04-01)のみを表示・選択できるように制御する。
    

完成した家計管理システム

ここから先は完全自動生成です。バグの修正依頼も対話で行いました。
今回は簡単の為にデータベースは使用せず、データの管理はメモリ上のみとしました。
AIが生成したサンプルデータを初期データとして取り込んでいるので、起動してすぐイメージを確認できます。

  1. ダッシュボード
    07_ダッシュボード.png

  2. 取引履歴一覧
    08_取引履歴一覧.png

  3. 取引登録
    取引後残高は ドメインモデルにて自然言語で定義した通り 、月初残高と当月の先行する収支取引/為替取引/手数料/利息等を考慮して計算されています。
    09_取引登録.png

  4. 予算設定
    10_予算設定.png

  5. 口座管理
    11_口座管理.png

  6. 費目管理
    12_費目管理.png

  7. 月次確定
    13_月次確定.png

気になった方はGitHubを見に来てください!

  1. オリジナルのデータモデリングツール
    SchemaDesigner

  2. 家計簿管理デモシステム
    NestLedger

今後の課題:システム開発憲法( constitution.md )の改善

  • Chain-of-Thought 等のプロンプト技術を応用することで論理の一貫性を強化する
  • spec.mdplan.md の人間にとっての読み易さを担保する(レビュー容易性の向上)
  • spec.mdMermaid 等の描画ツールを組み込み、百聞は一見に如かずを実現する(サンプルインスタンスを組み込んだ画面イメージで仕様のブレを防止)

まとめ:エンジニアの価値は「設計・制約の定義」へ

これからの時代、エンジニアの価値は 「ドメインの本質を捉えたデータモデルを設計すること」 になるのではないかと考えています。これによって 「AIが迷子にならないための開発フローを設定」 できるのではないでしょうか。

日進月歩、いや秒進分歩の生成AIの世界で何が起きるのか、これからも可能性を探っていきたいです。

※参考
Github spec kit
Github Spec Kitのリポジトリです。

業務システムモデリング練習帳
サンプルとして挙げたデータモデルは本書を参考にさせて頂きました。またオリジナルのデータモデリングツールは、もともと渡辺氏作成のツールに自分なりのアレンジを加えたいという願望から始まっています。

実践ドメイン駆動設計
システム開発憲法( constitution.md )を書く際の参考にさせて頂きました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?