---
generated_at: 2026-03-01 10:30:00
metrics:
  claims_total: 63
  claims_with_evidence: 63
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：Reflection モジュール単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

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

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

- E-01: `src/Illuminate/Reflection/Reflector.php` - Reflectorクラス定義（7つのpublicメソッド）
- E-02: `src/Illuminate/Reflection/helpers.php` - lazy関数・proxy関数定義
- E-03: `src/Illuminate/Reflection/Traits/ReflectsClosures.php` - ReflectsClosuresトレイト定義（4つのprotectedメソッド）
- E-04: `docs/code-to-docs/単体テストケース一覧/plan.md` - プロジェクト情報（PHP/Laravel Framework 12.x）

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

### Reflector::isCallable（UT-REF-001〜013）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 通常の関数名でcallableチェックが可能 | E-01 L21-26: `is_callable($var, $syntaxOnly)` | ○ |
| C-02 | クロージャのcallableチェック | E-01 L21-26: 非配列の場合`is_callable`使用 | ○ |
| C-03 | オブジェクト+publicメソッド配列のチェック | E-01 L45-47: `ReflectionMethod->isPublic()` | ○ |
| C-04 | クラス名+静的メソッド配列のチェック | E-01 L45-47: `method_exists`と`isPublic`確認 | ○ |
| C-05 | syntaxOnlyモードの動作 | E-01 L31-35: syntaxOnlyで構文チェックのみ | ○ |
| C-06 | __callマジックメソッド対応 | E-01 L49-50: `method_exists($class, '__call')` | ○ |
| C-07 | __callStaticマジックメソッド対応 | E-01 L53-54: `method_exists($class, '__callStatic')` | ○ |
| C-08 | 配列に2番目の要素がない場合の処理 | E-01 L27-29: `isset($var[0], $var[1])`チェック | ○ |
| C-09 | 2番目の要素が文字列でない場合の処理 | E-01 L27: `is_string($var[1] ?? null)`チェック | ○ |
| C-10 | 存在しないクラスの場合の処理 | E-01 L41-43: `class_exists($class)`チェック | ○ |
| C-11 | privateメソッドの場合の処理 | E-01 L46: `isPublic()`でfalseを返す | ○ |
| C-12 | protectedメソッドの場合の処理 | E-01 L46: `isPublic()`でfalseを返す | ○ |
| C-13 | 空配列の場合の処理 | E-01 L27: `isset($var[0], $var[1])`でfalse | ○ |

### Reflector::getClassAttribute/getClassAttributes（UT-REF-014〜020）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | クラス属性の取得 | E-01 L70-73: `getClassAttributes`使用、`first()`で取得 | ○ |
| C-15 | オブジェクトインスタンスからの属性取得 | E-01 L88: `new ReflectionClass($objectOrClass)` | ○ |
| C-16 | ascend=trueで親クラス検索 | E-01 L92-97: do-whileで親クラスを辿る | ○ |
| C-17 | 属性が存在しない場合のnull返却 | E-01 L72: `first()`は空の場合null | ○ |
| C-18 | 複数同一属性のCollection返却 | E-01 L93-96: `array_map`で全属性をCollection化 | ○ |
| C-19 | includeParents=trueでネストCollection | E-01 L99: `new Collection($attributes)` | ○ |
| C-20 | 属性なし時の空Collection | E-01 L93-96: 属性がなければ空Collection | ○ |

### Reflector::getParameterClassName/getParameterClassNames（UT-REF-021〜029）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | クラス型ヒントからクラス名取得 | E-01 L108-117: `getTypeName`で名前取得 | ○ |
| C-22 | selfキーワードの解決 | E-01 L158-159: `$name === 'self'`で実クラス名返却 | ○ |
| C-23 | parentキーワードの解決 | E-01 L162-163: `$name === 'parent'`で親クラス名返却 | ○ |
| C-24 | 組み込み型の場合null返却 | E-01 L112: `$type->isBuiltin()`チェック | ○ |
| C-25 | 型ヒントなしの場合null返却 | E-01 L112: `$type instanceof ReflectionNamedType`チェック | ○ |
| C-26 | Union型の全クラス名取得 | E-01 L125-144: `ReflectionUnionType`処理 | ○ |
| C-27 | 単一クラス型の1要素配列返却 | E-01 L130: `array_filter([getParameterClassName])` | ○ |
| C-28 | Union型内の組み込み型フィルタ | E-01 L136: `$listedType->isBuiltin()`で除外 | ○ |
| C-29 | 型ヒントなしの空配列返却 | E-01 L130: `array_filter`で空配列 | ○ |

### Reflector::isParameterSubclassOf（UT-REF-030〜033）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 | サブクラス判定 | E-01 L177-183: `isSubclassOf($className)` | ○ |
| C-31 | インターフェース実装判定 | E-01 L182: `interface_exists`も確認 | ○ |
| C-32 | 継承関係なしの場合false | E-01 L183: `isSubclassOf`がfalse | ○ |
| C-33 | 型ヒントなしの場合false | E-01 L181: `$paramClassName`がnullでfalse | ○ |

### Reflector::isParameterBackedEnumWithStringBackingType（UT-REF-034〜038）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-34 | string型Backed Enum検出 | E-01 L204-208: `ReflectionEnum`で確認 | ○ |
| C-35 | int型Backed Enumの除外 | E-01 L208: `getBackingType()->getName() == 'string'` | ○ |
| C-36 | Unit Enumの除外 | E-01 L207: `$reflectionBackedEnum->isBacked()` | ○ |
| C-37 | 通常クラスの除外 | E-01 L204: `enum_exists`でfalse | ○ |
| C-38 | 型ヒントなしの処理 | E-01 L194: `ReflectionNamedType`チェック | ○ |

### lazy関数（UT-REF-039〜043）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-39 | クラス名指定でレイジーゴースト生成 | E-02 L35-37: `newLazyGhost`使用 | ○ |
| C-40 | クロージャから型推論 | E-02 L31-33: `firstClosureParameterType`使用 | ○ |
| C-41 | eagerプロパティ設定 | E-02 L45-47: `setRawValueWithoutLazyInitialization` | ○ |
| C-42 | 配列返却時のコンストラクタ展開 | E-02 L40-42: `$instance->__construct(...$result)` | ○ |
| C-43 | オプション適用 | E-02 L37,43: `$options`パラメータ使用 | ○ |

### proxy関数（UT-REF-044〜048）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | クラス名指定でレイジープロキシ生成 | E-02 L83-85: `newLazyProxy`使用 | ○ |
| C-45 | 戻り値型から推論 | E-02 L75: `closureReturnTypes`使用 | ○ |
| C-46 | パラメータ型から推論 | E-02 L75: `firstClosureParameterType`フォールバック | ○ |
| C-47 | eagerプロパティ設定 | E-02 L91-93: `setRawValueWithoutLazyInitialization` | ○ |
| C-48 | コールバック引数の確認 | E-02 L85-86: `$callback($proxy, $eager)` | ○ |

### ReflectsClosures::firstClosureParameterType（UT-REF-049〜051）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | 最初のパラメータ型取得 | E-03 L24-37: `closureParameterTypes`使用 | ○ |
| C-50 | パラメータなしでRuntimeException | E-03 L28-30: `throw new RuntimeException` | ○ |
| C-51 | 型ヒントなしでRuntimeException | E-03 L32-34: `$types[0] === null`チェック | ○ |

### ReflectsClosures::firstClosureParameterTypes（UT-REF-052〜054）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 | Union型の全型名取得 | E-03 L48-73: `getParameterClassNames`使用 | ○ |
| C-53 | パラメータなしでRuntimeException | E-03 L64-66: `throw new RuntimeException` | ○ |
| C-54 | 型ヒントなしでRuntimeException | E-03 L68-70: 空配列チェック | ○ |

### ReflectsClosures::closureParameterTypes（UT-REF-055〜057）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | 全パラメータの型取得 | E-03 L83-96: `mapWithKeys`で連想配列生成 | ○ |
| C-56 | 可変長引数でnull返却 | E-03 L89-90: `$parameter->isVariadic()`チェック | ○ |
| C-57 | パラメータなしで空配列 | E-03 L87-95: 空の場合は空配列 | ○ |

### ReflectsClosures::closureReturnTypes（UT-REF-058〜063）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | 戻り値型の取得 | E-03 L106-125: `getReturnType`使用 | ○ |
| C-59 | Union型戻り値の全型取得 | E-03 L115-117: `ReflectionUnionType`処理 | ○ |
| C-60 | 戻り値型なしで空配列 | E-03 L110: `getReturnType() === null`チェック | ○ |
| C-61 | Intersection型で空配列 | E-03 L111: `ReflectionIntersectionType`チェック | ○ |
| C-62 | 組み込み型で空配列 | E-03 L120: `$type->isBuiltin()`でreject | ○ |
| C-63 | self/staticの除外 | E-03 L121: `in_array($type->getName(), ['static', 'self'])` | ○ |

## 4) 不足情報（Unknown / Missing）
- なし - 全てのテストケースにソースコードからの直接的な根拠あり

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全テストケースがソースコードに基づいており、推測による記述なし

## 6) レビュアーチェックリスト（最小）
- [ ] Reflector::isCallableの各条件分岐が網羅されているか確認
- [ ] getClassAttribute/getClassAttributesの継承チェーン処理が正しく検証されているか確認
- [ ] getParameterClassName系メソッドのself/parentキーワード解決ロジック確認
- [ ] isParameterBackedEnumWithStringBackingTypeのEnum判定ロジック確認
- [ ] lazy/proxy関数のレイジーインスタンス生成ロジック確認
- [ ] ReflectsClosuresトレイトのRuntimeException発生条件の網羅性確認
- [ ] closureReturnTypesのIntersection型・組み込み型・self/static除外ロジック確認
