- 技術 💻
- 設計
基本設計書の書き方|項目・記入例とレビューの観点
基本設計書とは、システムが「外から見てどう動くか」――画面・帳票・データ・外部システムとの連携・性能やセキュリティなどの要件――を、発注者と開発者が合意できる形でまとめた設計書です。「外部設計書」とも呼ばれます。
要件定義で決めた「何を実現するか」を、利用者やお客様が確認できる具体的な形に落とし込み、詳細設計(内部の作り方)へ引き継ぐのが役割です。この記事では、要件定義・詳細設計との違い、作成する成果物と目次のテンプレート、各項目の記入例、どこまで細かく書くかの目安、そしてよくある失敗とレビューのチェックリストまでを、現場の視点で解説します。
要件定義・基本設計・詳細設計の違い
| 要件定義 | 基本設計 | 詳細設計 | |
|---|---|---|---|
| 答える問い | 何を実現するか | 外から見てどう動くか | 内部でどう作るか |
| 主な読み手 | お客様・利用部門 | お客様・開発チーム | 開発チーム(プログラマー) |
| 代表的な内容 | 業務の課題、必要な機能、制約 | 画面、帳票、テーブル、外部連携、非機能要件 | クラス・モジュール構成、処理の手順、SQL |
| 承認する人 | お客様 | お客様(+開発側の責任者) | 開発チーム内 |
| 書き方の目線 | 業務の言葉 | 業務の言葉+システムの言葉 | システムの言葉 |
最も大切な違いは、基本設計書はお客様が読んで承認する文書だという点です。プログラムの内部の話ではなく、「この画面でこの項目を入力すると、こうなる」という、利用者から見える振る舞いを書きます。
基本設計で作成する成果物
プロジェクトの規模や種類によって必要なものは変わりますが、代表的な成果物は次のとおりです。
| 分類 | 成果物 | 内容 | 必要性の目安 |
|---|---|---|---|
| 全体 | システム構成図 | サーバー・ネットワーク・利用するサービスの構成 | ほぼ必須 |
| 全体 | 業務フロー(システム化後) | 業務の流れと、システムが担う部分 | ほぼ必須 |
| 画面 | 画面一覧・画面遷移図 | 画面の全体像と移動の流れ | 画面があれば必須 |
| 画面 | 画面レイアウト・画面項目定義 | 配置、各項目の型・桁・入力チェック | 画面があれば必須 |
| 画面 | 画面アクション定義 | ボタンを押したときの処理・メッセージ | 画面があれば必須 |
| 帳票 | 帳票一覧・帳票レイアウト | 出力する帳票と、その項目・編集方法 | 帳票があれば |
| バッチ | バッチ一覧・バッチ処理概要 | 起動タイミング、入出力、異常時の動き | バッチがあれば |
| データ | ER図・テーブル定義 | テーブル同士の関係と、各テーブルの項目 | ほぼ必須 |
| データ | CRUD図 | どの機能が、どのテーブルを作成・参照・更新・削除するか | 中〜大規模 |
| 連携 | 外部インターフェース定義 | 他システムとの連携方式、タイミング、データ形式 | 連携があれば |
| 共通 | メッセージ一覧・コード定義 | エラーメッセージや区分値の一覧 | 中〜大規模 |
| 非機能 | 非機能要件定義 | 性能・可用性・セキュリティ・運用・移行 | ほぼ必須 |
すべてを作ることが目的ではありません。「お客様と合意しておかないと、後で揉めるもの」「開発者が迷うもの」を優先して作ります。
目次のテンプレート
1. はじめに
1.1 本書の目的と対象読者
1.2 対象範囲(スコープ)と対象外
1.3 用語集
1.4 関連資料(要件定義書など)
2. システム概要
2.1 システム構成図
2.2 システム化後の業務フロー
2.3 機能一覧(要件IDとの対応)
3. 画面設計
3.1 画面一覧・画面遷移図
3.2 各画面の設計(レイアウト・項目定義・アクション定義)
4. 帳票設計
5. バッチ設計
6. データ設計
6.1 ER図
6.2 テーブル定義
6.3 CRUD図
7. 外部インターフェース設計
8. メッセージ・コード定義
9. 非機能要件
9.1 性能 9.2 可用性 9.3 セキュリティ 9.4 運用・保守 9.5 移行
10. 変更履歴
「対象範囲と対象外」「用語集」「変更履歴」は見落とされがちですが、後のトラブルを防ぐうえで効果の大きい項目です。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「基本設計書の書き方|項目・記入例とレビューの観点」
各項目の書き方と記入例
ここでは、「会員が商品を注文するECサイト」を例に、記入例を示します。
機能一覧:要件との対応を書く
| 機能ID | 機能名 | 概要 | 対応する要件ID |
|---|---|---|---|
| F-01 | 会員登録 | メールアドレスとパスワードで会員登録する | R-001 |
| F-02 | ログイン | 登録したメールアドレスとパスワードでログインする | R-002 |
| F-05 | 注文確定 | カートの商品を注文として確定する | R-010、R-011 |
すべての機能に、要件定義書の要件IDを対応させます。これにより、「要件の漏れ」と「要件にない機能の追加」の両方を防げます(トレーサビリティ)。
画面遷移図
画面遷移図は、図を描くツールのほか、テキストで管理できる形式でも書けます。
flowchart LR
A[商品一覧] --> B[商品詳細]
B --> C[カート]
C --> D{ログイン済み?}
D -- いいえ --> E[ログイン]
E --> C
D -- はい --> F[注文確認]
F --> G[注文完了]
画面項目定義
画面の各項目について、型・桁・必須・入力チェック・初期値を表で定義します。
| No | 項目名 | 種類 | 桁数 | 必須 | 入力チェック | 初期値 | 備考 |
|---|---|---|---|---|---|---|---|
| 1 | メールアドレス | テキスト | 254 | ○ | メールアドレスの形式 | 空 | 登録済みの場合はエラー |
| 2 | パスワード | パスワード | 8〜64 | ○ | 英字と数字をそれぞれ1文字以上含む | 空 | 入力内容は伏せ字で表示 |
| 3 | 氏名(姓) | テキスト | 20 | ○ | なし | 空 | |
| 4 | 氏名(名) | テキスト | 20 | ○ | なし | 空 | |
| 5 | フリガナ(セイ) | テキスト | 40 | ○ | 全角カタカナと長音 | 空 | |
| 6 | 郵便番号 | テキスト | 7 | ○ | 半角数字7桁 | 空 | 入力後に住所を自動補完 |
| 7 | 利用規約に同意 | チェックボックス | ― | ○ | チェック必須 | 未チェック |
「桁数」は、全角・半角のどちらで数えるのか、文字数かバイト数かまで決めておくと、画面とデータベースの間での食い違いを防げます。
画面アクション定義
ボタンを押したとき、何が起きるかを書きます。正常時だけでなく、エラー時の動きまで書くのがポイントです。
| アクション | 条件 | 処理 | 遷移先・メッセージ |
|---|---|---|---|
| 「登録する」押下 | 入力チェックでエラー | 登録しない | 該当項目の下にエラーメッセージを表示(E-001〜E-005) |
| 「登録する」押下 | メールアドレスが登録済み | 登録しない | 「このメールアドレスは登録済みです」(E-006) |
| 「登録する」押下 | 正常 | 会員を仮登録し、確認メールを送信する | 仮登録完了画面へ |
| 「登録する」を連続で押下 | ― | 2回目以降は受け付けない | ― |
「ボタンを2回押したら」「通信が途中で切れたら」といった場面を書いておくと、二重登録などの不具合を設計の段階で防げます。
バッチ処理概要
| 項目 | 内容 |
|---|---|
| バッチID・名称 | B-03 売上集計バッチ |
| 起動タイミング | 毎日 2:00(前日分を集計) |
| 入力 | 注文テーブル、注文明細テーブル(前日0:00〜23:59に確定した注文) |
| 出力 | 日次売上テーブル |
| 処理概要 | 商品別・日別の売上金額と数量を集計する |
| 異常時の動き | エラーを記録し、運用担当者へメールで通知する。途中までの集計結果は反映しない |
| 再実行 | 同じ日付を指定して再実行できる。再実行時は、対象日の集計結果を作り直す |
| 想定処理時間 | 30分以内(1日あたりの注文 10万件の場合) |
「異常時の動き」と「再実行できるか」は、運用に入ってから最も問題になる部分です。必ず書きます。
テーブル定義
| No | 論理名 | 物理名 | 型 | 桁 | NULL | キー | 備考 |
|---|---|---|---|---|---|---|---|
| 1 | 注文番号 | order_id | BIGINT | ― | 不可 | PK | 自動採番 |
| 2 | 会員ID | member_id | BIGINT | ― | 不可 | FK | 会員テーブル |
| 3 | 注文日時 | ordered_at | TIMESTAMP | ― | 不可 | 日本時間で保存 | |
| 4 | 注文状態 | status | VARCHAR | 20 | 不可 | コード定義「注文状態」参照 | |
| 5 | 合計金額 | total_amount | DECIMAL | 12,0 | 不可 | 税込、円単位 | |
| 6 | 作成日時 | created_at | TIMESTAMP | ― | 不可 | ||
| 7 | 更新日時 | updated_at | TIMESTAMP | ― | 不可 |
テーブルの設計は、正規化(同じデータを複数の場所に持たない設計)を基本にします。「注文時点の単価」のように、時点によって変わる値を注文側に持つかどうかも、この段階で決めておきます。
外部インターフェース定義
| 項目 | 内容 |
|---|---|
| 連携先 | 決済サービス |
| 方式 | REST API(HTTPS) |
| タイミング | 注文確定時(リアルタイム) |
| データ形式 | JSON(項目はインターフェース項目定義を参照) |
| 認証方式 | APIキー(サーバー側のみで保持) |
| タイムアウト | 10秒 |
| エラー時の動き | 通信エラーは最大3回まで間隔をあけて再試行。失敗した場合は注文を「決済エラー」状態にし、利用者に再決済を案内する |
| 二重実行の防止 | 注文番号を冪等キーとして送信し、同じ注文が二重に決済されないようにする |
外部連携では、タイムアウト・再試行・二重実行の防止を決めておかないと、「決済されたのに注文が失敗扱いになる」といった深刻な不具合につながります。
非機能要件
非機能要件は、数値で書くのが原則です。「高速に」「安全に」では、満たしているかを判定できません。IPA(情報処理推進機構)の「非機能要求グレード」は、可用性・性能拡張性・運用保守性・移行性・セキュリティ・システム環境の6つの観点で整理されており、項目の洗い出しに役立ちます。
| 分類 | 項目 | 記入例 |
|---|---|---|
| 性能 | 画面の応答時間 | 通常時、画面操作の90%以上を3秒以内に応答する |
| 性能 | 同時利用者数 | 最大500人が同時に利用しても、上記の応答時間を満たす |
| 可用性 | 稼働時間 | 24時間365日(計画停止を除く)。稼働率99.9%以上 |
| 可用性 | 障害からの復旧 | 障害発生から4時間以内に復旧する。失われるデータは最大1時間分まで |
| セキュリティ | パスワードの保存 | パスワード保存用のハッシュ関数(bcrypt、Argon2など)でソルト付きのハッシュ値として保存し、元のパスワードは保存しない |
| セキュリティ | 通信 | すべての通信をHTTPSで暗号化する |
| セキュリティ | ログイン試行 | 5回連続で失敗した場合、アカウントを30分間ロックする |
| 運用 | バックアップ | データベースを毎日バックアップし、30日間保管する |
| 運用 | ログ | アクセスログ・操作ログを1年間保管する |
| 移行 | データ移行 | 旧システムの会員データを、稼働開始の前日に移行する |
パスワードの保存は、特に注意が必要な項目です。SHA-256のような汎用のハッシュ関数は、計算が高速なぶん、漏えいしたハッシュ値から総当たりで元のパスワードを推測されやすくなります。bcryptやArgon2のような、パスワード保存用に設計された関数を指定するのが、現在の一般的な推奨です。
どこまで細かく書くか:粒度の目安
基本設計書で最も迷うのが、書く細かさです。次の2つを基準にすると判断しやすくなります。
- お客様が、その内容を見て「これでよい」と判断できるか
- 詳細設計を担当する人が、仕様について質問せずに作業を始められるか
| 基本設計に書く | 詳細設計に書く |
|---|---|
| 「注文確定時に在庫を引き当てる。在庫が不足する場合は注文できない」 | 在庫テーブルを行ロックして引き当てる処理の手順、SQL |
| 「郵便番号から住所を自動で補完する」 | 使用する住所データとAPIの呼び出し方、例外処理のクラス |
| 「パスワードはbcryptでハッシュ化して保存する」 | ハッシュ化を行うクラスとメソッド、コストの設定値 |
| 画面の項目・入力チェック・エラーメッセージ | 入力チェックを実装するクラスの構成 |
利用者やお客様から見て違いがあることは基本設計に、見て違いがないこと(作り方)は詳細設計に書く、と考えると整理しやすくなります。
よくある失敗と対策
| よくある失敗 | 起きること | 対策 |
|---|---|---|
| 「適切に」「速やかに」「など」を使う | 人によって解釈が変わり、テストで判定できない | 数値や具体的な条件に置き換える |
| 正常時の動きしか書いていない | エラー時・二重操作・通信断で、実装者ごとに動きが変わる | 画面アクションやバッチに「異常時」の欄を設ける |
| 要件との対応が書かれていない | 要件の漏れや、要件にない機能の追加に気づけない | 機能一覧に要件IDを書く |
| 画面の項目とテーブルの項目が合わない | 桁数や型の食い違いで、保存時にエラーになる | 項目の定義を1か所で管理し、画面とテーブルから参照する |
| 同じものを別の言葉で呼ぶ(顧客・会員・ユーザー) | 読み手が別物だと誤解する | 用語集を作り、表記を統一する |
| 変更履歴がない | どの版で合意したのかがわからない | 版番号・変更日・変更内容・承認者を記録する |
| 対象外を書いていない | 「それもやってくれると思っていた」という認識の違い | 「対象外」の節を設け、明記する |
レビューのチェックリスト
基本設計書のレビューでは、次の観点を確認します。
▶ 要件との対応
- □ すべての要件が、いずれかの機能に対応しているか
- □ 要件にない機能や仕様が追加されていないか
- □ 対象範囲と対象外が明記されているか
▶ 正しさと網羅性
- □ 正常時だけでなく、エラー時・境界値(0件、上限、空欄)の動きが書かれているか
- □ 二重送信、通信エラー、タイムアウト時の動きが決まっているか
- □ 画面・帳票・テーブル・外部連携の間で、項目名・型・桁数が一致しているか
- □ 日付・時刻のタイムゾーンや、締め日の扱いが決まっているか
▶ 非機能要件
- □ 性能・可用性・セキュリティの要件が、数値や具体的な方法で書かれているか
- □ 個人情報の扱い(保存・表示・ログへの出力)が決まっているか
- □ バックアップ、障害時の復旧、運用の手順が考慮されているか
▶ わかりやすさ
- □ お客様が読んで理解できる言葉で書かれているか
- □ あいまいな表現(適切に、速やかに、など)がないか
- □ 用語が統一され、用語集と一致しているか
- □ 版番号と変更履歴が記録されているか
書き方のコツ
- 文章より表と図:項目の定義は表、流れは図にすると、読み手が確認しやすく、漏れにも気づきやすい
- 1つの情報は1か所に:同じ定義を複数の資料に書くと、変更時に食い違う。参照する形にする
- 決まっていないことは「未決」と書く:空欄や推測で埋めず、課題として管理する
- お客様と一緒に確認する:画面のモックアップやプロトタイプを見せながらレビューすると、認識のずれを早く見つけられる
アジャイル開発やAI活用の時代の基本設計
アジャイル開発では、最初にすべての設計書を作り込むのではなく、開発しながら必要な設計を書き足していく進め方が一般的です。それでも、非機能要件・データ設計・外部連携のように、後から変えるのが難しく、関係者の合意が必要なものは、早い段階で文書にしておく価値があります。
また、設計書をExcelやWordではなく、Markdownなどのテキストで書いてGitで管理するチームも増えています。変更履歴が自動で残り、レビューもプルリクエストで行えます。前述の画面遷移図のように、図もテキスト(Mermaidなど)で書けます。
AIのコーディング支援を使う場合、基本設計書はAIへの指示書にもなります。画面項目定義や入力チェック、エラー時の動きが明確に書かれているほど、AIが生成するコードの精度は上がります。AIに設計書の下書きを作らせることもできますが、要件との対応や非機能要件の数値は、人が必ず確認します。また、お客様の機密情報を、許可されていないAIサービスに入力しないよう注意が必要です。
よくある質問
Q. 基本設計と外部設計は同じですか? A. ほぼ同じ意味で使われます。利用者から見える部分(外部)を設計するため、外部設計と呼ばれます。会社やプロジェクトによって呼び方が違うだけで、内容は大きく変わりません。
Q. 基本設計書は誰が書きますか? A. システムエンジニア(SE)が中心となって書くのが一般的です。業務の知識が必要な部分は、お客様や業務の担当者と相談しながら進めます。
Q. Excel・Word・Markdownのどれで書くべきですか? A. お客様やチームの慣習に合わせるのが基本です。表が多い画面項目定義やテーブル定義はExcel、文章が中心の部分はWordがよく使われます。変更の管理を重視する場合は、Markdownで書いてGitで管理する方法もあります。
Q. 基本設計にはどれくらいの期間がかかりますか? A. プロジェクトの規模によって大きく異なります。一般的には、要件定義と同じくらいか、やや長い期間を見込むことが多いです。後の工程で手戻りが起きるほど費用が大きくなるため、基本設計で認識をしっかり合わせておくことが、全体の期間の短縮につながります。
まとめ
- 基本設計書は、システムが外から見てどう動くかを、お客様と合意するための文書
- 要件定義は「何を」、基本設計は「外から見てどう動くか」、詳細設計は「内部でどう作るか」
- 成果物は、合意しておかないと揉めるもの、開発者が迷うものを優先して作る
- 画面・バッチ・外部連携は、正常時だけでなく、エラー時・二重操作・再実行まで書く
- 非機能要件は数値で。パスワードはbcryptやArgon2などの専用の関数で保存する
- 機能には要件IDを対応させ、用語集・対象外・変更履歴を忘れずに
- 詳しく書かれた設計書は、AIへの指示書としても力を発揮する
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「基本設計書の書き方|項目・記入例とレビューの観点」
株式会社RJCでは、SI事業を通じて、お客様とともに要件を整理し、設計からシステムを形にしています。設計書を「伝わる」形で書く力を、仲間と一緒に高め合いながら、成長を楽しんでいます。
株式会社RJC ― SI事業・SES事業・AI駆動開発。未経験からエンジニアに育てるのが得意な会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。