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