システム開発について勉強していると、
- 要件定義書
- 機能仕様書
- 基本設計書
- 詳細設計書
といった言葉が登場します。
しかし、それぞれについて調べてみると、
- 要件定義書と機能仕様書は何が違うの?
- 機能仕様書と基本設計書は同じものではないの?
- 基本設計書と詳細設計書はどこが違うの?
- それぞれいつ作るの?
と疑問に思うこともあるでしょう。
これらはすべてシステム開発に必要な情報を整理するための文書ですが、決める内容や具体化するレベルが異なります。
この記事では、要件定義書・機能仕様書・基本設計書・詳細設計書の違いや、それぞれをいつ作るのかについて、わかりやすく解説します。
要件定義書・機能仕様書・基本設計書・詳細設計書の違い

要件定義書・機能仕様書・基本設計書・詳細設計書は、システムを作るために必要な内容を、段階的に具体化していくための文書です。
大まかには、次のように整理できます。
| 文書 | 主に決めること |
| 要件定義書 | なぜ作るのか、何を実現する必要があるのか |
| 機能仕様書 | システムがどのように振る舞うのか |
| 基本設計書 | 画面・データ・外部インターフェースなどをどのような形にするのか |
| 詳細設計書 | プログラム内部をどのように構成・実装するのか |
例えば、「ユーザー登録機能」を作る場合を考えてみましょう。
要件定義では、システムで何を実現する必要があるのかを決めます。
ユーザー自身がWebサイトからアカウントを登録できること。
機能仕様では、システムがどのように振る舞うのかを具体化します。
- 氏名・メールアドレス・パスワードを入力できる。
- メールアドレスは必須とする。
- 登録済みのメールアドレスでは登録できない。
- 登録に成功した場合は登録完了状態となる。
基本設計では、画面やデータなど、システムをどのような形で実現するのかを設計します。
- ユーザー登録画面を用意する。
- 氏名・メールアドレス・パスワードの入力欄を配置する。
- 登録ボタンを配置する。
- 登録成功後は登録完了画面へ遷移する。
詳細設計では、プログラム内部をどのように実装するのかを具体化します。
UserControllerで登録リクエストを受け取る。UserServiceのregister()を呼び出す。UserRepositoryでメールアドレスの重複を確認する。- 問題がなければ
usersテーブルへデータを登録する。
といった形で、プログラム内部をどのように実装するかを具体化します。
このように、
要件定義:何を実現する?
↓
機能仕様:どう振る舞う?
↓
基本設計:どんな形にする?
↓
詳細設計:内部をどう作る?
と考えると、それぞれの違いが分かりやすいでしょう。
ただし、機能仕様書は必ず独立した文書として作成するとは限りません。プロジェクトによっては、機能仕様を要件定義書や基本設計書の中に記載することもあります。
そのため、文書名だけではなく、何を決めるための文書なのかを理解することが重要です。
要件定義書とは?
要件定義書とは、なぜシステムを作るのか、システムで何を実現する必要があるのか、どのような条件を満たす必要があるのかを整理した文書です。
例えば、「ユーザー登録を紙の申込書で受け付け、担当者が申込内容をシステムへ入力している」業務があるとします。
この業務を効率化するため、まず次のような要件を定義します。
ユーザー自身がWebサイトからアカウントを登録できること。
さらに、利用環境やセキュリティ、性能についても、次のような要件を整理します。
- スマートフォンからも利用できること
- 必要なセキュリティを満たすこと
- 想定する利用者数でも必要な性能を満たすこと
この段階では、次のような細かな設計までは通常決めません。
- 登録ボタンをどこに配置するか
- どのクラスを作成するか
- どのメソッドで処理するか
つまり、要件定義書では、「どう作るか」ではなく「何を実現する必要があるのか」を明確にします。
要件定義は、一般的には企画が終わり、基本設計などの設計工程に入る前に行います。
あわせて読みたい
要件定義書の概要・書き方・記載項目については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る
要件定義書とは?書き方や記載項目をわかりやすく解説!
機能仕様書とは?
機能仕様書とは、システムがどのような機能や振る舞いを提供するのかを整理した文書です。
例えば、要件定義で「ユーザー自身がWebサイトからアカウントを登録できること」と決められていたとします。
機能仕様では、この要件を次のように具体化します。
- 氏名・メールアドレス・パスワードを入力できる。
- メールアドレスは必須とする。
- 登録済みのメールアドレスでは登録できない。
- 登録に成功した場合は登録完了状態となる。
ここで重要なのは、ユーザーや外部から見たシステムの振る舞いを書くということです。
例えば、「登録済みのメールアドレスを入力した場合」の振る舞いは、次のように定義できます。
登録済みのメールアドレスを入力した場合、 登録済みであることを示すエラーを表示する。
これは、ユーザーから見たシステムの振る舞いを定義しているため、機能仕様にあたります。
一方、次のようなプログラム内部の処理は、詳細設計の領域になります。
UserRepositoryのfindByEmail()を呼び出して、 usersテーブルに同一メールアドレスが存在するか確認する。
つまり、要件定義書が「何を実現する必要があるのか」を整理する文書なのに対して、機能仕様書は「その機能がどのように振る舞うのか」を整理する文書と考えると分かりやすいでしょう。
機能仕様書を独立して作成する場合は、要件定義のあと、基本設計の前後で作成されることが多いですが、プロジェクトによって扱いは異なります。基本設計書の一部として機能仕様を記載したり、要件定義書の中で詳しく定義したりする場合もあります。
あわせて読みたい
機能仕様書の概要・書き方・記載項目については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る


機能仕様書とは?書き方・項目・設計書との違いをわかりやすく解説!
基本設計書とは?
基本設計書とは、要件や機能仕様をもとに、システムをどのような形で実現するのかを整理した文書です。
基本設計は「外部設計」と呼ばれることもあります。
例えば、ユーザー登録機能では、次のような内容を設計します。
- ユーザー登録画面を用意する。
- 氏名・メールアドレス・パスワードの入力欄を配置する。
- 登録ボタンを配置する。
- 登録成功後は登録完了画面へ遷移する。
このほかにも、基本設計では次のような内容を具体化します。
- どのような画面を用意するのか
- 画面間をどのように遷移するのか
- どのようなデータを扱うのか
- 外部システムとどのように連携するのか
- どのようなAPIを提供するのか
つまり、機能仕様書が「どのように振る舞うのか」を決めるものなのに対して、基本設計書は「それをどのような形で実現するのか」を設計するものです。
基本設計は、一般的には要件定義のあと、詳細設計の前に行います。
あわせて読みたい
基本設計書の概要・書き方・記載項目については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る


基本設計書とは?書き方・記載項目・要件定義書や詳細設計書との違いを解説!
詳細設計書とは?
詳細設計書とは、基本設計で決めた内容をもとに、プログラム内部をどのように構成・実装するのかを整理した文書です。
例えば、基本設計で「登録ボタンを押すとユーザー情報を登録する」と決められていたとします。
詳細設計では、その処理を次のように具体化します。
UserControllerで登録リクエストを受け取る。UserServiceのregister()を呼び出す。UserRepositoryでメールアドレスの重複を確認する。- 問題がなければ
usersテーブルへデータを登録する。
例えば、基本設計では、ユーザーや外部システムから見える部分を中心に設計します。
一方、詳細設計では、次のようなプログラム内部から見た仕組みを設計します。
- クラス
- メソッド
- モジュール
- 処理順序
- データアクセス
- 例外処理
つまり、基本設計書は「それをどのような形で実現するのか」を設計するのに対して、詳細設計書は「その内部をどのように実装するか」を設計するものです。
詳細設計は、一般的には基本設計のあと、実装を始める前に行います。
あわせて読みたい
要件定義書詳細設計書の概要・書き方・記載項目については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る


詳細設計書とは?書き方や記載項目をわかりやすく解説!
要件定義書・機能仕様書・基本設計書・詳細設計書はいつ作る?
一般的なウォーターフォール型のシステム開発では、次のような流れで進みます。
企画
↓
要件定義
↓
基本設計
↓
詳細設計
↓
実装
↓
テスト
↓
リリース
要件定義では、システムで何を実現する必要があるのかを決めます。
その内容をもとに基本設計を行い、画面・データ・外部インターフェースなど、システムの形を具体化します。
さらに、詳細設計でプログラム内部の構造を決め、そのあと実装へ進みます。
機能仕様書については、必ず独立した工程として存在するわけではありません。
機能仕様書を独立して作成するプロジェクトでは、例えば次のような流れで進めることがあります。
企画
↓
要件定義
↓
機能仕様
↓
基本設計
↓
詳細設計
↓
実装
↓
テスト
↓
リリース
のように進めることがあります。
一方、機能仕様を基本設計の一部として整理する場合は、次のような流れになります。
企画
↓
要件定義
↓
基本設計
└ 機能仕様も整理
↓
詳細設計
↓
実装
↓
テスト
↓
リリース
そのため、機能仕様書については、「必ずいつ作る」と考えるより、「システムの振る舞いをどの文書で定義するか」と考える方が分かりやすいでしょう。
なお、実際の開発では、必ずしも一方向に進むわけではありません。
例えば、基本設計を進めている途中で、
ユーザー登録にはメールアドレスの本人確認も必要ではないか?
と気づくことがあります。
これがシステムとして満たすべき新しい条件であれば、要件定義や機能仕様に戻って内容を確認・修正することもあります。
このように、要件定義・機能仕様・基本設計・詳細設計は、必要に応じて前の工程を見直しながら進めます。
本記事のまとめ
この記事では、要件定義書・機能仕様書・基本設計書・詳細設計書の違いについて説明しました。
それぞれの違いを簡単にまとめると、次のようになります。
| 文書 | 主に決めること |
| 要件定義書 | なぜ作るのか、何を実現する必要があるのか |
| 機能仕様書 | システムがどのように振る舞うのか |
| 基本設計書 | 画面・データ・外部インターフェースなどをどのような形にするのか |
| 詳細設計書 | プログラム内部をどのように構成・実装するのか |
ただし、実際のシステム開発では、文書の名称や記載する範囲は会社やプロジェクトによって異なります。
お読みいただきありがとうございました。