---
generated_at: 2026-01-28 12:30:00
metrics:
  claims_total: 45
  claims_with_evidence: 40
  claims_without_evidence: 5
confidence_derived: 0.89
---

# 根拠レポート：非機能要件定義書

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.89**
  - 根拠あり：40 / 45、根拠なし：5
- 優先レビュー（高）
  1. **稼働率目標値**：サーバー側の要件定義書が未確認のため根拠不足
  2. **秒間リクエスト数**：クライアントアプリのためサーバー仕様に依存
  3. **強制更新機能**：実装が確認できないため要確認
  4. **レスポンスタイム目標（画面表示）**：実際の計測値ではなく設定値からの推測
  5. **レートリミット**：サーバー側実装の確認が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `lib/utils/server_configuration.dart` - サーバー設定・定数定義
- E-02: `lib/services/graph_ql.dart` - GraphQLクライアント設定（タイムアウト、キャッシュ）
- E-03: `lib/services/api_client.dart` - API呼び出し・キャッシュポリシー
- E-04: `lib/utils/shared_preference_helper.dart` - ローカルストレージ管理
- E-05: `lib/utils/prefetching_helper.dart` - プリフェッチ機能
- E-06: `lib/utils/check_internet_connection.dart` - インターネット接続確認
- E-07: `lib/utils/push_notifications_manager.dart` - プッシュ通知管理
- E-08: `lib/main.dart` - アプリケーションエントリポイント
- E-09: `android/app/build.gradle` - Androidビルド設定
- E-10: `android/app/src/main/AndroidManifest.xml` - Android権限設定
- E-11: `ios/Runner/Info.plist` - iOS設定・権限
- E-12: `pubspec.yaml` - 依存パッケージ・バージョン設定
- E-13: `lib/screens/sign_in/view/sign_in_screen.dart` - 生体認証実装
- E-14: `lib/screens/home_page/utils/error_handler.dart` - エラーハンドリング

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | スプラッシュ表示時間は3秒 | E-01: `defaultSplashDelay = 3` | ○ |
| C-02 | GraphQLタイムアウトは40秒 | E-02: `queryRequestTimeout: const Duration(seconds: 40)` | ○ |
| C-03 | CachedNetworkImageによる画像キャッシュ | E-12: `cached_network_image: ^3.2.1` | ○ |
| C-04 | HiveStoreによるGraphQLキャッシュ | E-02: `cache: GraphQLCache(store: HiveStore())` | ○ |
| C-05 | プリフェッチ機能が存在 | E-05: `preCacheLanguageData`, `preCacheCMSData` | ○ |
| C-06 | プリフェッチ有効化フラグ | E-01: `isPreFetchingEnable = true` | ○ |
| C-07 | FetchPolicy.cacheAndNetworkの使用 | E-03: 複数箇所で確認 | ○ |
| C-08 | InternetConnectionCheckerの使用 | E-06: `InternetConnectionChecker.createInstance()` | ○ |
| C-09 | Bearer Token認証 | E-02: `AuthLink(getToken: appStoragePref.getCustomerToken)` | ○ |
| C-10 | トークンのGetStorage保存 | E-04: `customerToken`キーで保存 | ○ |
| C-11 | local_authによる生体認証 | E-13: `AuthenticationOptions(biometricOnly: true)` | ○ |
| C-12 | Cookie管理の実装 | E-03, E-04: `setCookieGet`, `getCookieGet` | ○ |
| C-13 | SSL証明書検証無効化 | E-08: `badCertificateCallback` | ○ |
| C-14 | iOS ATS任意ロード許可 | E-11: `NSAllowsArbitraryLoads: true` | ○ |
| C-15 | INTERNET権限 | E-10: `android.permission.INTERNET` | ○ |
| C-16 | CAMERA権限 | E-10: `android.permission.CAMERA` | ○ |
| C-17 | RECORD_AUDIO権限 | E-10: `android.permission.RECORD_AUDIO` | ○ |
| C-18 | 位置情報権限 | E-10: `ACCESS_FINE_LOCATION`, `ACCESS_COARSE_LOCATION` | ○ |
| C-19 | ストレージ権限 | E-10: `WRITE_EXTERNAL_STORAGE`, `READ_EXTERNAL_STORAGE` | ○ |
| C-20 | 生体認証権限 | E-10: `USE_BIOMETRIC` | ○ |
| C-21 | 通知権限 | E-10: `POST_NOTIFICATIONS` | ○ |
| C-22 | GDPR対応API | E-03: `downloadGdprData`, `createGdprRequest` | ○ |
| C-23 | 8言語対応 | E-01: `supportedLocale`配列 | ○ |
| C-24 | デフォルト通貨USD | E-01: `defaultCurrencyCode = "USD"` | ○ |
| C-25 | 4種類の決済方法 | E-01: `availablePaymentMethods`配列 | ○ |
| C-26 | flutter_blocの使用 | E-12: `flutter_bloc: ^9.1.0` | ○ |
| C-27 | graphql_flutterの使用 | E-12: `graphql_flutter: ^5.1.1` | ○ |
| C-28 | hive, get_storageの使用 | E-12: `hive: ^2.2.3`, `get_storage: ^2.0.3` | ○ |
| C-29 | Providerの使用 | E-12: `provider: ^6.0.1` | ○ |
| C-30 | 最小SDK 22 | E-09: `minSdkVersion 22` | ○ |
| C-31 | ターゲットSDK 35 | E-09: `targetSdkVersion 35` | ○ |
| C-32 | Flutter SDK要件 | E-12: `sdk: '>=3.0.1 <4.0.0'` | ○ |
| C-33 | minifyEnabled有効 | E-09: `minifyEnabled true` | ○ |
| C-34 | shrinkResources有効 | E-09: `shrinkResources true` | ○ |
| C-35 | LoggerLinkによるAPIログ | E-02: `LoggerLink`クラス | ○ |
| C-36 | Firebase Crashlytics設定 | E-09: `com.google.firebase.crashlytics`プラグイン | ○ |
| C-37 | FCM統合 | E-07, E-12: `firebase_messaging: ^15.2.5` | ○ |
| C-38 | ローカル通知 | E-12: `flutter_local_notifications: ^19.0.0` | ○ |
| C-39 | トピック購読 | E-07: `subscribeToTopic("Bagisto_mobikul")` | ○ |
| C-40 | バージョン1.0.0+1 | E-12: `version: 1.0.0+1` | ○ |
| C-41 | 稼働率目標値（バックエンド依存） | **根拠なし** | △ |
| C-42 | 秒間リクエスト数（サーバー依存） | **根拠なし** | △ |
| C-43 | 強制更新機能（未実装） | **根拠なし** | △ |
| C-44 | レスポンスタイム3秒以内 | **根拠不足** | △ |
| C-45 | レートリミット（サーバー依存） | **根拠なし** | △ |

## 4) 不足情報（Unknown / Missing）
- **稼働率・スループット目標値**：バックエンドサーバー（Bagisto Laravel）の非機能要件定義書が存在しないため、クライアント側での定義が困難
  - 候補：サーバー運用チームへの確認 / SLA文書 / インフラ設計書
- **実際のレスポンスタイム計測値**：本番環境でのパフォーマンス計測結果がコードから特定できない
  - 候補：Firebase Performance導入 / 負荷テスト結果
- **強制更新メカニズム**：アプリストアベースの更新以外の強制更新ロジックが確認できない
  - 候補：Remote Config / バージョンチェックAPI
- **レートリミット設定**：クライアント側でのリクエスト制限実装が確認できない
  - 候補：サーバー側設定確認 / クライアント側実装追加

## 5) リスクフラグ（レビュー観点）
- **2（高リスク）**: SSL証明書検証の無効化（`MyHttpOverrides`）- 本番環境ではセキュリティリスク
- **2（高リスク）**: iOS ATSの`NSAllowsArbitraryLoads`有効化 - 中間者攻撃の可能性
- **1（中リスク）**: ローカルストレージの暗号化なし - 機密データ漏洩リスク
- **1（中リスク）**: `android:usesCleartextTraffic="true"` - 非暗号化通信許可
- **0（低リスク）**: タイムアウト40秒設定 - 長時間待機によるUX低下の可能性

## 6) レビュアーチェックリスト（最小）
- [ ] SSL証明書検証無効化（`MyHttpOverrides`）が本番ビルドで有効になっていないか確認
- [ ] iOS ATS設定が本番環境で適切に制限されているか確認
- [ ] `android:usesCleartextTraffic`設定が本番環境で無効化されているか確認
- [ ] トークン・認証情報の保存方法がセキュリティ要件を満たしているか確認
- [ ] GDPR対応機能が法的要件を満たしているか法務確認
- [ ] バックエンドサーバーの稼働率・スループット要件との整合性確認
- [ ] 本番環境でのパフォーマンス計測・監視体制の確認
