理系公務員のプログラミング日記

【Laravel9×Vue3】本の貸し出しシステム1(要件定義)

タグ:
Laravel
Vue

「書籍貸し出し管理システム」を作ろう

LaravelとVueを組み合わせてポートフォリオを作って行きましょう。

テーマとして、「書籍貸し出し管理システム」を作成します。

現状は紙で管理している書籍貸し出しの管理簿をオンラインで提供したいというニーズを満たすものを作ってみましょう。

設計1:要件定義について

最初の設計として要件定義を行います。以下のようなものが考えられます。

本来はプロジェクトの設計者が頭を悩ませて考えるところですが、いま流行りのChatGPTに聞いてみました。

ChatGPT:Youken

1.書籍の登録:書籍のタイトル、著者、出版社、ISBNなどの情報を登録することができます。

2.書籍の検索:書籍の情報を元に検索をすることができます。

3.書籍の貸し出し:貸し出し可能な書籍を借りることができます。

4.書籍の返却:借りた書籍を返却することができます。

5.ユーザー管理:利用者の情報を管理することができます。

6.利用履歴の管理:利用者が借りた書籍の履歴を管理することができます。

7.アクセス制限:特定のグループのユーザーに対してアクセス制限をかけることができます。

8.レポートの作成:利用状況に関するレポートを作成することができます。

・・・これで十分に感じるので、これでいきましょう。

設計2:データベース定義について

要件定義で何を作るのかが決まったので、データの形を決めるためにデータベースのテーブル定義を行います。

これも・・・聞いてみます。

ChatGPT:TableTeigi

書籍の貸し出し管理システムのデータベースには、以下のようなテーブルが含まれることが考えられます。

1.books:書籍の情報を格納するテーブル。
カラムには、book_id, title, author, publisher, ISBN, summary, genre, availableなどがあります。

2.users:利用者の情報を格納するテーブル。
カラムには、user_id, first_name, last_name, email, password, roleなどがあります。

3.loans:書籍の貸し出し情報を格納するテーブル。
カラムには、loan_id, book_id, user_id, loan_date, return_dateなどがあります。

4.histories:利用者の利用履歴を格納するテーブル。
カラムには、history_id, user_id, book_id, loan_date, return_dateなどがあります。

5.roles:利用者のロールを格納するテーブル。
カラムには、role_id, role_nameなどがあります。

6.access_control:アクセス制限を格納するテーブル。
カラムには、access_control_id, role_id, resource, actionなどがあります。

それに加えて、書籍と利用者、利用者とロールなどの関係を表すために、外部キー制約を使用することが望ましいです。

・・・これあれば何でも作れそうな気がする。

その他の設計について

これでポートフォリオは作れる気がしますが、他に何が必要でしょうか。

ChatGPT:SekkeiOther

設計を行う上で必要なことは以下のようなものがあります。

1.システムのアーキテクチャ: 書籍の貸し出し管理システムは、データベース、バックエンド、フロントエンドなどの要素から構成されます。
それぞれの要素の関係性や連携について設計を行う必要があります。

2.セキュリティ: 書籍の貸し出し管理システムには、利用者のパスワードや個人情報などの機密データが含まれます。
そのため、データベースや通信においてセキュリティ対策を講じる必要があります。

3.パフォーマンス: 書籍の貸し出し管理システムは、多数の利用者が同時にアクセスすることを想定しているため、データベースやアプリケーションのパフォーマンスについて設計を行う必要があります。

4.スケーラビリティ: 書籍の貸し出し管理システムは、将来的に利用者数やデータ量が増加することが予想されます。
そのため、システムのスケーラビリティについて設計を行う必要があります。

5.ユーザービリティ: 書籍の貸し出し管理システムは、多様な利用者に利用されるため、利用性について設計を行う必要があります。

今回、システムのアーキテクチャは前回作ったLaravel9上でVue3を実行するモノリスアーキテクチャで作成します。

セキュリティ対策はもちろん必要なので検討します。ポートフォリオなので、後半の3,4,5はそこまで優先順位は高くないでしょう。

まずは最低限の機能を持つ動くものを作ろう。

大まかな設計が決まったのでさっそく開発をしていきますが、その際知っておくべき概念としてMVP(実用最小限の製品:Minimum Viable Product)というものがあります。

MVPとは、想定するユーザーに対して「コアとなる価値」を提供でき、有効なフィードバックが得られるだけの最小限の機能を持つ製品のことを指します。

この「書籍貸し出し管理システム」において、最小限の機能といえば何に当たるでしょうか。

(画像はもうしつこいので省略)

MVP(Minimum Viable Product)とは、最小限の機能を持った製品のことを指します。

つまり、最低限の要件を満たした製品を最短の時間で市場に出すことで、顧客からのフィードバックを受け取り、製品の開発を進めていくことを目的とします。

この設計において、MVPに当たるのは、以下のような部分だと考えられます。

1.書籍の登録:書籍のタイトル、著者、出版社、ISBNなどの情報を登録することができる機能。

2.書籍の検索:書籍の情報を元に検索をすることができる機能。

3.書籍の貸し出し:貸し出し可能な書籍を借りることができる機能。

4.書籍の返却:借りた書籍を返却することができる機能。

5.ユーザー管理:利用者の情報を管理するこ利用者の情報を管理することができる機能。

これらの機能を最低限実装した状態で、利用者が書籍を借りることができるようになっていれば、MVPと言えます。

MVPにおいては、書籍のジャンルやカテゴリー分類、貸し出し履歴の管理、アクセス制限などの機能は、後に実装することが望ましいです。

また、MVPでは、システムのセキュリティやパフォーマンスは基本的なものに留めることが望ましいです。

ということで、この5つの機能をまずは開発した上でデプロイを行うことを目標にします。

この中でも一番簡単な「書籍の登録」について、次の記事から記載していきます。