CRUD図と機能設計の考え方
概要
- 日程: Day 8 / セッション 1
- 時間: [9:30-9:55]
- 形式: 座学
- ゴール: CRUD図の役割(機能とテーブルの対応の見える化)と機能設計書に書くべき項目(入力チェック・ボタンの動作・初期設定)を挙げられる
- 学習形式: 対話型解説、ケーススタディ
導入(5分)
昨日、テーブル定義書とER図ができました。
そして以前、外部設計で機能一覧も作りました。
ここで考えてみてください。
「会員登録機能は会員テーブルに行を作る」——これは当然わかります。
では「退会した会員の予約データは、どの機能が消すのでしょうか?」
……即答できないチームが多いはずです。
機能一覧とテーブル定義書は、それぞれ単体では正しくても、突き合わせると穴が見つかります。
その突き合わせ表がCRUD図です。
CRUDという言葉自体はDay 5で登場済みです。
あのときは「情報の状態遷移」から画面・機能を洗い出すために使いました。
今日は同じCRUDを「機能×テーブル」の整合性チェックに使います。
本編(15分)
1. CRUD図〜機能とテーブルの対応を見える化する
CRUD図は、縦に機能、横にテーブルを並べた表です。
各マスに、その機能がそのテーブルに行う操作を書きます。
- C(Create): 行を作る
- R(Read): 行を読む
- U(Update): 行を書き換える
- D(Delete): 行を消す
蔵書管理システムを例にしたCRUD図です。
| 機能\テーブル | 会員 | 書籍 | 貸出 |
|---|---|---|---|
| 会員登録 | C | ||
| 会員情報変更 | RU | ||
| 書籍登録 | C | ||
| 書籍検索 | R | ||
| 貸出処理 | R | RU | C |
| 返却処理 | RU | U | |
| 貸出履歴表示 | R | R | R |
この表をタテ・ヨコに眺めると、設計漏れが浮かび上がります。
- 列を見る: 会員テーブルのD(削除)がどこにもない→「退会機能」を忘れている
- 列を見る: あるテーブルにCしかない→作られるだけで誰にも読まれないテーブル。本当に必要?
- 行を見る: どのテーブルにも触らない機能→実体のない機能。定義が曖昧なサイン
健康診断に例えると、CRUD図は設計のレントゲン写真です。
外見(外部設計)が立派でも、撮ってみると骨(データ操作)が1本足りない、ということが本当によくあります。
ここがポイント
- CRUD図の真価は「書くこと」ではなく「眺めて漏れを見つけること」
- チェックの定石: 全テーブルにC・R・U・Dが揃っているか。揃わない場合は「揃わなくてよい理由」を言えるか
- Dがない判断もあり得る(履歴は消さない等)。大事なのは「意図的にDなし」と「忘れてDなし」を区別すること
- 漏れが見つかったら、機能一覧(外部設計書)まで遡って修正する。設計書同士はつながっている
コラム
CRUDという略語を広めたのは、1983年のジェームズ・マーティンの著書と言われています。
英単語の crud は実は「汚れ・カス」という意味のスラング。
「システムの本質はデータの生成と消滅だ」という大真面目な概念が、汚れと同じ綴りなのは英語圏ではちょっとした笑い話です。
なお、派生形に CRUDS(Searchを追加)や BREAD(Browse, Read, Edit, Add, Delete)もあります。
BREADは「パン」。エンジニアは略語に食べ物を選びがちです。
2. 機能設計〜実装者が迷わない仕様を書く
CRUD図で「どの機能が何をするか」の全体像が固まったら、機能1つひとつの中身を機能設計書に書きます。
本研修で必ず書くのは次の3点です。
- 項目の入力チェック
- 必須チェック: 空のまま登録ボタンを押されたら?
- 形式チェック: メール欄に「あいうえお」と入れられたら?
- 範囲チェック: 予約人数に「-5」や「99999」を入れられたら?
- ボタンの動作
- 押すと何が起きるか: どのテーブルに何をして(CRUD)、どの画面に遷移し、何のメッセージを出すか
- 失敗時はどうなるか: エラーメッセージの内容と表示位置、入力値は保持するか
- 初期設定
- 画面を開いた瞬間の状態: 入力欄の初期値、日付欄は今日の日付か空か、一覧の並び順は何順か
良い仕様と悪い仕様を対比します。
「日付を正しくチェックする」は悪い仕様です。「正しく」の解釈が実装者任せだからです。
「予約日は今日以降90日以内。違反時は『予約日は今日から90日以内で指定してください』と赤字表示し、入力値は保持する」は良い仕様です。実装者が迷う余地がありません。
ここで少し考えてみてください。
あなたが実装担当だとして、仕様書に「いい感じにエラーを出す」と書いてあったらどう感じますか?
機能設計書は、来週の実装フェーズの自分たちへの指示書です。
未来の自分を迷わせない解像度で書きましょう。
ここがポイント
- 機能設計書の3点セット: 入力チェック・ボタンの動作・初期設定
- 正常系(うまくいく流れ)だけでなく異常系(不正な入力・空入力)を必ず書く。バグの多くは異常系の考慮漏れから生まれる
- 判断基準は「実装者がこの文章だけで迷わず作れるか」
- エラーメッセージの文言まで書く。「エラーを表示」だけでは実装者ごとにバラバラになる
コラム
1996年、欧州の大型ロケット「アリアン5」は発射37秒後に爆発しました。
原因は、速度データの変換処理での数値あふれ——いわば入力チェックの考慮漏れ1件です。
損失は数百億円。「異常系の設計」の重要さを語るとき、世界中の講師がこの事故を引用します。
皆さんのシステムはロケットほど高価ではありませんが、「変な値が来たらどうする?」を考える習慣は、今日から同じです。
💬 AIに聞いてみよう
ここまでの内容で疑問があれば、AIに質問してみましょう。たとえば:
- 「CRUD図とDay 5でやった状態遷移のCRUDはどう関係しているの?」
- 「入力チェックには他にどんな種類がある?一覧で教えて」
- 「『論理削除』って聞いたことがあるけど、Dの設計とどう関係する?」
- 「エラーメッセージの良い書き方の例を5つ見せて」
まとめ(5分)
今回学んだことを一言でまとめると「CRUD図は機能×テーブルのレントゲン写真、機能設計書は実装者を迷わせないための指示書」です。
- CRUD図=機能とテーブルの対応表。C・R・U・Dの欠けから設計漏れを発見する
- 漏れを見つけたら外部設計書まで遡って直す
- 機能設計書=入力チェック・ボタンの動作・初期設定の3点セット。異常系を必ず書く
次のセッションでは、実際に自チームのCRUD図を作り、設計漏れを検出・修正します。
🔄 振り返りチェック
以下の問いに答えられるか確認してみましょう:
- CRUD図の縦軸と横軸には何を並べますか?
- 「あるテーブルの列にDがない」とき、確認すべきことは何ですか?
- 機能設計書に書くべき3つの項目を挙げられますか?
- 「正しくチェックする」という仕様の何が問題か説明できますか?
答えに自信がない場合は、該当部分を読み返すか、AIに質問してみてください。
補足資料
- 参考リンク: 自チームの機能一覧とテーブル定義書(次セッションですぐ使うので手元に開いておく)
- 発展課題: 普段使っているWebサービスの会員登録画面で、わざと変な値を入れてみましょう。どんな入力チェックとエラーメッセージが実装されているか観察すると、機能設計の生きた教材になります
学習ガイド
このセクションは、受講者が理解を深めることをサポートする参考情報です。
想定される質問と回答例
| 質問 | ヒント |
|---|---|
| CRUD図は画面単位?機能単位? | 本研修では機能一覧の機能単位。粒度は機能一覧に揃えると突き合わせが楽 |
| 1マスにRUのように複数書いていい? | よい。貸出処理のように1機能が複数操作を行うのは普通 |
| マスタデータ(カテゴリ一覧等)のCUDは誰がやる? | 管理者機能として設けるか、初期データとして投入するかを決めて明記する。「誰も作らないテーブル」のまま放置しない |
| 入力チェックはどこまで細かく書く? | 最低限、必須・形式・範囲の3観点を全入力項目に対して。チェックなしの項目は「チェックなし」と明記する |
つまずきやすいポイント
| つまずきポイント | ヒント |
|---|---|
| CRUD図を清書して満足してしまう | 図は手段。タテ・ヨコを眺めて漏れを最低1件は探す姿勢で見る |
| Dの設計を忘れる | 「このデータは永遠に増え続けてよいか?」と各テーブルに問う |
| 異常系を「エラーにする」の一言で済ませる | メッセージ文言・表示位置・入力値保持の3点まで書く |
| 機能設計書が画面仕様書の繰り返しになる | 画面仕様書は見た目と配置、機能設計書は動作とデータ操作。重複ではなく役割分担 |