📖 テーマ設定
🔊 音声設定
1.2
1.0
1.0
▶️ 再生コントロール
🎵 BGM設定
0.3
🔔 効果音設定
0.3

機能設計書の作成と内部設計書の完成

概要

  • 日程: Day 8 / セッション 3
  • 時間: 11:10-12:40(90分)
  • 形式: 実習
  • ゴール: 主要機能の機能設計書(入力チェック・ボタン動作・初期設定)を作成し、テーブル定義書・ER図・CRUD図と合わせて内部設計書一式を時間内に完成できる
  • 学習形式: ハンズオン実習(AIサポートあり)

導入(5分)

ここまでで、データの入れ物(テーブル定義書)、入れ物どうしの関係(ER図)、機能と入れ物の対応(CRUD図)が揃いました。

最後に必要なのは、機能の中身=処理ロジックです。実装者が「この機能を作って」と渡されて、迷わず書ける詳細度の文書を作ります。

問いかけ:実装者が機能設計書を読んで「ここが分からない」と困るのはどんなとき?

→ 「エラー時の挙動が書いていない」「成功時にどこへ遷移するかが曖昧」「入力チェックの順序が不明」など。これらをすべて先に決めるのが今日のゴールです。

内部設計書の最終形

flowchart LR A["テーブル定義書"] --> Z["内部設計書"] B["ER図"] --> Z C["CRUD図"] --> Z D["機能設計書"] --> Z Z --> E["実装フェーズへ (Day10〜)"]

本編(15分)

1. 機能設計書のテンプレート

機能ごとに以下のテンプレートで書きます。

## 機能名: 会員登録

### 概要
新規ユーザがメールアドレス・パスワード・氏名で会員登録する機能。

### 関連画面
- 入力画面:`screen-001-signup`
- 完了画面:`screen-002-signup-done`

### 入力項目
| 項目 | 必須 | 型 | 桁数 | 形式 | エラー時メッセージ |
|------|------|-----|------|------|-------------------|
| 氏名 | YES | string | 1-50 | - | 「氏名を入力してください」 |
| メール | YES | string | 1-100 | RFC5322 | 「メールアドレスの形式が正しくありません」 |
| パスワード | YES | string | 8-32 | 英数字混在 | 「8文字以上32文字以下、英数字混在で入力してください」 |

### ボタン動作
#### 「登録する」ボタン
1. 入力チェック(上表)。エラーがあれば同画面で表示。以降の処理は実行しない
2. メール重複チェック(`members` テーブル SELECT WHERE email = ?)
   - 重複あり:「このメールアドレスは既に登録されています」を表示
3. パスワードをハッシュ化(bcrypt 等)
4. `members` テーブルに INSERT
   - 失敗時:「登録に失敗しました。時間をおいて再試行してください」
5. 成功時:完了画面(`screen-002`)へ遷移。「登録完了」メッセージ表示

#### 「キャンセル」ボタン
1. 入力内容を破棄し、トップ画面(`screen-000`)へ遷移

### 初期設定
- 全項目空欄
- フォーカス:氏名項目
- パスワードは伏字で表示
- 「登録する」ボタンは全必須項目入力後に活性化(任意)

### 異常系
| 異常 | 挙動 |
|------|------|
| 全項目空のまま送信 | 各項目に「○○を入力してください」を表示 |
| メール100文字超 | 「メールアドレスが長すぎます」 |
| 同時登録(競合) | DBの UNIQUE 制約でエラー → 「このメールアドレスは既に登録されています」 |
| ネットワーク断 | 「通信エラーが発生しました。接続を確認してください」 |
| 想定外のサーバエラー | 「システムエラーが発生しました。管理者に連絡してください」 |

2. 何を、どこまで書くか

すべての機能をこの詳細度で書くと時間が足りません。優先順位を付けます。

優先 対象機能 詳細度
「核となる体験」に関わる機能(ペルソナがゴールに到達するために必須) フルテンプレート
補助機能(会員登録・ログイン・一覧表示など) 入力チェック+ボタン動作のみ
管理者機能・将来追加機能 概要だけ

実装に入る前に、最低限「核となる体験」のフル設計書がある状態を目指します。

ここがポイント

  • 実装者が見て迷わない」が詳細度の基準
  • 全機能を完璧にではなく、重要機能を確実に
  • 機能設計書は実装中に 更新される前提(コードと設計書は同期)

3. 異常系のチェックリスト

異常系を漏らさないため、5観点でチェックします。

観点
空入力 必須項目が空
桁・形式違反 長すぎる、数値項目に文字、不正なメール形式
値の範囲外 数量0以下、日付が過去
競合 同時に同じデータを更新/作成
権限・状態 他人の予約を変更、ログアウト状態でアクセス

これら5観点を機能ごとに確認すれば、抜けはほぼ防げます。

コラム:設計書ドリブン開発

「設計書ドリブン開発」とは、設計書をコードの先に置き、コードを設計書に合わせるスタイルです。コードを先に書いて後から設計書を書く(または書かない)のとは対照的です。

なぜ設計書ドリブンが大切なのか。それは コードを書く前のほうが直すのが安い からです。設計書の修正は5分、同じ修正をコードに反映するのは1時間、本番リリース後に直すのは数日──設計の早い段階で固めるほど、後工程のコストが下がります。

ただし「設計書を完璧にしてから実装」は不可能です。本研修のルール「設計書とコードがずれたら設計書を直す」を守れば、設計書ドリブンとアジャイルは両立します。設計書は 生きている文書 です。

4. 内部設計書の最終チェックリスト

内部設計書一式(テーブル定義書・ER図・CRUD図・機能設計書)の整合性をチェックします。

チェック観点 確認内容
テーブル定義書とER図の整合 全テーブルがER図にある/全リレーションが定義書のFKと一致
テーブル定義書とCRUD図の整合 CRUD図の列にすべてのテーブルがある
機能一覧とCRUD図の整合 CRUD図の行にすべての機能がある
CRUD図と機能設計書の整合 機能設計書のSQLアクセスがCRUD図のC/R/U/Dと一致
機能設計書と画面仕様書の整合 ボタンの遷移先が画面遷移図と一致
異常系の網羅 主要機能で5観点(空入力・桁/形式・範囲・競合・権限)すべて検討済み

💬 AIに聞いてみよう

  • 「次の機能設計書(貼り付け)を見て、実装者が迷う点を5件指摘して」
  • 「『予約作成』機能の異常系を10個挙げて。発生頻度順に」
  • 「機能設計書の入力チェックの記述は実装者が SQL に落とせるレベルになっているか確認して」
  • 「機能設計書とCRUD図の不整合があれば指摘して」

実習・演習(65分)

課題

自チームの主要機能について機能設計書を作成し、内部設計書一式を完成させます。

進め方(推奨タイムテーブル)

時間 作業
5分 機能の優先順位付け(高・中・低を仕分け)
30分 高優先度機能のフル機能設計書作成(チーム内で分担)
15分 中優先度機能の簡易設計書作成
10分 AI に機能設計書をレビューしてもらう(実装者視点)
5分 内部設計書一式の最終整合性チェック

成果物

  • 機能設計書(高優先度機能はフルテンプレート、中優先度は簡易版)
  • 内部設計書一式:テーブル定義書 + ER図 + CRUD図 + 機能設計書
  • 最終チェックリストの完了

ヒント

役割分担の例

  • メンバーA:会員関連機能(登録・ログイン・更新・退会)
  • メンバーB:主要機能(予約・申込・購入など)
  • メンバーC:補助機能(一覧・詳細・検索)
  • 全員:最後に集まって整合性をクロスチェック

AI協働の進め方

私たちは○○システムを設計しています。
「○○機能」の機能設計書を以下のテンプレートで書きたい。
- 関連画面、入力項目、ボタン動作、初期設定、異常系
入力情報:(自チームの該当画面仕様書と関連テーブル定義書を貼り付け)

(1) たたき台を作って
(2) 異常系を5観点(空入力・桁/形式・範囲・競合・権限)で網羅して
(3) 実装者が迷いそうな箇所を指摘して

「核となる体験」が分からなくなったら

ペルソナと CJM(To-Be版)に戻ります。ペルソナがゴールに到達するために絶対必要な機能が「核」です。

まとめ(5分)

今日のセッション要点を3つに絞ります。

  1. 機能設計書には 入力項目・ボタン動作・初期設定・異常系 を書く
  2. 「核となる体験」から優先的にフル設計。全機能を完璧にする必要はない
  3. 内部設計書一式の 最終整合性チェックで実装フェーズに引き継ぐ

8日間の振り返り

flowchart LR A["Day1 チーム計画"] --> B["Day2-4 情報設計"] B --> C["Day5-6 外部設計"] C --> D["Day7-8 内部設計 完成"] D --> F["Day9 PM"] F --> G["Day10〜 実装"]

ここまでで 設計フェーズの主要成果物がほぼ揃いました。明日(Day 9)はプロジェクトマネジメント。実装期間(Day 10-17)に向けた計画を立てます。

🔄 振り返りチェック

  • 高優先度機能の機能設計書が完成している
  • 各機能で異常系が5観点でチェック済み
  • 内部設計書一式(テーブル定義書・ER図・CRUD図・機能設計書)が揃っている
  • 最終整合性チェックリストの全項目をクリアしている
  • AI に「実装者が迷う点」をレビューしてもらった

補足資料

  • 前セッション資料:Day8_Session01_CRUD図と機能設計の考え方.mdDay8_Session02_CRUD図の作成.md
  • Day5-6 外部設計書(自チーム成果物)
  • Day7 テーブル定義書、ER図(自チーム成果物)
  • Day8 Session2 CRUD図(自チーム成果物)

学習ガイド

想定される質問と回答例

質問 ヒント
機能設計書のフォーマットは決まっている? 業界標準はない。プロジェクトごとにテンプレートを決めるのが普通
全機能を詳細に書く時間がない 「核となる体験」から優先。後で実装中に追記でも OK
異常系の挙動が決まらない 仮で「エラーメッセージを表示」と書いて先に進む。実装中にチームで決定
入力チェックの順序は重要? 重要。「サーバ到達前にクライアントで弾く=高速」「サーバでも必ずチェック=安全」の2段構え
機能設計書をどこに保存する? プロジェクトの設計書フォルダに Markdown で。チーム全員が編集できる場所

つまずきやすいポイント

つまずきポイント ヒント
機能設計書を書く時間が無くなる 30分タイマーで「これ以上は書かない」と切る勇気。後で追記前提
異常系を考え始めると終わらない 5観点チェックリストで打ち切る。完璧主義より「網羅性」を優先
画面仕様書と内容が重複 画面仕様書=レイアウト、機能設計書=処理ロジック。視点を分けて書く
CRUD図と機能設計書がずれる 機能設計書のSQLアクセス記述をCRUD図と一字一句突き合わせる
「初期設定」を書き忘れる デフォルト値・並び順・初期件数・フォーカス位置の4つを最低限チェック
内部設計書一式のファイル管理 「内部設計書」フォルダを切り、4ファイル(テーブル定義書/ER図/CRUD図/機能設計書)を配置して INDEX.md でリンク
読み上げを開始します...

AIに質問する