💬

Java | SpringBoot | 民宿サイトを例にした、要件の定義例

2024/12/14に公開

Java

SpringBoot

民宿サイトを例にした、作成例

  1. "大まかな要件(アプリに求められる条件)"をまとめる。
  2. "必要なページ"と"必要な機能"を確認する。
  3. データーベースに必要なテーブルとカラムを確認する。
  4. 実装手順を確認する。

[1] "大まかな要件(アプリに求められる条件)"をまとめる。

(例)民宿サイト

要件
会員登録できること
メールアドレスとパスワードでログインできること
ログアウトできること
会員情報を編集できること
民宿を名前や目的地、都道府県、予算で検索できること
民宿を新着順、宿泊料金が安い順に並べ替えられること
ログイン済みであれば、チェックイン日、チェックアウト日、人数を指定して民宿を予約できること
ログイン済みであれば、民宿の予約時にクレジットカードで決済できること
管理者ユーザーであれば、民宿を登録、編集、削除できること

[2] "必要なページ"と"必要な機能"を確認する。

次に、必要なページと機能について確認する。

(例)民宿サイト

ページ 表示する内容や実装する機能 アクセス権限
トップページ 新着の民宿(10件)を表示する。また、フォームやリンクによる検索機能を実装する。 誰でも
会員登録ページ 会員登録用のフォームを表示し、会員登録機能を実装する。 誰でも
ログインページ ログイン用のフォームを表示し、ログイン機能を実装する。 誰でも
民宿一覧ページ 民宿の検索結果を表示する。また、フォームによる検索機能やセレクトボックスによる並べ替え機能、ページネーション(ページ送り機能)を実装する。 誰でも
民宿詳細ページ 民宿の詳細情報を表示する。また、ログイン済みの会員または管理者に対しては予約用のフォームを表示する。 誰でも
予約内容確認ページ 予約内容を表示する。 ログイン済みの会員または管理者
決済ページ オンライン決済サービスのStripeが提供する決済ページを表示する。 ログイン済みの会員または管理者
会員詳細ページ ログインしているユーザーの会員情報のほか、会員編集ページへのリンクを表示する。 ログイン済みの会員または管理者
会員編集ページ ログインしているユーザーの会員編集用のフォームを表示し、会員編集機能を実装する。 ログイン済みの会員または管理者
予約一覧ページ ログインしているユーザーの予約一覧を表示し、ページネーションを実装する。 ログイン済みの会員または管理者
(管理者用)会員一覧ページ 会員一覧のほか、会員詳細ページへのリンクを表示する。また、フォームによる検索機能やページネーションを実装する。 ログイン済みの管理者
(管理者用)会員詳細ページ 会員の詳細情報を表示する。 ログイン済みの管理者
(管理者用)民宿登録ページ 民宿登録用のフォームを表示し、民宿登録機能を実装する。 ログイン済みの管理者
(管理者用)民宿一覧ページ 民宿一覧のほか、民宿詳細ページや民宿登録ページへのリンクを表示する。また、フォームによる検索機能やページネーション、モーダルウィンドウによる民宿削除機能を実装する。 ログイン済みの管理者
(管理者用)民宿詳細ページ 民宿の詳細情報のほか、民宿編集ページへのリンクを表示する。 ログイン済みの管理者
(管理者用)民宿編集ページ 民宿編集用のフォームを表示し、民宿編集機能を実装する。 ログイン済みの管理者

[3] データーベースに必要なテーブルとカラムを確認する。

続いて、データーベースに必要なテーブルとカラムを確認する。

(例)民宿サイト

テーブル名
roles
users
verification_tokens
houses
reservations
  1. <rolesテーブル>
    • rolesテーブルは、ユーザーのロール(役割)を保存するためのテーブル。
    • 例えば、「一般ユーザー」や「管理者ユーザー」といったロールを作成し、それをユーザーに割り当てることで、「このページは管理者ユーザーのみアクセスを許可する」といった設定が可能になる。
    • 今回は、このrolesテーブルに「ROLE_GENERAL(一般ユーザー)」と「ROLE_ADMIN(管理者ユーザー)」という2つのデータを保存するようにする。
カラム名 キー属性 内容
id (主キー) ID
name ロール名

[主キー(Primary Key)]
"主キー(Primary Key)"とは、テーブル内のデータ(レコード、テーブルの横1行)を一意に識別するためのカラムのこと。"主キー(Primary Key)"がないと、例えば商品名や価格など全く同じデータが2つ存在する場合に区別できなくなってしまう。
"主キー(Primary Key)"は、ユーザーIDや社員番号など一意、つまり重複する値が存在しないカラムに設定する。

  1. <usersテーブル>
    • usersテーブルは、ユーザー情報を保存するためのテーブル。
カラム名 キー属性 内容
id (主キー) ID
name 氏名
furigana フリガナ
postal_code 郵便番号
address 住所
phone_number 電話番号
email メールアドレス
password パスワード
role_id (外部キー) ロールのID
enabled ユーザーが有効かどうか(後述するメール認証が完了すると有効になる)
created_at 作成日時
updated_at 更新日時

[主キー(Primary Key)]
"主キー(Primary Key)"とは、テーブル内のデータ(レコード、テーブルの横1行)を一意に識別するためのカラムのこと。"主キー(Primary Key)"がないと、例えば商品名や価格など全く同じデータが2つ存在する場合に区別できなくなってしまう。
"主キー(Primary Key)"は、ユーザーIDや社員番号など一意、つまり重複する値が存在しないカラムに設定する。

[外部キー(Foreign Key)]
"外部キー(Foreign Key)"とは、別のテーブルの特定のカラムと関連付けたカラムのこと。
"外部キー(Foreign Key)"を設定すると、対象のカラムに存在する値しか入れられなくなる。
上記の例であれば、"usersテーブル"の"role_idカラム"には"rolesテーブル"の"idカラムに存在する値"しか入れられなくなる。

  1. <verification_tokensテーブル>
    • 今回は、会員登録時にメールを送信し、そのメールアドレスの所有者であるかどうかを確認するメール認証機能を実装する。
    • メール認証機能を実装するために、verification_tokensテーブルを準備する。
カラム名 キー属性 内容
id (主キー) ID
user_id (外部キー) ユーザーのID
token トークン(ランダムな文字列)
created_at 作成日時
updated_at 更新日時

[主キー(Primary Key)]
"主キー(Primary Key)"とは、テーブル内のデータ(レコード、テーブルの横1行)を一意に識別するためのカラムのこと。"主キー(Primary Key)"がないと、例えば商品名や価格など全く同じデータが2つ存在する場合に区別できなくなってしまう。
"主キー(Primary Key)"は、ユーザーIDや社員番号など一意、つまり重複する値が存在しないカラムに設定する。

[外部キー(Foreign Key)]
"外部キー(Foreign Key)"とは、別のテーブルの特定のカラムと関連付けたカラムのこと。
"外部キー(Foreign Key)"を設定すると、対象のカラムに存在する値しか入れられなくなる。
上記の例であれば、"usersテーブル"の"role_idカラム"には"rolesテーブル"の"idカラムに存在する値"しか入れられなくなる。

  1. <housesテーブル>
    • housesテーブルは、民宿情報を保存するためのテーブル。
カラム名 キー属性 内容
id (主キー) ID
name 民宿名
image_name 民宿画像のファイル名
description 民宿の説明
price 一泊あたりの宿泊料金
capacity 定員
postal_code 郵便番号
address 住所
phone_number 電話番号
created_at 作成日時
updated_at 更新日時

[主キー(Primary Key)]
"主キー(Primary Key)"とは、テーブル内のデータ(レコード、テーブルの横1行)を一意に識別するためのカラムのこと。"主キー(Primary Key)"がないと、例えば商品名や価格など全く同じデータが2つ存在する場合に区別できなくなってしまう。
"主キー(Primary Key)"は、ユーザーIDや社員番号など一意、つまり重複する値が存在しないカラムに設定する。

  1. <reservationsテーブル>
    • reservationsテーブルは、予約情報を保存するためのテーブル。
カラム名 キー属性 内容
id (主キー) ID
house_id (外部キー) 民宿のID
user_id (外部キー) ユーザーのID
checkin_date チェックイン日
checkout_date チェックアウト日
number_of_people 宿泊人数
amount 宿泊料金
created_at 作成日時
updated_at 更新日時

[主キー(Primary Key)]
"主キー(Primary Key)"とは、テーブル内のデータ(レコード、テーブルの横1行)を一意に識別するためのカラムのこと。"主キー(Primary Key)"がないと、例えば商品名や価格など全く同じデータが2つ存在する場合に区別できなくなってしまう。
"主キー(Primary Key)"は、ユーザーIDや社員番号など一意、つまり重複する値が存在しないカラムに設定する。

[外部キー(Foreign Key)]
"外部キー(Foreign Key)"とは、別のテーブルの特定のカラムと関連付けたカラムのこと。
"外部キー(Foreign Key)"を設定すると、対象のカラムに存在する値しか入れられなくなる。
上記の例であれば、"usersテーブル"の"role_idカラム"には"rolesテーブル"の"idカラムに存在する値"しか入れられなくなる。

[4] 実装手順を確認

そして最後に、大まかな実装手順を確認する。

  1. Spring Bootのプロジェクトを作成する。
  2. 民宿のCRUD機能を作成する。
    • (管理者用)民宿登録ページ
    • (管理者用)民宿一覧ページ
    • (管理者用)民宿詳細ページ
    • (管理者用)民宿編集ページ
  3. トップページを作成する。
  4. 認証機能を作成する。
    • 会員登録ページ
    • ログインページ
  5. (管理者用)会員一覧ページを作成する。
  6. (管理者用)会員詳細ページを作成する。
  7. 会員詳細ページを作成する。
  8. 会員編集ページを作成する。
  9. 民宿一覧ページを作成する。
  10. 民宿詳細ページを作成する。
  11. オンライン決済サービスのStripeを利用して決済機能を作成する。
    • 予約内容確認ページ
    • 決済ページ
    • 予約一覧ページ

Discussion