---
generated_at: 2026-02-26 12:00:00
metrics:
  claims_total: 40
  claims_with_evidence: 37
  claims_without_evidence: 3
confidence_derived: 0.93
---

# 根拠レポート：非機能要件テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.93**
  - 根拠あり：37 / 40、根拠なし：3
- 優先レビュー（高）
  1. **NFT-032（モノレポパッケージ独立性検証）**：循環依存の具体的な検証基準がコードからは読み取れない
  2. **NFT-030（外部メディアライブラリ互換性検証）**：CloudinaryおよびUploadcareとの統合テストの具体的合格基準が明示されていない
  3. **NFT-031（多言語ロケール互換性検証）**：対応ロケール一覧の網羅性について要確認

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

- E-01: `packages/decap-cms-lib-util/src/unsentRequest.js` - fetchWithTimeout関数（timeout=60秒、AbortController使用）
- E-02: `packages/decap-cms-lib-util/src/API.ts` - requestWithBackoff関数、RateLimitErrorクラス、readFile関数、constructRequestHeaders関数
- E-03: `packages/decap-cms-lib-util/src/asyncLock.ts` - asyncLock関数（timeout=15000ms）
- E-04: `packages/decap-cms-core/src/actions/waitUntil.ts` - waitUntilWithTimeout関数（timeout=30000ms）
- E-05: `packages/decap-cms-backend-github/src/implementation.tsx` - MAX_CONCURRENT_DOWNLOADS=10、status()メソッド
- E-06: `packages/decap-server/src/middlewares/localGit/index.ts` - Mutex withTimeout(3000ms)
- E-07: `packages/decap-cms-widget-relation/src/RelationCache.js` - maxSize=100
- E-08: `packages/decap-server/src/middlewares/common/index.ts` - express.json({ limit: '50mb' })、cors設定
- E-09: `packages/decap-cms-lib-auth/src/utils.js` - isInsecureProtocol、createNonce、validateNonce
- E-10: `packages/decap-cms-lib-auth/src/pkce-oauth.js` - sha256、generateVerifierCode、createCodeChallenge、clearCodeVerifier、_loadOidcConfig
- E-11: `packages/decap-cms-lib-auth/src/implicit-oauth.js` - clearHash、completeAuth
- E-12: `packages/decap-cms-core/src/backend.ts` - LocalStorageAuthStore
- E-13: `packages/decap-server/src/middlewares/joi/customValidators.ts` - pathTraversal
- E-14: `packages/decap-cms-core/src/lib/urlHelper.ts` - sanitizeSlug、sanitizeURI
- E-15: `packages/decap-cms-core/src/constants/configSchema.js` - AJVバリデーション
- E-16: `packages/decap-cms-core/src/components/UI/ErrorBoundary.js` - ErrorBoundaryコンポーネント
- E-17: `package.json` - browserslist設定、scripts定義
- E-18: `packages/decap-cms-backend-{github,gitlab,bitbucket,gitea,azure}/` - 各バックエンド実装
- E-19: `packages/decap-cms-lib-auth/src/{pkce-oauth,implicit-oauth,netlify-auth}.js` - 各認証方式
- E-20: `packages/decap-cms-media-library-{cloudinary,uploadcare}/` - 外部メディアライブラリ
- E-21: `packages/decap-cms-locales/src/` - ロケールファイル群
- E-22: `lerna.json` + `packages/` ディレクトリ構成
- E-23: `tsconfig.json` - TypeScript設定
- E-24: `commitlint.config.js` - コミットリント設定
- E-25: `cypress.config.ts` - Cypress E2E設定（retries.runMode=4）
- E-26: `packages/*/webpack.config.js` - 各パッケージのwebpack設定

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | NFT-001: APIリクエストタイムアウト60秒 | E-01 | ○ |
| C-02 | NFT-002: レートリミット時の指数バックオフ（最大5回） | E-02 | ○ |
| C-03 | NFT-003: asyncLockタイムアウト15秒 | E-03 | ○ |
| C-04 | NFT-004: waitUntilWithTimeoutデフォルト30秒 | E-04 | ○ |
| C-05 | NFT-005: 同時ダウンロード制限10件 | E-05 | ○ |
| C-06 | NFT-006: Mutexタイムアウト3秒 | E-06 | ○ |
| C-07 | NFT-007: RelationCacheサイズ上限100件 | E-07 | ○ |
| C-08 | NFT-008: localForageによるファイルキャッシュ | E-02 | ○ |
| C-09 | NFT-009: JSONリクエストサイズ上限50MB | E-08 | ○ |
| C-10 | NFT-010: HTTPS必須プロトコル検証 | E-09 | ○ |
| C-11 | NFT-011: PKCEコードチャレンジ（SHA-256） | E-10 | ○ |
| C-12 | NFT-012: Nonce検証によるCSRF防止 | E-09 | ○ |
| C-13 | NFT-013: code_verifierセッション管理 | E-10 | ○ |
| C-14 | NFT-014: アクセストークンURL履歴除去 | E-11 | ○ |
| C-15 | NFT-015: 認証情報ローカルストレージ管理 | E-12 | ○ |
| C-16 | NFT-016: Bearerトークン付与 | E-02 | ○ |
| C-17 | NFT-017: パストラバーサル防止 | E-13 | ○ |
| C-18 | NFT-018: スラグサニタイズ | E-14 | ○ |
| C-19 | NFT-019: 設定ファイルスキーマバリデーション | E-15 | ○ |
| C-20 | NFT-020: CORS設定 | E-08 | ○ |
| C-21 | NFT-021: OIDC自動ディスカバリ | E-10 | ○ |
| C-22 | NFT-022: ErrorBoundaryコンポーネント動作 | E-16 | ○ |
| C-23 | NFT-023: APIError返却 | E-02 | ○ |
| C-24 | NFT-024: GitHub APIステータス監視 | E-05 | ○ |
| C-25 | NFT-025: エントリバックアップ・復旧 | E-12, E-16 | ○ |
| C-26 | NFT-026: レートリミットエラー後のリトライ（1-3600秒） | E-02 | ○ |
| C-27 | NFT-027: 対象ブラウザ互換性 | E-17 | ○ |
| C-28 | NFT-028: 複数Gitバックエンド互換性 | E-18 | ○ |
| C-29 | NFT-029: 複数認証方式互換性 | E-19 | ○ |
| C-30 | NFT-030: 外部メディアライブラリ互換性 | E-20 | △ |
| C-31 | NFT-031: 多言語ロケール互換性 | E-21 | △ |
| C-32 | NFT-032: モノレポパッケージ独立性 | E-22 | △ |
| C-33 | NFT-033: TypeScript型チェック | E-17, E-23 | ○ |
| C-34 | NFT-034: ESLint/Prettier/Stylelintリント | E-17 | ○ |
| C-35 | NFT-035: ユニットテスト網羅率 | E-17 | ○ |
| C-36 | NFT-036: E2Eテスト | E-25 | ○ |
| C-37 | NFT-037: webpackビルド | E-26 | ○ |
| C-38 | NFT-038: commitlint設定 | E-24 | ○ |
| C-39 | NFT-039: SHA-256ハッシュ生成 | E-10 | ○ |
| C-40 | NFT-040: 暗号学的乱数生成 | E-10 | ○ |

## 4) 不足情報（Unknown / Missing）
- **NFT-030（外部メディアライブラリ互換性）**: Cloudinary/Uploadcareパッケージの実装は存在するが、具体的な統合テストの合格基準（ファイルサイズ上限、対応フォーマット等）がコードから明確に読み取れない
  - 候補：Cloudinary APIドキュメント / Uploadcare APIドキュメント / 統合テスト仕様書
- **NFT-031（多言語ロケール互換性）**: ロケールファイルは存在するが、対応言語の完全な一覧と各ロケールの翻訳網羅率がコードから完全には判断できない
  - 候補：国際化要件定義書 / ロケールファイルの翻訳カバレッジレポート
- **NFT-032（モノレポパッケージ独立性）**: lerna.jsonとpackages構成から構造は確認できるが、循環依存の有無を静的に検証するための具体的基準がコード上に明示されていない
  - 候補：依存関係グラフ分析ツール出力 / アーキテクチャ設計書

## 5) リスクフラグ（レビュー観点）
- **リスク2（高リスク）**: CORS設定がデフォルトでワイルドカード（`*`）になっている点。プロダクション環境では適切なオリジン制限が必要（NFT-020）
- **リスク1（中リスク）**: Implicit OAuthフロー（NFT-014）はPKCEと比較してセキュリティレベルが低い。将来的にPKCEへの移行を検討すべき
- **リスク1（中リスク）**: localForageキャッシュ（NFT-008）にはサイズ上限が明示的に設定されていない。大量のファイルを扱う場合にブラウザストレージ容量を超過する可能性がある
- **リスク0（低リスク）**: fetchWithTimeoutの60秒タイムアウト（NFT-001）はハードコードされており、設定で変更できない

## 6) レビュアーチェックリスト（最小）
- [ ] 性能テスト（NFT-001〜009）のタイムアウト値・閾値がコード上の定数と一致しているか確認
- [ ] セキュリティテスト（NFT-010〜021）のOAuth/PKCE認証フローが最新のセキュリティベストプラクティスに準拠しているか確認
- [ ] CORS設定（NFT-020）がプロダクション環境で適切に制限されているか確認
- [ ] パストラバーサル防止（NFT-017）のJoiバリデーションがすべてのエントリポイントに適用されているか確認
- [ ] ブラウザ互換性（NFT-027）のbrowserslist設定が最新の対象ブラウザ要件と一致しているか確認
- [ ] E2Eテスト（NFT-036）のリトライ回数4回が適切かどうか確認
- [ ] 外部メディアライブラリ（NFT-030）の統合テスト合格基準を別途定義する必要があるか確認
