Java | SpringBoot | 民宿サイトを例にした、要件の定義例
Java
SpringBoot
民宿サイトを例にした、作成例
- "大まかな要件(アプリに求められる条件)"をまとめる。
- "必要なページ"と"必要な機能"を確認する。
- データーベースに必要なテーブルとカラムを確認する。
- 実装手順を確認する。
[1] "大まかな要件(アプリに求められる条件)"をまとめる。
(例)民宿サイト
要件 |
---|
会員登録できること |
メールアドレスとパスワードでログインできること |
ログアウトできること |
会員情報を編集できること |
民宿を名前や目的地、都道府県、予算で検索できること |
民宿を新着順、宿泊料金が安い順に並べ替えられること |
ログイン済みであれば、チェックイン日、チェックアウト日、人数を指定して民宿を予約できること |
ログイン済みであれば、民宿の予約時にクレジットカードで決済できること |
管理者ユーザーであれば、民宿を登録、編集、削除できること |
[2] "必要なページ"と"必要な機能"を確認する。
次に、必要なページと機能について確認する。
(例)民宿サイト
ページ | 表示する内容や実装する機能 | アクセス権限 |
---|---|---|
トップページ | 新着の民宿(10件)を表示する。また、フォームやリンクによる検索機能を実装する。 | 誰でも |
会員登録ページ | 会員登録用のフォームを表示し、会員登録機能を実装する。 | 誰でも |
ログインページ | ログイン用のフォームを表示し、ログイン機能を実装する。 | 誰でも |
民宿一覧ページ | 民宿の検索結果を表示する。また、フォームによる検索機能やセレクトボックスによる並べ替え機能、ページネーション(ページ送り機能)を実装する。 | 誰でも |
民宿詳細ページ | 民宿の詳細情報を表示する。また、ログイン済みの会員または管理者に対しては予約用のフォームを表示する。 | 誰でも |
予約内容確認ページ | 予約内容を表示する。 | ログイン済みの会員または管理者 |
決済ページ | オンライン決済サービスのStripeが提供する決済ページを表示する。 | ログイン済みの会員または管理者 |
会員詳細ページ | ログインしているユーザーの会員情報のほか、会員編集ページへのリンクを表示する。 | ログイン済みの会員または管理者 |
会員編集ページ | ログインしているユーザーの会員編集用のフォームを表示し、会員編集機能を実装する。 | ログイン済みの会員または管理者 |
予約一覧ページ | ログインしているユーザーの予約一覧を表示し、ページネーションを実装する。 | ログイン済みの会員または管理者 |
(管理者用)会員一覧ページ | 会員一覧のほか、会員詳細ページへのリンクを表示する。また、フォームによる検索機能やページネーションを実装する。 | ログイン済みの管理者 |
(管理者用)会員詳細ページ | 会員の詳細情報を表示する。 | ログイン済みの管理者 |
(管理者用)民宿登録ページ | 民宿登録用のフォームを表示し、民宿登録機能を実装する。 | ログイン済みの管理者 |
(管理者用)民宿一覧ページ | 民宿一覧のほか、民宿詳細ページや民宿登録ページへのリンクを表示する。また、フォームによる検索機能やページネーション、モーダルウィンドウによる民宿削除機能を実装する。 | ログイン済みの管理者 |
(管理者用)民宿詳細ページ | 民宿の詳細情報のほか、民宿編集ページへのリンクを表示する。 | ログイン済みの管理者 |
(管理者用)民宿編集ページ | 民宿編集用のフォームを表示し、民宿編集機能を実装する。 | ログイン済みの管理者 |
[3] データーベースに必要なテーブルとカラムを確認する。
続いて、データーベースに必要なテーブルとカラムを確認する。
(例)民宿サイト
テーブル名 |
---|
roles |
users |
verification_tokens |
houses |
reservations |
- <rolesテーブル>
- rolesテーブルは、ユーザーのロール(役割)を保存するためのテーブル。
- 例えば、「一般ユーザー」や「管理者ユーザー」といったロールを作成し、それをユーザーに割り当てることで、「このページは管理者ユーザーのみアクセスを許可する」といった設定が可能になる。
- 今回は、このrolesテーブルに「ROLE_GENERAL(一般ユーザー)」と「ROLE_ADMIN(管理者ユーザー)」という2つのデータを保存するようにする。
カラム名 | キー属性 | 内容 |
---|---|---|
id | (主キー) | ID |
name | ロール名 |
[主キー(Primary Key)]
"主キー(Primary Key)"とは、テーブル内のデータ(レコード、テーブルの横1行)を一意に識別するためのカラムのこと。"主キー(Primary Key)"がないと、例えば商品名や価格など全く同じデータが2つ存在する場合に区別できなくなってしまう。
"主キー(Primary Key)"は、ユーザーIDや社員番号など一意、つまり重複する値が存在しないカラムに設定する。
- <usersテーブル>
- usersテーブルは、ユーザー情報を保存するためのテーブル。
カラム名 | キー属性 | 内容 |
---|---|---|
id | (主キー) | ID |
name | 氏名 | |
furigana | フリガナ | |
postal_code | 郵便番号 | |
address | 住所 | |
phone_number | 電話番号 | |
メールアドレス | ||
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カラムに存在する値"しか入れられなくなる。
- <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カラムに存在する値"しか入れられなくなる。
- <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や社員番号など一意、つまり重複する値が存在しないカラムに設定する。
- <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] 実装手順を確認
そして最後に、大まかな実装手順を確認する。
- Spring Bootのプロジェクトを作成する。
- 民宿のCRUD機能を作成する。
- (管理者用)民宿登録ページ
- (管理者用)民宿一覧ページ
- (管理者用)民宿詳細ページ
- (管理者用)民宿編集ページ
- トップページを作成する。
- 認証機能を作成する。
- 会員登録ページ
- ログインページ
- (管理者用)会員一覧ページを作成する。
- (管理者用)会員詳細ページを作成する。
- 会員詳細ページを作成する。
- 会員編集ページを作成する。
- 民宿一覧ページを作成する。
- 民宿詳細ページを作成する。
- オンライン決済サービスのStripeを利用して決済機能を作成する。
- 予約内容確認ページ
- 決済ページ
- 予約一覧ページ
Discussion