要件定義とは?Webアプリの具体例で学ぶ、要求の整理と要件の書き方

最終更新日

Schoo Java入門 中級 第9回 Webアプリケーション設計演習

「学習記録を登録できるアプリを作ってほしい」と言われたとき、そのままコードを書き始めると、何分まで登録できるのか、誰の記録を表示するのか、といった判断で手が止まります。こうした決め事を依頼者や利用者と確認し、「何ができれば完成と言えるか」をそろえるのが要件定義です。

要件定義書の見出しだけを埋めても、判断が曖昧なままでは実装に進めません。この記事では、依頼内容 → 確認する質問 → 合意した要件 → 確認方法を、学習記録アプリの具体例でつなげます。書き方の見本として、機能一覧と1機能分の詳しい記入例も示します。

本記事は、Schoo「Java入門 中級」第9回「Webアプリケーション設計演習」を学んだあとに理解を深めるステップアップ学習記事です。受講や配布ファイルを前提とせず、初めてWebアプリの要件を整理する方にも読めるように説明します。今回はプログラムの実装ではなく、作る内容の決め方を扱います。

要件定義とは、「何ができればよいか」を関係者でそろえること

段階学習記録アプリでの例
要求:実現したいこと学んだことをあとから振り返れるようにしたい。
要件:満たすべき条件ログインした利用者が学習内容と時間を登録し、自分の記録だけを一覧で確認できる。
設計:実現する方法登録を受け付けるServlet、判断を行うModel、保存するテーブルなどを具体化する。

ここでは、希望として出てきた内容を「要求」、確認して合意した条件を「要件」と呼び分けます。現場によって用語や文書の分け方は異なりますが、誰かの希望、未確認の仮定、合意した条件を混ぜないことが重要です。

要件定義は、開発者が一人で正解を決める作業ではありません。利用者が仕事や学習で困っていることを聞き、実現できる範囲や費用・期間も考慮して合意します。画面案を先に描き、話し合いながら要件へ戻って修正する進め方もできます。

「Servletを3個作る」は作り方の案ですが、それだけでは利用者が何をできるのか分かりません。一方、既存のシステムと接続するためにJavaを使う、といった技術上の制約が最初から決まっている場合は、その前提も要件と一緒に記録します。

例題:「学習記録を残したい」という依頼を受けたら

学習した内容と時間を記録できるWebアプリがほしいです。ログインして記録を登録し、自分の記録を一覧で振り返れるようにしたいです。他の人の記録は見せたくありません。

この依頼から「登録」「一覧」「ログイン」は読み取れます。ただし、入力項目、時間の単位や上限、記録がない場合の表示などは、まだ決まっていません。「普通はこうだろう」で埋めると、依頼者と違うものを作ってしまいます。

以下は、依頼者との確認を済ませたという想定の記事用の記入例です。学習時間の1〜480分という範囲は授業資料に沿っていますが、文字数の上限・日付の扱い・一覧の並び順などは説明のために追加した条件です。どのアプリにも同じ数値を使う、という意味ではありません。入力例は2026年9月28日の操作を想定します。

1.目的と「今回は作らないもの」を先に確認する

確認項目合意した内容の例
目的利用者が、いつ・何を・何分学んだかを、自分で振り返れるようにする。
利用者管理担当者が事前登録した利用者。記録の閲覧・登録にはログインが必要。
今回の対象ログイン、自分の記録一覧、学習記録の登録、入力エラーの案内、ログアウト。
今回の対象外利用者自身による新規会員登録、記録の編集・削除、他者への共有、集計グラフ。
前提登録情報はDBに保存する。初期の利用者情報は管理担当者が用意する。

対象外を書くのは、便利な機能を否定するためではありません。「今回は登録と一覧を完成させ、編集は次に検討する」と範囲を合わせるためです。なお、機能を対象外にすることと、必要な安全対策を省くことは別です。

2.依頼の曖昧な言葉を、答えられる質問に変える

依頼から作る質問回答として確認した内容の例
「記録する」:何を入力しますか?学習日、カテゴリ、学習内容、学習時間、メモ。メモ以外は必須。
「時間」:単位と範囲は?分単位。1回の記録は1〜480の整数。0分や小数は受け付けない。
「自分の記録」:誰の情報で判断しますか?ログインしている利用者の記録だけ。他の利用者を指定して登録・閲覧する機能は付けない。
「一覧」:順番と表示項目は?学習日の新しい順。同じ学習日なら登録の新しい順。学習日・カテゴリ・内容・時間・メモを表示する。
何も登録していなかったら?「学習記録はまだありません」と表示し、登録画面へ進める。
入力を間違えたら?項目と理由をエラー画面で知らせ、1件も保存しない。登録画面へ戻って入力し直せる。
あとから直せますか?今回、編集・削除は扱わない。誤登録の修正は次の改善候補として残す。

たとえば「エラー処理をする」だけでは、エラー画面を出しつつDBには保存してしまう実装も、文章上は否定できません。表示することだけでなく、保存しないことまで確認しておきます。

図解:画面案を見ながら質問し、決まった条件を書き残す

学習記録の登録画面案で時間の入力欄を確認する。1回1〜480分という回答を、整数・範囲外はエラー・不正な入力は保存しないという要件へ整理し、30分と0分の確認例につなげる。
画面案は完成デザインではなく、質問するためのたたき台です。30分なら登録でき、0分なら保存しない、という具体例で認識を合わせます。

入力欄を描くだけでも、「メモは空でよい?」「登録後はどこへ移る?」「戻ると入力は残る?」と確認できます。画面で見えた決め事は、口頭だけで終わらせず、要件の記録へ戻します。

3.要件は「誰が・どんな条件で・何をすると・どうなる」で書く

曖昧な書き方条件と結果を具体化した書き方
学習記録を登録できる。ログイン済みの利用者が、全入力条件を満たす記録を登録すると、その利用者に紐づく記録が1件保存される。
不正な時間はエラーにする。学習時間が未入力・整数でない・1〜480の範囲外のいずれかなら、理由をエラー画面に表示し、記録を保存しない。
利用者ごとに表示する。一覧にはログイン中の利用者の記録だけを表示し、他の利用者の記録は含めない。

「分かりやすく」「適切に」「必要に応じて」のような言葉が残ったら、読んだ人が同じ判断をできるかを確認します。すべてを長文にする必要はありません。入力ルールを表へ分け、要件から参照すると整理しやすくなります。

要件定義書の書き方:まずは機能一覧を作る

次のR-01などは、要件を指し示すための記事内の番号です。必須の命名規則ではありませんが、「一覧の要件」「登録の要件」と毎回言い換えるより、設計やテストから参照しやすくなります。

要件ID・機能満たす条件
R-01:ログイン登録済みの利用者が正しい認証情報でログインできる。不一致ならログイン状態にせず、入力確認を案内する。
R-02:自分の一覧ログイン中の利用者の記録だけを、学習日降順・同日の場合は登録の新しい順で表示する。0件なら専用の案内を表示する。
R-03:登録入力条件を満たす学習記録を、ログイン中の利用者に紐づけて1件保存し、登録完了画面を表示する。
R-04:入力エラー入力条件を満たさない場合は、項目と理由をエラー画面で知らせる。記録は保存せず、登録画面へ戻れるようにする。
R-05:未ログイン時未ログインでは記録の閲覧・登録を許可しない。URLへの直接アクセスや登録リクエストでもログイン画面へ案内する。
R-06:ログアウトログイン状態を終了し、ログイン画面を表示する。その後の記録の閲覧・登録には再ログインを必要とする。

この一覧は入口です。たとえばR-03の「入力条件」が未定なら、まだ登録処理を同じ理解で作れません。次に、入力条件と成功・失敗時の結果まで具体化します。

入力項目の記入例:型・単位・必須・範囲を決める

項目この記事の例で合意したルール
学習日必須。実在する日付で、操作日以前。例:2026-09-28。未来日は受け付けない。
カテゴリ必須。「Java」「SQL」「その他」のいずれかを選択する。送信値もこの範囲か確認する。
学習内容必須。1〜200文字。空文字や空白だけの入力は受け付けない。
学習時間必須。分単位の整数で、1以上480以下。例:30。0、481、1.5、abcは受け付けない。
メモ任意。500文字以内。未入力でも登録できる。一覧で空のメモは「メモはありません」と表示する。
記録の所有者入力欄にしない。ログイン中の利用者に紐づける。送信された別人の利用者IDを信用しない。

200文字・500文字は、この記入例で設けた上限です。実際には保存先の制限や、数える文字の扱いも設計時にそろえます。また、未入力と空白だけの入力を同じ扱いにするかは、項目ごとに確認します。

ここでいう型は、利用者が入力する情報としての「日付」「整数」などです。Servletでは文字列で受け取ってから確認・変換しますが、そのコードを書く前に、受け付ける値を決めておく必要があります。

1機能分を詳しく書くと、ここまで具体化できる

記入例:R-03 学習記録の登録。入力ルールは直前の表を参照します。これは小規模なアプリ向けの書き方の一例であり、どの現場でも必須となる様式ではありません。

項目記入例
目的・利用者ログイン済みの利用者が、その日に学んだ内容をあとから振り返れるように残す。
開始条件ログイン済みで、登録画面を開いていること。
入力学習日、カテゴリ、学習内容、学習時間、任意のメモ。前掲の入力ルールを満たすこと。
きっかけ登録画面で「登録」を選ぶ。
成功時入力した記録を、ログイン中の利用者に紐づけて1件保存する。保存に成功してから登録完了画面を表示する。
次の操作完了画面の「一覧へ」で自分の一覧へ移動できる。新しい記録が決められた並び順で確認できる。
入力不備R-04に従い、項目と理由をエラー画面に表示する。保存はしない。戻り先は登録画面とする。
入力の保持今回の版では、エラー画面から戻った登録画面の入力欄は空にする。この操作性を依頼者へ示して合意し、入力保持は改善候補とする。
途中でログインが切れた場合登録時点で未ログインならR-05を適用し、保存せずログイン画面へ案内する。
保存に失敗した場合成功と表示しない。保存できなかった旨を案内し、SQLや接続情報などの内部情報は画面へ出さない。
確認例田中さんでログインし、有効な学習日・Java・例外処理の復習・30分・空のメモを登録する。田中さんの記録が1件増え、一覧に同じ内容と30分が表示される。

「エラー時に入力を残す」は、利用者にとって便利でも、実装側が無断で追加・省略することではありません。画面案で操作を見せ、必要性と今回の範囲を確認します。この例のように空へ戻す場合も、その不便さを隠さず説明します。

登録ボタンの連打や通信切断で結果が分からない場合なども、実際の公開では整理が必要です。上の表は登録機能の記入例であって、公開用サービスの全要件を網羅したものではありません。

4.機能要件だけでなく、品質・運用の条件も確認する

機能要件は、登録・一覧表示のように「何ができるか」です。非機能要件は、性能・可用性・安全性・運用など「どのような品質や条件で使えるか」です。分類そのものより、担当者と確認方法が決まっていることが重要です。たとえば安全性の要求を、具体的なアクセス制御の機能へ落とし込むこともあります。

曖昧な条件追加で確認し、記録する内容
速く表示する対象画面、データ件数、同時利用者数、利用環境、どこからどこまでの時間を測るか、許容時間。
安全に使える誰がどのデータを扱えるか、通信・認証情報の保護、ログへ残してはいけない情報、確認方法と担当。
データをなくさない許容できるデータ損失の範囲、バックアップ頻度・保存期間、復旧担当、実際に復元できるかの確認。
スマートフォンで使える対応する端末・ブラウザ、入力とエラー表示を確認する画面、横幅が狭いときの操作条件。

「一覧は2秒以内」と数値を付けるだけでも十分ではありません。10件と10万件、1人と100人では条件が違います。まだ条件を合意できない場合は、適当な数値を完成版に書かず、次の未決事項へ分けます。

5.決まっていないことは、未決事項として残す

聞いてもすぐ決まらないことはあります。「たぶん不要」を決定事項にせず、質問・判断する人・期限・影響する要件を残します。次は、実際に公開する範囲を決める前に確認する事項の例です。

未決事項確認先・期限・影響
Q-01:記録を何年間保存するか依頼者・運用担当とDB設計の確定前に確認する。データ量、削除方針、バックアップへ影響。
Q-02:同時利用者数と許容表示時間依頼者と性能検証の計画前に確認する。検証データと公開環境の選定へ影響。
Q-03:連打や通信切断時の再送をどう扱うか依頼者・開発担当と登録処理の設計確定前に確認する。R-03の重複登録対策と画面案内へ影響。

実際の管理表では、役割名だけでなく担当者名と具体的な期限日を書きます。未決事項があるから、すべての作業を止めるとは限りません。ただし、登録回数など結果を変える条件が未決のまま、その実装やテストを確定してはいけません。

6.要件を読んで「合格かどうか」を判断できるか確かめる

要件を書いたら、代表的な入力と結果を並べます。ここで答えが決まらなければ、テスト担当へ判断を丸投げせず、要件へ戻って確認します。次は全テストケースではなく、曖昧さを見つけるための確認例です。

対応要件・条件準備・操作・期待する結果
R-03:30分で登録他の必須項目を有効にし、メモは空で登録する。ログイン中の利用者の記録が1件増え、学習時間30分で確認できる。
R-03:下限・上限他の項目を有効にして1分と480分を別々に登録する。どちらも1件ずつ保存される。
R-04:0分・481分他の項目を有効にして、各値を別々に送る。理由が表示され、DBの件数は実行前から増えない。
R-02:利用者の分離田中さんと佐藤さんの記録を事前に用意する。田中さんで開いた一覧に、田中さんの記録だけが表示される。
R-02:記録0件記録のない利用者で開く。「学習記録はまだありません」と表示され、登録へ進める。
R-05:未ログインで登録ログアウトした状態で登録リクエストを送る。ログイン画面へ案内され、記録が保存されない。

「利用者の分離」は、田中さんのデータしか入っていないDBでは見落としが起きます。他の利用者の記録も用意して、表示されないことを確認します。「エラーになる」も、表示だけでなくデータが増えていないことまで確かめます。

要件が変わったら、関連する表と確認例も更新する

たとえば「長時間の研修も記録したいので、上限を480分から720分へ変えたい」という追加要求が来たとします。まず変更理由と影響を確認し、合意したあとで、入力ルール・R-03/R-04の参照内容・画面の案内・テストを更新します。

新しい条件では481分は有効です。古い確認例を残したまま「481分はエラー」とすると、正しい実装を不合格にしてしまいます。要件IDと変更理由を残し、どの版に対する確認なのかをそろえることが、書類を作るだけで終わらせないポイントです。

なお、設計やコードを書く順番を機械的に固定する必要はありません。画面案や試作で気づいた点を要件へ戻し、関係者で再確認します。開発全体の進め方は、JavaのWebアプリは何から作る?要件から画面・処理・クラスを考える手順で扱っています。

確認問題

  1. 「学習時間を入力できる」とだけ書かれています。実装前に依頼者へ確認したいことを3つ挙げ、この記事の条件を使って要件の文章に書き直してください。
  2. 「不正な時間ならエラーを表示する」という要件で、0分を登録するとエラー画面は出ますがDBにも1件追加されました。何を書き足し、何を確認する必要がありますか。
  3. 「自分の記録だけを表示する」を確認するため、田中さんの記録だけを用意しました。どのようなデータを追加し、何が表示されないことを確かめますか。
  4. 学習時間の上限を480分から720分へ変更することになりました。更新する記録と、変更後に確認する境界付近の値・期待結果を答えてください。
  5. 依頼者から「一覧は速く表示してほしい」と言われました。勝手に数値を決めずに、何を質問し、決まらない場合はどのように残しますか。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

まとめ

  • 要件定義は、依頼の希望を、関係者が合意できる具体的な条件へ整理する作業。
  • 目的・対象範囲を決め、画面案と具体的なデータで曖昧な点を質問する。
  • 正常時だけでなく、入力不備・未ログイン・保存失敗時の結果も書く。
  • 未決事項は担当者・期限・影響とともに残し、勝手に決定事項へ変えない。
  • 要件と確認例を対応させ、条件を変えたら両方を更新する。

関連記事

シェアする