ポートフォリオ制作演習 / 約30分
要件定義と設計(データモデル・API・画面設計)
なぜこれを学ぶか
「作りたいものがある」から「作れる設計図がある」へ。このレッスンでは問い合わせ管理ツールを例に、DBテーブル設計・API設計・画面設計を実際に行います。設計ができれば、あとはコードに変換するだけです。
設計の3レイヤー: ①データモデル(何を保存するか)→ ②API設計(どう取得・更新するか)→ ③画面設計(どう見せるか)。この順序で設計するのが基本です。データモデルが決まるとAPIが決まり、APIが決まると画面が決まります。
DBテーブル設計の基本: contactsテーブルの例。id(AUTO INCREMENT, PRIMARY KEY)/ title(問い合わせタイトル, TEXT NOT NULL)/ body(内容, TEXT)/ status('pending'|'in_progress'|'done', TEXT DEFAULT 'pending')/ created_at(作成日時, DATETIME DEFAULT CURRENT_TIMESTAMP)/ updated_at(更新日時, DATETIME)。ステータスはENUM的に管理し、不正な値が入らないようにする。
API設計の基本(RESTful): GET /api/contacts → 一覧取得。POST /api/contacts → 新規登録(body: {title, body})。PATCH /api/contacts/:id → ステータス更新(body: {status})。DELETE /api/contacts/:id → 削除。URLは「リソース名の複数形」で設計し、動詞を使わない(/getContacts ではなく /contacts)。
画面設計(ワイヤーフレーム): 画面①「一覧ページ(/)」: ヘッダー + 問い合わせカード一覧(ステータスバッジ付き)+ 新規登録ボタン。画面②「登録モーダル」: タイトル入力 + 内容テキストエリア + 送信ボタン。画面③(オプション)「詳細ページ(/contacts/:id)」: タイトル・内容・ステータス変更ドロップダウン。ワイヤーフレームは紙でもFigmaでも、四角と文字だけでよい。
【ワークシート P2】: 以下を手元のメモ帳に書いてください。①contactsテーブルのCREATE TABLE文(id・title・body・status・created_at)②APIエンドポイント一覧(メソッド・URL・説明・リクエストボディ)③一覧ページの画面構成(ヘッダー/リスト/ボタン)をテキストで。このワークシートがそのままREADMEの設計セクションになります。
重要ポイント
- 設計の順序: データモデル → API設計 → 画面設計
- テーブルにはid・status・created_atを必ず入れる習慣をつける
- APIはRESTful: URLはリソース名の複数形、動詞は使わない
- ワイヤーフレームは紙でOK。「四角と文字」で十分
理解度チェック
選ぶと即座に解説が表示されます。
contactsテーブルに`status`カラムを追加するとき、最も適切な定義はどれ?(SQLite想定)
ヒントを見る
DEFAULT値を設定すると、INSERT時にstatusを省略しても安全に登録できます。
SQL演習ブラウザ内SQLite
contactsテーブルから「未対応(pending)の問い合わせを、作成日時が古い順に3件取得する」SQLを書いてください。
テーブル定義と初期データを見る
CREATE TABLE contacts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
body TEXT,
status TEXT NOT NULL DEFAULT 'pending',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);INSERT INTO contacts (title, body, status, created_at) VALUES
('パスワードを忘れた', 'ログインできません', 'pending', '2024-01-01 09:00:00'),
('請求書の送付先変更', '新住所に変えてほしい', 'done', '2024-01-02 10:00:00'),
('システムエラーが出る', 'エラーコード500', 'in_progress', '2024-01-03 11:00:00'),
('使い方が分からない', 'マニュアルを送ってください', 'pending', '2024-01-04 12:00:00'),
('データが消えた', '昨日入力したデータが消えた', 'pending', '2024-01-05 08:00:00');スキルセルフチェック
このレッスンの内容をどの程度理解できましたか?