CRUD図の作成
概要
- 日程: Day 8 / セッション 2
- 時間: 09:55-11:00(65分)
- 形式: 実習
- ゴール: 機能一覧とテーブル定義書を突き合わせてCRUD図を時間内に作成し、設計漏れを1件以上検出・修正できる
- 学習形式: ハンズオン実習(AIサポートあり)
導入(5分)
前セッションで「CRUD図の空白に意味がある」ことを学びました。
ここからは自チームの機能一覧(Day5)とテーブル定義書(Day7)を突き合わせて、実際にCRUD図を作ります。設計漏れを1件以上見つけるのが目標です。
問いかけ:自チームのテーブルで「まだ誰も登録(C)できないテーブル」はないでしょうか?
→ あれば設計漏れの可能性。今日見つけ出します。
本編(10分)
1. CRUD図のテンプレート
行に 機能、列に テーブル を書いた表を準備します。スプレッドシート(Google Sheets / Excel)または Markdown表で作るのが一般的です。
Markdown表テンプレート
| 機能\テーブル | members | shops | reservations | reviews |
|---------------|---------|-------|--------------|---------|
| 会員登録 | C | - | - | - |
| 店舗一覧表示 | - | R | - | - |
| 予約作成 | R | R | C | - |
| ...(全機能) | | | | |
表記ルール
- セルには
CRUDまたは-(操作なし)を書く - 複数の操作がある場合は
CRRURDのように並べる - 物理削除は
D、論理削除はU(is_deleted を立てる) - 行=機能、列=テーブル、を統一する
2. 作成手順
ステップ1:行と列を準備(10分)
- 行:Day5 機能一覧の 全機能 を縦に並べる
- 列:Day7 テーブル定義書の 全テーブル を横に並べる
- 中間テーブルも忘れずに含める
ステップ2:各セルを埋める(20分)
機能を1つずつ取り上げ、「この機能が動くとき、どのテーブルにアクセスするか」を考えながら C/R/U/D を埋めます。
例:「予約作成」機能
members:ログイン中の会員情報を 参照 → Rshops:店舗情報を 参照(営業時間など) → Rreservations:新規予約を 作成 → Creviews:使わない → -
ステップ3:設計漏れを検出(10分)
埋め終わったら、次のチェックリストで検証します。
| チェック観点 | 該当したら |
|---|---|
| 列に C が無いテーブル | 登録機能が漏れているかも |
| 列に R が無いテーブル | データを使う場面が無いなら不要かも |
| 列に D が無いテーブル | 意図的か再確認(運用上残すなら OK) |
| 列が全部 - のテーブル | テーブル自体が不要かも |
| 行が全部 - の機能 | 機能が空回りしている(実装不要かも) |
ステップ4:漏れがあれば修正(10分)
漏れを見つけたら、次のいずれかの対応をします。
| 漏れの種類 | 修正先 |
|---|---|
| 機能が足りない | 機能一覧(Day5)に追加 → 画面一覧(Day5)も見直し → 画面遷移図(Day6)も見直し |
| テーブルが足りない | テーブル定義書(Day7)に追加 → ER図(Day7)も見直し |
| テーブルが不要 | テーブル定義書から削除 → ER図も削除 |
| 機能が不要 | 機能一覧から削除 → 画面一覧・画面遷移図も見直し |
「設計漏れは外部設計まで遡って修正する」 が鉄則です。CRUD図だけ直しても、機能一覧と整合性が取れないと意味がありません。
3. CRUD図の見方の練習
例題:以下のCRUD図から設計漏れを見つけてください。
| 機能\テーブル | members | events | participants | reviews |
|---|---|---|---|---|
| 会員登録 | C | - | - | - |
| イベント一覧 | - | R | - | - |
| イベント詳細 | - | R | R | R |
| イベント申込 | R | R | C | - |
| マイページ | R | R | R | R |
| レビュー投稿 | R | R | R | C |
検出される漏れ:
events列に C/U/D が無い → イベント主催者がイベントを作成・編集する機能が無いparticipants列に D が無い → 申込キャンセル機能が無いreviews列に U/D が無い → 投稿したレビューを編集・削除できない
修正方針:
- 機能一覧に「イベント作成」「イベント編集」「申込キャンセル」「レビュー編集」「レビュー削除」を追加するか、意図的に除外するかをチームで議論
コラム:マトリクスで全体を捉える威力
CRUD図はマトリクス分析の一例です。マトリクスは「2つの軸の組み合わせを網羅する」道具で、設計以外にも応用が利きます。
- 機能 × 担当者 → 責任分担マトリクス(RACI)
- リスク × 影響度 → リスクマトリクス
- 顧客 × ニーズ → マーケティングセグメント
「網羅されているか」を一目で確認したいときには、いつもマトリクスが助けてくれます。1枚で全体が見える、これがマトリクスの最大の価値です。
💬 AIに聞いてみよう
- 「私たちのチームの機能一覧(貼り付け)とテーブル定義書(貼り付け)からCRUD図のたたき台を作って」
- 「次のCRUD図(貼り付け)から設計漏れの候補を網羅的に挙げて」
- 「『お気に入り登録』機能はどのテーブルに何の操作をする?」
- 「論理削除を採用する場合、CRUD図にはどう表記すべき?」
実習・演習(45分)
課題
自チームのCRUD図を作成し、設計漏れを1件以上検出して修正します。
進め方(推奨タイムテーブル)
| 時間 | 作業 |
|---|---|
| 5分 | 行(機能)と列(テーブル)の枠を作る |
| 15分 | 全機能について C/R/U/D を埋める |
| 10分 | チェックリストで設計漏れを検出 |
| 10分 | 検出した漏れに対し、機能一覧・テーブル定義書・画面遷移図を修正 |
| 5分 | 修正後のCRUD図を AI にレビューしてもらう |
成果物
- CRUD図(Markdown表またはスプレッドシート)
- 検出した設計漏れと対応一覧(最低1件)
ヒント
機能が多くて時間内に終わらないとき
- 主要機能(ユーザが頻繁に使う)から優先して埋める
- 管理者機能はまとめて1行にしてもよい(後で分解)
- AI に Markdown 表で出力させて土台にする
漏れに気づいたが直すべきか迷う
- ペルソナのカスタマージャーニーマップに戻る。ペルソナがその操作を必要とするかで判断
- 「あったら便利だが今回は不要」と決めた場合は メモに残す(次回改善の種)
「論理削除 vs 物理削除」が決まらない
- 監査・履歴が必要なら論理削除(U)
- 完全消去が要件なら物理削除(D)
- チームで方針を決めたら全テーブルで統一
まとめ(5分)
今日のセッション要点を3つに絞ります。
- CRUD図は 機能(行)×テーブル(列) の表。空白に意味がある
- 設計漏れは C/R/U/D の偏り から発見する
- 漏れを見つけたら 外部設計まで遡って修正。CRUD図だけ直すのは不十分
次のセッション(Session 3)では、機能の中身を定義する 機能設計書 を作り、内部設計書を完成させます。
🔄 振り返りチェック
- 自チームのCRUD図が完成している
- 全機能と全テーブルが網羅されている
- 設計漏れを1件以上検出した
- 検出した漏れに対し、機能一覧・テーブル定義書のどちらかを修正した
- AI にレビューを依頼した
補足資料
- 前セッション資料:
Day8_Session01_CRUD図と機能設計の考え方.md - Day5 機能一覧(自チーム成果物)
- Day7 テーブル定義書、ER図(自チーム成果物)
学習ガイド
想定される質問と回答例
| 質問 | ヒント |
|---|---|
| 中間テーブルもCRUD図の列に入れる? | 入れる。中間テーブルの C/R/U/D 抜けが、多対多操作の漏れを示唆する |
| 1つの機能が大量のテーブルを使う場合 | そのまま全部書く。本当に全部必要か、機能を分割すべきか議論のきっかけに |
| 認証関連(ログイン)の R はテーブルすべてに付くのでは? | ログイン時に参照するのは members だけ。各機能の R はその機能が直接アクセスするテーブルのみ |
| バッチ処理もCRUD図に入れる? | 入れる。「日次集計バッチ」も立派な機能 |
| 検索機能の R は複数テーブルに広がる | 複数列に R を書いて OK。JOIN するテーブルが多いと性能に注意のサイン |
つまずきやすいポイント
| つまずきポイント | ヒント |
|---|---|
| 機能の粒度がバラバラ | 「画面で操作できる単位」を機能の単位にすると揃いやすい |
| 全部 R になってしまう | 「画面に表示するだけ=R」「データを変える=C/U/D」と区別 |
| 設計漏れと判断していいか自信がない | チーム内で「意図的な空白」と「漏れ」を声に出して判定。AI にも意見を聞く |
| 修正がDay5まで遡って大ごとに | 大変だが正しい姿。実装が始まってから直すよりずっと安い |
| 中間テーブルへの操作を C と書きそう | 中間テーブルへの新規行追加も C で正しい。例:お気に入り登録 → favorites テーブルに C |