---
generated_at: 2026-03-01 20:50:00
metrics:
  claims_total: 35
  claims_with_evidence: 33
  claims_without_evidence: 2
confidence_derived: 0.94
---

# 根拠レポート：live-preview-react 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：33 / 35、根拠なし：2
- 優先レビュー（高）
  1. **UT-LPR-015（serverURL空文字の挙動）**：エラーハンドリングの仕様が明示されていない
  2. **UT-LPR-027（refreshが関数でない場合）**：TypeScript型定義では必須だがランタイム挙動の確認が必要

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

- E-01: `packages/live-preview-react/src/useLivePreview.ts` - useLivePreviewフック実装
- E-02: `packages/live-preview-react/src/RefreshRouteOnSave.tsx` - RefreshRouteOnSaveコンポーネント実装
- E-03: `packages/live-preview-react/src/index.ts` - エクスポート定義
- E-04: `packages/live-preview-react/package.json` - パッケージ依存関係定義
- E-05: `packages/live-preview/src/subscribe.ts` - subscribe関数実装
- E-06: `packages/live-preview/src/ready.ts` - ready関数実装
- E-07: `packages/live-preview/src/isDocumentEvent.ts` - isDocumentEvent関数実装
- E-08: `packages/live-preview/src/types.ts` - 型定義

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

### useLivePreviewフック関連

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 初期データが正しく返却されること | E-01 (L64: `useState<T>(initialData)`) | ○ |
| C-02 | isLoadingが初期状態でtrueであること | E-01 (L65: `useState<boolean>(true)`) | ○ |
| C-03 | subscribeが呼び出されること | E-01 (L74-81: subscribe関数呼び出し) | ○ |
| C-04 | readyメッセージが送信されること | E-01 (L86-88: ready関数呼び出し) | ○ |
| C-05 | readyメッセージが一度だけ送信されること | E-01 (L83-84: hasSentReadyMessage ref) | ○ |
| C-06 | コールバック実行時にdataが更新されること | E-01 (L68-71: onChange関数) | ○ |
| C-07 | コールバック実行時にisLoadingがfalseになること | E-01 (L70: setIsLoading(false)) | ○ |
| C-08 | アンマウント時にunsubscribeが呼び出されること | E-01 (L91-93: return文でunsubscribe) | ○ |
| C-09 | apiRouteオプションが正しく渡されること | E-01 (L75: apiRoute引数), E-05 | ○ |
| C-10 | depthオプションが正しく渡されること | E-01 (L77: depth引数), E-05 | ○ |
| C-11 | requestHandlerが正しく渡されること | E-01 (L79: requestHandler引数), E-05 | ○ |
| C-12 | serverURL変更時に再subscribeされること | E-01 (L94: 依存配列にserverURL) | ○ |
| C-13 | initialData変更時に再subscribeされること | E-01 (L94: 依存配列にinitialData) | ○ |
| C-14 | ジェネリック型が正しく適用されること | E-01 (L41: ジェネリック型定義) | ○ |
| C-15 | serverURL空文字の場合の挙動 | **根拠なし** | △ |
| C-16 | initialData空オブジェクトの場合 | E-01 (L64: useStateで直接設定) | ○ |
| C-17 | initialDataがネストされたオブジェクトの場合 | E-01 (L41: Record<string, any>型) | ○ |
| C-18 | depth=0の場合 | E-01, E-05 (数値パラメータとして渡される) | ○ |

### RefreshRouteOnSaveコンポーネント関連

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | コンポーネントがnullを返すこと | E-02 (L54: return null) | ○ |
| C-20 | マウント時にaddEventListenerが呼び出されること | E-02 (L33: window.addEventListener) | ○ |
| C-21 | マウント時にreadyメッセージが送信されること | E-02 (L39-41: ready関数呼び出し) | ○ |
| C-22 | readyメッセージ送信後にrefreshが呼び出されること | E-02 (L44: refresh()) | ○ |
| C-23 | readyメッセージが一度だけ送信されること | E-02 (L36-37: hasSentReadyMessage ref) | ○ |
| C-24 | アンマウント時にremoveEventListenerが呼び出されること | E-02 (L48-50: removeEventListener) | ○ |
| C-25 | isDocumentEventがtrueのときrefreshが呼び出されること | E-02 (L19-21: 条件分岐), E-07 | ○ |
| C-26 | isDocumentEventがfalseのときrefreshが呼び出されないこと | E-02 (L19: if条件), E-07 | ○ |
| C-27 | refreshが関数でない場合にconsole.errorが出力されること | **根拠なし** | △ |
| C-28 | serverURL変更時に再度イベントリスナーが設定されること | E-02 (L52: 依存配列にserverURL) | ○ |
| C-29 | window未定義の場合（SSR）にイベントリスナーが登録されないこと | E-02 (L32, L47: typeof window !== 'undefined') | ○ |
| C-30 | apiRouteオプションが依存配列に含まれていること | E-02 (L52: 依存配列にapiRoute) | ○ |
| C-31 | depthオプションが依存配列に含まれていること | E-02 (L52: 依存配列にdepth) | ○ |

### エクスポート関連

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | RefreshRouteOnSaveがエクスポートされていること | E-03 (L1: export文) | ○ |
| C-33 | useLivePreviewがエクスポートされていること | E-03 (L2: export文) | ○ |
| C-34 | useLivePreview.tsにuse clientディレクティブが設定されていること | E-01 (L1: 'use client') | ○ |
| C-35 | RefreshRouteOnSave.tsxにuse clientディレクティブが設定されていること | E-02 (L1: 'use client') | ○ |

## 4) 不足情報（Unknown / Missing）

### C-15: serverURL空文字の場合の挙動
- **理由**: ソースコード内にserverURLの空文字チェックが存在しない。subscribe関数やready関数に空文字が渡された場合の動作は未定義。
- **候補**:
  - 実装にバリデーションを追加する
  - ライブプレビューパッケージ側でエラーをスローする仕様を確認
  - 空文字の場合は何も起きない（postMessageが失敗する）ことを確認

### C-27: refreshが関数でない場合の挙動
- **理由**: TypeScript型定義では`refresh: () => void`が必須だが、実行時にundefinedが渡された場合のコードパス（L20-25）が存在。ただし通常使用では発生しない。
- **候補**:
  - Reactの型システムにより呼び出し側で強制される
  - コンソールエラーメッセージの出力が確認できる（L24）

## 5) リスクフラグ（レビュー観点）

| レベル | 項目 | 説明 |
|--------|------|------|
| 0 | useLivePreview基本動作 | ソースコードから直接確認可能、低リスク |
| 0 | RefreshRouteOnSave基本動作 | ソースコードから直接確認可能、低リスク |
| 1 | SSR対応 | windowチェックは存在するが、Next.js環境での統合テストが望ましい |
| 1 | live-previewパッケージとの連携 | 依存パッケージの内部実装に依存するテストケースあり |
| 0 | エクスポート | 静的に確認可能、低リスク |

## 6) レビュアーチェックリスト（最小）

- [ ] useLivePreviewフックの状態管理（data, isLoading）が期待通り動作するか
- [ ] subscribeのコールバックでdataが正しく更新されるか
- [ ] アンマウント時のクリーンアップ（unsubscribe, removeEventListener）が正しく動作するか
- [ ] SSR環境（window未定義）での安全性が確保されているか
- [ ] hasSentReadyMessage refによる重複送信防止が機能するか
- [ ] isDocumentEventによるイベントフィルタリングが正しく動作するか
- [ ] 依存配列の変更による再実行が適切に行われるか
