---
generated_at: 2026-03-01 20:45:00
metrics:
  claims_total: 58
  claims_with_evidence: 58
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：storage-azure 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：58 / 58、根拠なし：0
- 優先レビュー（高）
  1. **該当なし**：全テストケースにソースコード上の根拠あり

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

- E-01: `packages/storage-azure/src/index.ts` - メインエントリポイント、azureStorage関数、azureStorageInternal関数
- E-02: `packages/storage-azure/src/generateSignedURL.ts` - getGenerateSignedURLHandler関数、defaultAccess関数
- E-03: `packages/storage-azure/src/generateURL.ts` - getGenerateURL関数
- E-04: `packages/storage-azure/src/handleDelete.ts` - getHandleDelete関数
- E-05: `packages/storage-azure/src/handleUpload.ts` - getHandleUpload関数、multipartThreshold定数
- E-06: `packages/storage-azure/src/staticHandler.ts` - getHandler関数
- E-07: `packages/storage-azure/src/utils/getStorageClient.ts` - getStorageClient関数、azureClientsマップ
- E-08: `packages/storage-azure/src/client/AzureClientUploadHandler.ts` - AzureClientUploadHandler
- E-09: `packages/storage-azure/src/exports/client.ts` - エクスポートファイル

## 3) Claims と根拠の対応（レビューの主戦場）

### index.ts（azureStorage関数）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 有効なオプションでプラグインが正常に生成されること | E-01: L83-153 azureStorage関数の実装 | ○ |
| C-02 | enabled=trueでプラグインが有効化されること | E-01: L92, L111-113 isPluginDisabled判定 | ○ |
| C-03 | enabled=falseでプラグインが無効化されること | E-01: L111-113 早期リターン | ○ |
| C-04 | collectionsにtrueを指定した場合デフォルト設定が適用されること | E-01: L118-129 collectionsWithAdapter生成 | ○ |
| C-05 | collectionsにオブジェクトを指定した場合カスタム設定が適用されること | E-01: L121-125 条件分岐 | ○ |
| C-06 | clientUploadsが設定された場合initClientUploadsが呼び出されること | E-01: L94-109 initClientUploads呼び出し | ○ |
| C-07 | alwaysInsertFieldsがtrueの場合フィールドが常に挿入されること | E-01: L149-152 cloudStoragePlugin引数 | ○ |
| C-08 | 対象コレクションにdisableLocalStorage: trueが設定されること | E-01: L132-147 config生成 | ○ |
| C-09 | allowContainerCreate=trueでonInitが設定されること | E-01: L165-169, L183 onInit設定 | ○ |
| C-10 | allowContainerCreate=falseでonInitが設定されないこと | E-01: L183 スプレッド演算子による条件付き設定 | ○ |

### generateSignedURL.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | 有効なリクエストで署名付きURLが生成されること | E-02: L27-67 ハンドラー実装 | ○ |
| C-12 | prefixが設定されている場合ファイルキーにprefixが含まれること | E-02: L43, L50 prefix処理 | ○ |
| C-13 | ファイル名がサニタイズされること | E-02: L49 sanitizeFilename呼び出し | ○ |
| C-14 | req.jsonがnullの場合APIErrorがスローされること | E-02: L28-30 null チェック | ○ |
| C-15 | 存在しないコレクションの場合APIErrorがスローされること | E-02: L38-41 コレクション存在チェック | ○ |
| C-16 | アクセス権限がない場合Forbiddenがスローされること | E-02: L45-47 access関数チェック | ○ |
| C-17 | 認証済みユーザーの場合trueが返却されること | E-02: L19 defaultAccess実装 | ○ |
| C-18 | 未認証ユーザーの場合falseが返却されること | E-02: L19 !!req.user評価 | ○ |
| C-19 | SASトークンの有効期限が30分後に設定されること | E-02: L59 expiresOn設定 | ○ |

### generateURL.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-20 | baseURL、containerName、filenameからURLが正しく生成されること | E-03: L10-14 getGenerateURL実装 | ○ |
| C-21 | prefixが指定された場合URLに含まれること | E-03: L13 path.posix.join | ○ |
| C-22 | prefixが空文字の場合正しくURLが生成されること | E-03: L12 prefix = '' デフォルト値 | ○ |
| C-23 | prefixが未指定の場合正しくURLが生成されること | E-03: L12 prefix = '' デフォルト値 | ○ |

### handleDelete.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | 指定されたファイルが削除されること | E-04: L12-16 getHandleDelete実装 | ○ |
| C-25 | prefixが指定された場合正しいパスで削除されること | E-04: L14 path.posix.join | ○ |
| C-26 | 存在しないファイルの削除でエラーにならないこと | E-04: L15 deleteIfExists使用 | ○ |
| C-27 | prefixが未定義の場合デフォルト値で処理されること | E-04: L13 prefix = '' デフォルト値 | ○ |

### handleUpload.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | バッファサイズが50MB未満の場合uploadが呼び出されること | E-05: L16, L24-29 multipartThreshold判定 | ○ |
| C-29 | バッファサイズが50MB以上の場合uploadStreamが呼び出されること | E-05: L36-38 uploadStream呼び出し | ○ |
| C-30 | tempFilePathが存在する場合uploadStreamが呼び出されること | E-05: L32-34 条件分岐 | ○ |
| C-31 | data.prefixが設定されている場合そちらが優先されること | E-05: L19 data.prefix \|\| prefix | ○ |
| C-32 | 引数prefixが設定されている場合使用されること | E-05: L17, L19 prefix引数 | ○ |
| C-33 | アップロード後にdataが返却されること | E-05: L29, L40 return data | ○ |
| C-34 | blobContentTypeが正しく設定されること | E-05: L26 blobHTTPHeaders設定 | ○ |
| C-35 | uploadStreamのタイムアウトが30分に設定されること | E-05: L37 AbortController.timeout | ○ |
| C-36 | バッファが空で50MB未満の場合uploadStreamが呼び出されること | E-05: L24 file.buffer.length > 0 条件 | ○ |

### staticHandler.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-37 | ファイルが正常にストリーミングされること | E-06: L87-109 ReadableStream生成 | ○ |
| C-38 | Content-Typeヘッダーが正しく設定されること | E-06: L59 headers.append | ○ |
| C-39 | ETagヘッダーが設定されること | E-06: L60-62 etag設定 | ○ |
| C-40 | SVGファイルの場合CSPヘッダーが設定されること | E-06: L65-67 CSP設定 | ○ |
| C-41 | ETagが一致する場合304レスポンスが返却されること | E-06: L79-84 304レスポンス | ○ |
| C-42 | Rangeリクエストで部分コンテンツが返却されること | E-06: L32-49 Range処理 | ○ |
| C-43 | 無効なRangeリクエストで416が返却されること | E-06: L35-40 invalid判定 | ○ |
| C-44 | ファイルが存在しない場合404が返却されること | E-06: L111-112 RestError処理 | ○ |
| C-45 | fileSizeが取得できない場合500が返却されること | E-06: L27-29 fileSize null チェック | ○ |
| C-46 | 予期しないエラーの場合500が返却されること | E-06: L113-115 catch処理 | ○ |
| C-47 | modifyResponseHeadersが設定されている場合呼び出されること | E-06: L72-77 modifyResponseHeaders | ○ |
| C-48 | clientUploadContextが正しく処理されること | E-06: L18 getFilePrefix呼び出し | ○ |

### getStorageClient.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | 新規クライアントが生成されキャッシュされること | E-07: L19-25 キャッシュ処理 | ○ |
| C-50 | キャッシュ済みクライアントが返却されること | E-07: L15-17 キャッシュヒット | ○ |
| C-51 | clientCacheKeyが指定された場合それがキーとして使用されること | E-07: L13 cacheKey生成 | ○ |
| C-52 | clientCacheKeyが未指定の場合デフォルトキーが使用されること | E-07: L13 `azure:${containerName}` | ○ |
| C-53 | 異なるcontainerNameで異なるクライアントがキャッシュされること | E-07: L8, L23 Mapベースのキャッシュ | ○ |

### AzureClientUploadHandler.ts
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | 署名付きURLを取得してファイルをアップロードすること | E-08: L6-37 handler実装 | ○ |
| C-55 | 正しいヘッダーでPUTリクエストが送信されること | E-08: L27-34 headers設定 | ○ |
| C-56 | formatAdminURLで正しいエンドポイントが生成されること | E-08: L7-11 formatAdminURL呼び出し | ○ |
| C-57 | アップロード後にprefixが返却されること | E-08: L37 return { prefix } | ○ |
| C-58 | credentials: 'include'でfetchが呼び出されること | E-08: L18 credentials設定 | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし：全テストケースに対してソースコード上の根拠が確認できました

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコード解析に基づいており、根拠が明確

### 注意点
- Azure SDKのモック設定が必要（@azure/storage-blob）
- ファイルシステム操作のモック設定が必要（fs.createReadStream）
- fetch APIのモック設定が必要（クライアントサイドテスト）

## 6) レビュアーチェックリスト（最小）
- [ ] テストケースがソースコードの全関数・メソッドを網羅しているか確認
- [ ] 正常系・異常系・境界値の観点が適切にカバーされているか確認
- [ ] テストIDの命名規則（UT-AZU-XXX）が一貫しているか確認
- [ ] 優先度の設定が適切か確認（セキュリティ関連は高優先度）
- [ ] Azure SDK固有の挙動（SASトークン、Blob操作）に対するテストケースが適切か確認
