0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ASP.NET Core Web API + React + TypeScript(vite)】書籍管理システム設計 ③ 基本設計書(外部設計)

0
Last updated at Posted at 2026-07-27

本記事は 書籍管理システム設計(全4回)シリーズの ③ です。

📚 シリーズ全記事(全4回)

  1. 【ASP.NET Core Web API + React + TypeScript(vite)】書籍管理システム設計 ① 環境構築手順書
  2. 【ASP.NET Core Web API + React + TypeScript(vite)】書籍管理システム設計 ② 要件定義書
  3. 【ASP.NET Core Web API + React + TypeScript(vite)】書籍管理システム設計 ③ 基本設計書(外部設計)(この記事)
  4. 【ASP.NET Core Web API + React + TypeScript(vite)】書籍管理システム設計 ④ 詳細設計書(内部設計)

項目 内容
文書名 基本設計書
システム名 書籍管理システム(Book Manager)
版数 1.0
作成日 2026-07-24
関連文書 01_要件定義書.md

改訂履歴

日付 改訂内容 作成者
1.0 2026-07-24 初版作成(実装済みシステムに基づく)

1. はじめに

1.1 目的

本書は要件定義書に基づき、書籍管理システムの外部仕様(システム構成・画面・API・データ)を定義する。

1.2 位置づけ

利用者およびシステム間から見える外部インターフェースを規定する。内部の実装詳細は「03_詳細設計書」で規定する。


2. システム構成

2.1 システム構成図

  • ブラウザは Vite(ポート 5173)にアクセスする。
  • /api/* へのリクエストは Vite の server.proxy により API(ポート 5000)へ転送される。
  • API は EF Core を介して SQLite ファイル books.db を読み書きする。
  • プロキシ経由のため同一オリジンとなり、CORS 設定は不要。

2.2 技術スタック

技術 バージョン
フロントエンド React / React-DOM 19.2.8
フロントエンド TypeScript 6.0.3
ビルドツール Vite / @vitejs/plugin-react 8.1.5 / 6.0.4
バックエンド ASP.NET Core Web API(コントローラ) .NET 10(SDK 10.0.302)
ORM Entity Framework Core 10.0.10
データベース SQLite ファイルベース
API ドキュメント OpenAPI + Scalar OpenAPI 10.0.10 / Scalar 2.16.16

2.3 ディレクトリ構成

webapi/
├─ api/          バックエンド(ASP.NET Core Web API)
│  ├─ Models/         エンティティ
│  ├─ Data/           DbContext
│  ├─ Controllers/    API コントローラ
│  ├─ Migrations/     EF Core マイグレーション
│  ├─ Program.cs      エントリポイント/DI/ミドルウェア
│  └─ books.db        SQLite データベース
└─ web/          フロントエンド(React + TypeScript)
   ├─ src/api.ts      API クライアント
   ├─ src/App.tsx     画面コンポーネント
   └─ vite.config.ts  プロキシ設定

3. 画面設計

3.1 画面一覧

画面ID 画面名 概要
SCR-01 書籍管理画面 一覧表示・登録・編集・削除・貸出切替を行う単一画面

※ 本システムは SPA であり、画面は SCR-01 の1画面のみで構成する。

3.2 画面遷移

単一画面のため画面遷移はない。画面内で「一覧表示 ⇔ 行の編集モード」の状態遷移を持つ。

3.3 画面レイアウト(ワイヤーフレーム)

┌─────────────────────────────────────────────┐
│ 📚 書籍管理                                    │
│                                               │
│ [タイトル____] [著者____] [出版年_] [ 追加 ]   │
│                                               │
│ ┌────────────┬────────┬──────┬──────┬───────┐ │
│ │ タイトル    │ 著者   │出版年│ 状態 │ 操作  │ │
│ ├────────────┼────────┼──────┼──────┼───────┤ │
│ │ 吾輩は猫... │夏目漱石│ 1905 │在庫  │編集 削除│ │
│ │ 羅生門      │芥川... │ 1915 │貸出中│編集 削除│ │
│ └────────────┴────────┴──────┴──────┴───────┘ │
└─────────────────────────────────────────────┘

3.4 画面項目定義

入力エリア(新規登録)

項目名 種別 必須 内容
タイトル テキスト入力 書籍タイトル
著者 テキスト入力 著者名
出版年 数値入力 西暦年(未入力時は当年)
追加ボタン ボタン 登録実行(タイトル未入力時は非活性)

一覧エリア

列名 内容
タイトル 書籍タイトル(編集モード時は入力欄)
著者 著者名(編集モード時は入力欄)
出版年 出版年(編集モード時は入力欄)
状態 貸出状態バッジ(クリックで切替)
操作 編集ボタン・削除ボタン(編集モード時は保存・取消)

3.5 画面アクション

イベント 処理 対応API
画面初期表示 一覧取得 GET /api/books
追加ボタン押下 登録 → 一覧再取得 POST /api/books
編集ボタン押下 対象行を編集モードへ (API呼出なし)
保存ボタン押下 更新 → 一覧再取得 PUT /api/books/{id}
取消ボタン押下 編集モード解除 (API呼出なし)
状態バッジ押下 貸出状態反転 → 一覧再取得 PUT /api/books/{id}
削除ボタン押下 削除 → 一覧再取得 DELETE /api/books/{id}

4. 機能設計

4.1 機能一覧

機能ID 機能名 入力 出力
FN-01 一覧取得 なし 書籍配列
FN-02 登録 書籍情報 登録済み書籍
FN-03 更新 ID+書籍情報 なし(204)
FN-04 削除 ID なし(204)

4.2 各機能の処理概要

  • FN-01 一覧取得:全書籍を取得しフロントに返却する。
  • FN-02 登録:受領した書籍を新規保存し、採番されたIDを含めて返す。
  • FN-03 更新:URL の ID とボディの ID の一致を確認し、書籍を上書き更新する。
  • FN-04 削除:ID に該当する書籍を削除する。存在しない場合は 404 を返す。

5. API 設計(外部インターフェース)

5.1 API 方式

  • 形式:REST/JSON(UTF-8)
  • ベースパス:/api/books
  • 通信:HTTP(開発用)。フロントは相対パスで呼び出し、Vite プロキシが API へ転送する。
  • プロパティ命名:JSON は camelCase(例:isBorrowed)。

5.2 エンドポイント一覧

No メソッド パス 概要 正常時
1 GET /api/books 一覧取得 200
2 GET /api/books/{id} 1件取得 200 / 404
3 POST /api/books 登録 201
4 PUT /api/books/{id} 更新 204 / 400
5 DELETE /api/books/{id} 削除 204 / 404

5.3 リクエスト/レスポンス仕様

共通データ(Book)

{
  "id": 1,
  "title": "吾輩は猫である",
  "author": "夏目漱石",
  "year": 1905,
  "isBorrowed": false
}

1. GET /api/books

  • リクエスト:なし
  • レスポンス:200 OK / Book の配列

2. GET /api/books/{id}

  • リクエスト:パスパラメータ id
  • レスポンス:200 OK(Book)/ 404 Not Found

3. POST /api/books

  • リクエストボディ:Book(id は省略可、サーバ採番)
  • レスポンス:201 Created(Location ヘッダ付き、登録済み Book)

4. PUT /api/books/{id}

  • リクエスト:パス id + ボディ Book(id を含む)
  • レスポンス:204 No Content / パスとボディの id 不一致時は 400 Bad Request

5. DELETE /api/books/{id}

  • リクエスト:パスパラメータ id
  • レスポンス:204 No Content / 該当なしは 404 Not Found

5.4 API 確認用インターフェース

  • OpenAPI 定義:GET /openapi/v1.json
  • API リファレンス UI:/scalar(開発環境のみ有効)

6. データ設計

6.1 ER 図

※ 本システムは単一エンティティ構成であり、リレーションは持たない。

6.2 エンティティ定義(論理)

論理名 物理名 必須 説明
ID Id 整数 主キー、自動採番
タイトル Title 文字列 書籍タイトル
著者 Author 文字列 著者名
出版年 Year 整数 西暦出版年
貸出状態 IsBorrowed 真偽 true=貸出中 / false=在庫あり

6.3 テーブル一覧

論理名 物理名 説明
書籍 Books 書籍情報を保持するテーブル

7. 非機能設計方針

分類 方針
構成分離 フロントエンドとバックエンドをプロセス分離し、REST API で疎結合とする
データ永続化 SQLite により追加サーバ不要で永続化。スキーマ変更は EF Core マイグレーションで管理
セキュリティ 本バージョンは認証なし。将来は API 層に認証ミドルウェアを追加可能な構成とする
国際化 UTF-8 により日本語を保持。SQLite の TEXT 型で保存

8. エラー設計・メッセージ

8.1 API エラー応答

状況 ステータス
対象データが存在しない(取得・削除) 404 Not Found
パスとボディの ID 不一致(更新) 400 Bad Request

8.2 画面メッセージ

状況 メッセージ
一覧取得失敗 「書籍の取得に失敗しました。API が起動しているか確認してください。」
データ0件 「書籍がまだありません。上のフォームから追加してください。」
読み込み中 「読み込み中...」
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?