情報モデルの抽出
概要
- 日程: Day 2 / セッション 2
- 時間: [9:30-10:30]
- 形式: 実習
- ゴール: 整理分類済み情報定義書をもとに(条件)、情報モデルを3個以上抽出し(行動・基準)、各モデルの属性・関係・制約条件を図(draw.io または Mermaid)で表現した「情報モデル一覧」を完成できる(基準)
- 学習形式: ハンズオン実習(AIサポートあり)
導入(5分)
セッション1で、情報モデルは「属性・関係・制約条件の3点セット」で、要件と実装の橋渡し役だと押さえました。
このセッションでは、その橋を自分の手で架けます。
材料はすでに揃っています。Day 1に作った「整理分類済み情報定義書」です。
そして朗報があります。モデル名の候補は、もうあなたの手元に書いてあります。
どこにあると思いますか?
答えは「見出し」です。Day 1でカードソーティングをしたとき、各グループに付けた見出し。
あれこそが「情報を抽象的に捉えた際の情報」、つまり情報モデルの名前の第一候補です。
このセッションの流れは3ステップです。
- 見出しからモデル名の候補を選ぶ
- 各モデルの属性・型・制約条件をAIとの対話で洗い出す
- モデル間の関係を図にして、ペルソナ視点でレビューする
まず例(家計簿システム)で手順を確認し、その後、自分の開発テーマで同じ手順を実行します。
本編(15分)
1. 「見出し」からモデル名を抽出する
整理分類済み情報定義書を開いてください。
見出しを眺めて、次の基準でモデル名の候補に丸を付けます。
- 名詞であること(「支出記録」は候補。「支出を登録」は機能なので除外)
- ペルソナが繰り返し扱うこと(1回きりの情報はモデルにしない)
- 複数の項目を束ねていること(属性を持てる見込みがある)
家計簿システムなら、見出し「支出」「カテゴリ」「予算」がそのまま候補になります。
逆に「使いやすさ」という見出しは候補になりません。名詞ですが、束ねているのが情報ではなく要望だからです。要望は非機能要件(今日の午後)で扱います。
ここで少し考えてみてください。あなたの情報定義書の見出しのうち、いくつがこの基準を通りそうですか?
3個未満なら、見出しの粒度が大きすぎるサインです。1つの見出しを2つに割れないか検討しましょう。
コード例・実例
家計簿システムの整理分類済み情報定義書(抜粋)からの抽出例です。
| 見出し | モデル候補? | 理由 |
|---|---|---|
| 支出記録 | ○ | 名詞・毎日発生・日付や金額を束ねる |
| カテゴリ | ○ | 名詞・支出の分類に繰り返し使う |
| 予算 | ○ | 名詞・月ごとに設定し支出と比較する |
| 節約のコツ | × | ペルソナへの助言であり、構造化する属性が見えない |
ここがポイント
- モデル名は探すのではなく「選ぶ」。Day 1の見出しが候補リスト
- 名詞・繰り返し・属性を束ねる、の3基準でふるいにかける
- 落選した見出しは捨てない。非機能要件やプレゼンテーションの材料として後で使う
コラム
ER図の生みの親 ピーター・チェン
情報を「実体(Entity)」と「関連(Relationship)」で表すERモデルは、1976年に台湾出身の計算機科学者ピーター・チェンが発表した論文「The Entity-Relationship Model: Toward a Unified View of Data」で生まれました。この論文はデータベース分野で最も引用される論文の一つです。チェンは後に「ERモデルの発想は漢字や古代の象形文字に通じる。世界をモノとその関係で写し取る考え方は数千年前からあった」と語っています。Day 1で触れた甲骨文字の話と繋がるのが面白いところです。最新技術に見えるものの根っこには、人類が昔からやってきた「情報の整理と分類」があります。
2. 属性と制約条件をAIとの対話で洗い出す
モデル名が決まったら、属性・型・制約条件を埋めます。
ここがAIの使いどころです。まず自分で思いつく属性を書き、その後AIに抜け漏れを指摘させます。
AIへのプロンプト例です。そのまま使って構いません。
家計簿システムの「支出記録」の属性を洗い出してください。
型と制約条件も提案してください。
ペルソナは「節約を始めたい新社会人」です。
あなたの提案した属性のうち、このペルソナに不要なものはどれですか?
理由も添えてください。
大事なのは2つ目のプロンプトです。AIは属性を「盛る」傾向があります。
セッション1の「単純化」を思い出してください。捨てる判断はペルソナを知っているあなたの仕事です。
続いて、モデル間の関係を考えます。「支出記録はカテゴリに属するか?」「予算はカテゴリごとか、全体で1つか?」
こうした問いに答えると、関係と多重度(1対多など)が決まります。
コード例・実例
家計簿システムの3モデルの関係をMermaidのER図で表した例です。
図中の属性名は英数字で書き、意味は下の対応表で補足します(日本語をそのまま属性名にすると図が壊れやすいためです)。
属性の対応表(日本語での意味と制約条件):
| モデル | 属性 | 意味 | 型・制約条件 |
|---|---|---|---|
| EXPENSE(支出記録) | spent_on | 支出日 | 日付型・必須 |
| EXPENSE(支出記録) | amount | 金額 | 整数型・必須・0以上 |
| EXPENSE(支出記録) | memo | メモ | 文字列型・任意・100文字まで |
| CATEGORY(カテゴリ) | name | カテゴリ名 | 文字列型・必須・重複不可 |
| BUDGET(予算) | target_month | 対象月 | 文字列型(YYYY-MM)・必須 |
| BUDGET(予算) | limit_amount | 上限金額 | 整数型・必須・1以上 |
関係の読み方: 1つのカテゴリは複数の支出記録を分類し(1対多)、1つのカテゴリは月ごとの予算を複数持ちます(1対多)。
「支出記録は必ず1つのカテゴリに属する」も制約条件の一つです。
ここがポイント
- 属性の洗い出しは「自分で書く→AIに補完させる→ペルソナ基準で捨てる」の3手順
- 制約条件は「これが破られるとペルソナが困る」ものを書く(金額がマイナス、カテゴリ無しの支出など)
- 関係には多重度(1対1・1対多・多対多)を必ず添える。多対多が出たら要注意、間にモデルが隠れていることが多い
コラム
多対多の罠と「見えないモデル」
初心者がER図で最初にハマるのが多対多です。例えば「レシピ」と「食材」は多対多に見えます。しかし実装しようとすると「この関係自体の情報(分量・単位)はどこに書くの?」と行き詰まります。答えは、間に「レシピ食材(分量・単位を持つ)」という隠れたモデルを立てることです。多対多の線を見つけたら「この線、名前を付けたら情報を持ちたがらないか?」と自問してみてください。線がモデルに昇格する瞬間は、情報モデリングで一番気持ちのいい瞬間です。
💬 AIに聞いてみよう
- 「家計簿システムの『支出記録』の属性を洗い出してください。型と制約条件も提案してください」
- 「『支出記録』と『予算』の間に直接の関係は必要ですか? カテゴリ経由で十分ですか? 両案のメリット・デメリットを比較してください」
- 「私の開発テーマ『(自分のテーマ)』の情報モデル候補を、この整理分類済み情報定義書(貼り付け)から提案してください。ただし機能は除外してください」
実習・演習(35分)
課題
自分の開発テーマで、以下を実施してください。
- モデル名の抽出(5分): 整理分類済み情報定義書の見出しから、3基準(名詞・繰り返し・属性を束ねる)でモデル名を3個以上選ぶ
- 属性・制約条件の洗い出し(15分): 各モデルについて、まず自分で属性を書き、AIとの対話で型・制約条件を補完する。ペルソナに不要な属性は理由を添えて捨てる
- 関係の定義と作図(10分): モデル間の関係と多重度を決め、draw.io または Mermaid のER図で表現する
- ペルソナ視点のレビュー(5分): AIにペルソナを演じさせ、モデルを見せて「あなたの欲しい情報はこの形に入っていますか?」と確認する。指摘があれば修正する
レビュー用のプロンプト例:
あなたは「(ペルソナのプロフィールを貼り付け)」です。
この情報モデル一覧を見て、あなたが日々使う場面を想像してください。
足りない情報、余計な情報、不自然な関係があれば指摘してください。
成果物
「情報モデル一覧」 次を含むこと。
- 情報モデル3個以上(モデル名・属性・型・制約条件の一覧表)
- モデル間の関係図(draw.io または Mermaid、多重度つき)
- ペルソナ視点レビューでの指摘と対応(1件以上。指摘ゼロならその旨を記録)
この成果物は、このあとの状態遷移図・機能一覧・Day 3のテーブル設計・Day 4の実装すべての土台になります。
ヒント
- 手が止まったら、まず家計簿システムの例(支出記録・カテゴリ・予算)を自分のテーマに置き換えて考える。「支出記録にあたるものは何か?」
- 属性が5個を超えたら一度立ち止まり、「ペルソナはこれを本当に使うか?」で間引く
- 多対多の関係が出たら、AIに「この多対多の間に隠れたモデルはありますか?」と聞く
- Mermaidの図が描けないときは、先に表(属性一覧)を完成させる。図は表の写しにすぎない
- 制約条件が思いつかないときは「この値が変だとペルソナはどう困る?」と逆から考える
まとめ(5分)
今回学んだことを一言でまとめると「情報モデルは見出しから選び、属性・関係・制約条件はAIと対話しながらペルソナ基準で決める」です。
- モデル名の候補はDay 1の「見出し」。名詞・繰り返し・属性を束ねる、の3基準で選ぶ
- 属性・型・制約条件は、自分で書く→AIに補完させる→ペルソナ基準で捨てる
- 関係には多重度を添える。多対多には隠れたモデルがいないか疑う
- 仕上げはペルソナ視点のレビュー。「定義→価値の確認→再定義」のPDCAはここでも回る
次のセッション3では、この情報モデルに「状態遷移」を与えます。
すると驚くことに、機能一覧とプレゼンテーション一覧が半ば自動的に出てきます。
あなたの情報モデル一覧が、その材料になります。休憩後にお会いしましょう。
🔄 振り返りチェック
- 見出しをモデル名候補にふるい分ける3基準を言えますか?
- 自分の情報モデルの制約条件を1つ選び、「破られるとペルソナがどう困るか」を説明できますか?
- 自分のER図の関係線を1本選び、多重度とその理由を言えますか?
補足資料
- 参考リンク:
- draw.io(diagrams.net): https://www.drawio.com/
- Mermaid ER図の公式ドキュメント: https://mermaid.js.org/syntax/entityRelationshipDiagram.html
- 発展課題:
- 自分のモデルに多対多の関係を意図的に1つ作り、間に隠れたモデルを立てて解消してみましょう
- ペルソナを別の人物(例: 家計簿なら「家族の支出をまとめて管理する親」)に差し替えたとき、モデルがどう変わるかAIと議論してみましょう
学習ガイド
想定される質問と回答例
| 質問 | ヒント |
|---|---|
| モデルが3個も見つからない | 見出しの粒度が大きい可能性。「ユーザー情報」を「ユーザー」と「設定」に割れないか検討。AIに情報定義書を貼って候補を提案させるのも有効 |
| 逆にモデルが10個以上出てしまった | ペルソナの主要な利用場面に登場するものに絞る。使用頻度の低いものは「候補のまま保留」と記録して先へ進む |
| draw.ioとMermaidどちらを使うべき? | どちらでもよい。マウス操作で考えたいならdraw.io、テキストで素早く直したい(AIに修正させたい)ならMermaid |
| 属性名は日本語と英語どちらで書く? | 一覧表は日本語でよい。Mermaid図に載せる属性名は英数字にして、意味は対応表で補足するとパースエラーを避けられる |
| IDは属性に入れるべき? | 入れてよい。各モデルを一意に識別する属性(PK)と、関係を表す属性(FK)は実装への橋渡しに役立つ。ただしペルソナには見えない属性だと意識しておく |
つまずきやすいポイント
| つまずきポイント | ヒント |
|---|---|
| 「登録画面」「検索機能」など機能・画面をモデルにしてしまう | 「〜する」「〜画面」が付いたら情報ではない。モデルは名詞(支出記録・カテゴリ)。機能と画面はセッション3-4で状態遷移から抽出される |
| AIの提案した属性を全部採用して肥大化する | AIは網羅する方向に偏る。採用の最終基準はペルソナ。「不要なものはどれ?」とAIに逆質問し、自分で捨てる判断をする |
| 関係の多重度を書かずに線だけ引いてしまう | 線1本ごとに「1つの◯◯は何個の△△を持つ?」と声に出して確認する。多重度がないER図はDay 3のテーブル設計で必ず手戻りになる |
| 多対多の関係をそのままにして先へ進んでしまう | 多対多を見つけたら「間に隠れたモデル(関係自体が持つ情報)はないか」を疑う。AIに聞けば中間モデルの案を出してくれる |
| Mermaidの構文エラーで時間を浪費する | 属性名は英数字、ラベルはダブルクォート、と機械的に守る。5分以上ハマったら図を捨てて表を完成させ、図はAIに変換させる |