Flutterで健康管理アプリ (Health Management App)を開発_No.4
傍観者k
投稿日: 2026年02月25日 03:07
# データベースとAPIの整理サマリー
**最終更新:** 2026年2月19日
**状態:** ✅ 完了
---
## 📋 実施内容
### 1. SQLデータベーススキーマの整備
**新規追加テーブル(6個):**
#### ✅ mood_recording_rules(気分記録ルールテーブル)
- 用途:ユーザーの気分記録ルール(記録時間、期間、リマインダー)を保存
- 主要フィールド:reminder_time, period_start, period_end, reminder_enabled
- 操作:Create, Read, Update, Delete
- 関連API:GET /mood-rules?date=yyyy-MM-dd, POST /mood-rules, GET /mood-rules/{id}, PUT /mood-rules/{id}, DELETE /mood-rules/{id}
#### ✅ medication_settings(服薬設定テーブル)
- 用途:ユーザーの服薬計画(時間帯、期間、リマインダー)を保存
- 主要フィールド:medication_name, dosage, unit, time_start, time_end, period_start, period_end, reminder_enabled
- 操作:Create, Read
- 関連API:POST /medication-settings, GET /medication-settings?date=yyyy-MM-dd
#### ✅ hospital_visits(受診記録テーブル)
- 用途:ユーザーの受診履歴を記録
- 主要フィールド:hospital_name, visit_date, department, diagnosis, treatment, medicines
- 操作:Create, Read, Update, Delete
- 関連API:POST/GET/PUT/DELETE /hospital-visits
#### ✅ hospital_appointments(予約記録テーブル)
- 用途:病院予約を管理
- 主要フィールド:hospital_name, appointment_date, status (scheduled/completed/cancelled)
- 操作:Create, Read, Update, Delete
- 関連API:POST/GET/PUT/DELETE /hospital-appointments
#### ✅ favorite_hospitals(よく使う病院テーブル)
- 用途:ユーザーがよく使う病院の一覧を保存
- 主要フィールド:hospital_name, address, phone, department
- 操作:Create, Read, Update, Delete
- 関連API:POST/GET/PUT/DELETE /favorite-hospitals
- 特性:unique_key(user_id, hospital_name) - 重複防止
#### ✅ user_auth(ユーザー認証テーブル)
- 用途:ユーザーのログイン認証情報を保存
- 主要フィールド:email, password_hash, last_login, is_verified, verification_token
- 操作:Create, Read, Update
- 関連API:POST /auth/register, POST /auth/login, POST /auth/refresh-token
**既存テーブル(9個):**
- users - ユーザー基本情報
- medications - 服薬記録
- blood_pressures - 血圧記録
- moods - 気分記録
- common_medications - 常用薬マスター
- weight_records - 体重記録(現在は未使用)
- app_settings - アプリ設定
- user_feedback - ✅ **追加** ユーザーフィードバック
- sync_logs - API同期ログ
**データベースオブジェクト合計:**
- テーブル:14個
- ビュー:3個(today_summary, blood_pressure_stats, mood_stats)
- ストアドプロシージャ:2個(get_today_data, get_average_blood_pressure)
- インデックス:15個+
---
### 2. API一覧の整理
**APIエンドポイント合計44個(機能別):**
#### 🔐 認証モジュール(3個)
1. POST /auth/register - ユーザー登録
2. POST /auth/login - ユーザーログイン
3. POST /auth/refresh-token - トークン更新
#### 👤 ユーザー管理(3個)
4. GET /users/{id} - ユーザー情報を取得
5. PUT /users/{id} - ユーザー情報を更新
6. DELETE /users/{id} - ユーザーを削除
#### 💊 服薬管理(7個)
7. POST /medications - 服薬記録を追加
8. GET /medications - 服薬一覧を取得
9. PUT /medications/{id} - 服薬記録を更新
10. DELETE /medications/{id} - 服薬記録を削除
11. GET /common-medications - 常用薬一覧を取得
12. GET /medication-settings?date=yyyy-MM-dd - 当日有効な服薬設定を取得
13. POST /medication-settings - 服薬設定を追加
#### 💓 血圧管理(3個)
14. POST /blood-pressures - 血圧記録を追加
15. GET /blood-pressures - 血圧一覧を取得
16. GET /blood-pressures/statistics - 血圧統計
#### 😊 気分管理(8個)
15. GET /mood-rules?date=yyyy-MM-dd - 当日有効な気分記録ルールを取得
16. POST /mood-rules - 気分記録ルールを追加
17. GET /mood-rules/{id} - 気分記録ルール詳細を取得
18. PUT /mood-rules/{id} - 気分記録ルールを更新
19. DELETE /mood-rules/{id} - 気分記録ルールを削除
20. POST /moods - 気分記録を追加
21. GET /moods - 気分一覧を取得
22. GET /moods/statistics - 気分統計
#### 🏥 受診管理(4個)✅ **追加**
18. POST /hospital-visits - 受診記録を追加
19. GET /hospital-visits - 受診一覧を取得
20. PUT /hospital-visits/{id} - 受診記録を更新
21. DELETE /hospital-visits/{id} - 受診記録を削除
#### 📅 予約管理(4個)✅ **追加**
22. POST /hospital-appointments - 予約を追加
23. GET /hospital-appointments - 予約一覧を取得
24. PUT /hospital-appointments/{id} - 予約を更新
25. DELETE /hospital-appointments/{id} - 予約をキャンセル
#### ⭐ よく使う病院(4個)✅ **追加**
26. POST /favorite-hospitals - よく使う病院を追加
27. GET /favorite-hospitals - よく使う病院一覧を取得
28. PUT /favorite-hospitals/{id} - よく使う病院を更新
29. DELETE /favorite-hospitals/{id} - よく使う病院を削除
#### ⚙️ 設定管理(2個)
30. GET /app-settings - アプリ設定を取得
31. PUT /app-settings - アプリ設定を更新
#### 💬 フィードバックモジュール(2個)
32. POST /feedback - フィードバックを送信
33. GET /feedback - フィードバック一覧を取得(管理用)
#### 📊 統計モジュール(2個)
34. GET /statistics/today - 今日のサマリーを取得
35. GET /statistics/period - 週次/月次統計を取得
#### 🔄 データ同期(2個)
36. POST /sync-logs - 同期ログを記録
37. GET /sync-logs - 同期状態を取得
---
## 📊 データベーステーブル利用統計
| テーブル名 | 作成 | 取得 | 更新 | 削除 | 関連API数 |
|------|------|------|------|------|----------|
| users | 1 | 1 | 1 | 1 | 3 |
| user_auth | 1 | 3 | 1 | 0 | 3 |
| medications | 1 | 1 | 1 | 1 | 4 |
| medication_settings | 1 | 1 | 0 | 0 | 2 |
| mood_recording_rules | 1 | 2 | 1 | 1 | 5 |
| blood_pressures | 1 | 2 | 0 | 0 | 3 |
| moods | 1 | 2 | 0 | 0 | 3 |
| hospital_visits | 1 | 1 | 1 | 1 | 4 |
| hospital_appointments | 1 | 1 | 1 | 1 | 4 |
| favorite_hospitals | 1 | 1 | 1 | 1 | 4 |
| app_settings | 1 | 1 | 1 | 0 | 2 |
| user_feedback | 1 | 1 | 0 | 0 | 2 |
| common_medications | 0 | 1 | 0 | 0 | 1 |
| sync_logs | 1 | 1 | 0 | 0 | 2 |
---
## 🔗 データベース関連図
```
users (主テーブル)
├── user_auth (1:1関係)
├── medications (1:N関係)
├── medication_settings (1:N関係) ✅ NEW
├── mood_recording_rules (1:N関係) ✅ NEW
├── blood_pressures (1:N関係)
├── moods (1:N関係)
├── hospital_visits (1:N関係) ✅ NEW
├── hospital_appointments (1:N関係) ✅ NEW
├── favorite_hospitals (1:N関係) ✅ NEW
├── weight_records (1:N関係)
├── app_settings (1:1関係)
├── user_feedback (1:N関係) ✅ NEW
└── sync_logs (1:N関係)
common_medications (グローバルテーブル、ユーザー制限なし)
```
---
## 🔧 推奨実装順序
### Phase 1: 基盤整備(第1週)
- [ ] データベース初期化(init.sql を実行)
- [ ] ユーザー権限設定(アプリユーザー、読み取り専用ユーザー)
- [ ] API基本フレームワーク構築
### Phase 2: 認証モジュール(第1-2週)
- [ ] ユーザー登録APIを実装
- [ ] ユーザーログインAPIを実装(JWT統合)
- [ ] トークン更新機構を実装
- [ ] メール認証機能を追加
### Phase 3: データ操作API(第2-3週)
- [ ] 服薬管理CRUD(優先度:HIGH)
- [ ] 血圧管理CRUD(優先度:HIGH)
- [ ] 気分管理CRUD(優先度:HIGH)
- [ ] 体重管理API(任意)
### Phase 4: 医療関連API(第4週)
- [ ] 受診記録CRUD(追加)
- [ ] 予約管理CRUD(追加)
- [ ] よく使う病院管理CRUD(追加)
### Phase 5: 拡張機能(第5週)
- [ ] 統計データAPI
- [ ] 設定管理API
- [ ] フィードバック収集API
- [ ] データ同期API
### Phase 6: テストと最適化(第6週)
- [ ] 機能テスト
- [ ] 性能テストと最適化
- [ ] ドキュメント整備
- [ ] 本番デプロイ
---
## 📱 フロントエンド統合チェックリスト
### 実装済み画面
- [x] LoginScreen - /auth/login API の統合が必要
- [x] RegisterScreen - /auth/register API の統合が必要
- [x] HomeScreen - 変更なし
- [x] MedicationManagementScreen - /medications API の統合が必要
- [x] BloodPressureManagementScreen - /blood-pressures API の統合が必要
- [x] MoodManagementScreen - /moods API の統合が必要
- [x] HospitalVisitManagementScreen - /hospital-visits API の統合が必要 ✅ NEW
- [x] FavoriteHospitalManagementScreen - /favorite-hospitals API の統合が必要 ✅ NEW
- [x] SettingsScreen - /app-settings と /feedback API の統合が必要
- [x] StatisticsScreen - /statistics API の統合が必要
---
## 🔐 セキュリティ提案
### 認証レイヤー
- [ ] JWT(JSON Web Token)を使用
- [ ] トークン有効期限機構を実装(推奨:1時間)
- [ ] リフレッシュトークン機構を実装(推奨:7日)
- [ ] パスワードを暗号化(bcrypt または Argon2 を使用)
### データレイヤー
- [ ] アプリユーザー権限制限を適用:
```sql
SELECT * FROM users WHERE id = {current_user_id}
```
- [ ] ユーザー間のデータ越境アクセスを禁止
- [ ] 監査ログを追加
### APIレイヤー
- [ ] リクエスト検証(パラメータ型、範囲)
- [ ] レート制限(Rate Limiting)
- [ ] HTTPS強制
- [ ] CORS設定
---
## 🧪 テストケース例
### 認証フローテスト
```bash
1. 新規ユーザー登録
POST /auth/register
Body: { email: "test@example.com", password: "password123", name: "Test" }
2. ログイン
POST /auth/login
Body: { email: "test@example.com", password: "password123" }
Response: { token: "jwt_token" }
3. tokenを使って保護APIを呼び出し
GET /users/{id}
Header: Authorization: Bearer jwt_token
```
### データ操作テスト
```bash
1. 服薬記録を作成
POST /medications
Body: { medication_name: "血圧薬", dosage: "10", unit: "mg" }
2. 服薬記録を照会
GET /medications?user_id=user_001
3. 服薬記録を更新
PUT /medications/{id}
4. 服薬記録を削除
DELETE /medications/{id}
```
---
## 📈 パフォーマンス最適化提案
### インデックス最適化
- [x] user_id インデックスを追加済み
- [x] 日時インデックスを追加済み
- [ ] よくあるクエリ組み合わせ向けに複合インデックス追加を検討
### キャッシュ戦略
- [ ] 常用薬一覧をキャッシュ(静的・更新頻度低)
- [ ] ユーザー設定をキャッシュ(TTL: 1時間)
- [ ] 統計データをキャッシュ(TTL: 30分)
### 定期メンテナンス
- [ ] 毎週 ANALYZE TABLE を実行
- [ ] 毎月 sync_logs をクリーンアップ(90日保持)
- [ ] 毎月データベース全体をバックアップ
---
## 📞 連絡・サポート
- **プロジェクト名:** 健康管理アプリ
- **APIバージョン:** 1.0
- **データベースバージョン:** MySQL 5.7+
- **最終更新:** 2026-02-19
---
## ✅ 納品物リスト
- [x] SQLデータベーススキーマ(13テーブル)
- [x] 37 APIエンドポイント仕様
- [x] データベース関連ドキュメント
- [x] 実装提案
- [x] セキュリティ提案
- [x] テストケース
**次のステップ:** バックエンド開発を開始し、認証モジュールを優先実装
最終更新: 2026年03月06日 05:25