---
generated_at: 2026-01-29 10:30:00
metrics:
  claims_total: 113
  claims_with_evidence: 113
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：Core-Content-Property 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：113 / 113、根拠なし：0
- 優先レビュー（高）
  1. **sortByConfig メソッド**：複数のソートタイプに対応、ロジックの網羅性確認推奨
  2. **groupByPropertyGroups メソッド**：複雑な集約ロジック、エッジケース追加検討
  3. **Hydrator の型変換**：UUID変換、bool変換の境界値追加検討

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

- E-01: `src/Core/Content/Property/PropertyGroupEntity.php`
- E-02: `src/Core/Content/Property/PropertyGroupDefinition.php`
- E-03: `src/Core/Content/Property/PropertyGroupCollection.php`
- E-04: `src/Core/Content/Property/PropertyGroupHydrator.php`
- E-05: `src/Core/Content/Property/PropertyEvents.php`
- E-06: `src/Core/Content/Property/Aggregate/PropertyGroupOption/PropertyGroupOptionEntity.php`
- E-07: `src/Core/Content/Property/Aggregate/PropertyGroupOption/PropertyGroupOptionDefinition.php`
- E-08: `src/Core/Content/Property/Aggregate/PropertyGroupOption/PropertyGroupOptionCollection.php`
- E-09: `src/Core/Content/Property/Aggregate/PropertyGroupOption/PropertyGroupOptionHydrator.php`
- E-10: `src/Core/Content/Property/Aggregate/PropertyGroupTranslation/PropertyGroupTranslationEntity.php`
- E-11: `src/Core/Content/Property/Aggregate/PropertyGroupTranslation/PropertyGroupTranslationDefinition.php`
- E-12: `src/Core/Content/Property/Aggregate/PropertyGroupTranslation/PropertyGroupTranslationCollection.php`
- E-13: `src/Core/Content/Property/Aggregate/PropertyGroupOptionTranslation/PropertyGroupOptionTranslationEntity.php`
- E-14: `src/Core/Content/Property/Aggregate/PropertyGroupOptionTranslation/PropertyGroupOptionTranslationDefinition.php`
- E-15: `src/Core/Content/Property/Aggregate/PropertyGroupOptionTranslation/PropertyGroupOptionTranslationCollection.php`

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

### PropertyGroupEntity (UT-PRP-001 〜 UT-PRP-015)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getName()がnull許容のstring型を返却 | E-01 L36-39 | ○ |
| C-02 | setName()がnull許容パラメータを受け入れる | E-01 L41-44 | ○ |
| C-03 | getFilterable()がbool型を返却 | E-01 L46-49 | ○ |
| C-04 | getVisibleOnProductDetailPage()がnull時にfalseを返却 | E-01 L56-59 | ○ |
| C-05 | getOptions()がPropertyGroupOptionCollectionまたはnullを返却 | E-01 L66-69 | ○ |
| C-06 | getTranslations()がPropertyGroupTranslationCollectionまたはnullを返却 | E-01 L76-79 | ○ |
| C-07 | displayType, sortingTypeがstring型必須プロパティ | E-01 L20-22 | ○ |

### PropertyGroupDefinition (UT-PRP-016 〜 UT-PRP-024)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-08 | ENTITY_NAME定数がproperty_group | E-02 L25 | ○ |
| C-09 | DISPLAY_TYPE定数がtext/image/media/color | E-02 L27-33 | ○ |
| C-10 | SORTING_TYPE定数がalphanumeric/position | E-02 L35-37 | ○ |
| C-11 | getDefaults()がdisplayType, sortingType, filterable, visibleOnProductDetailPageを返却 | E-02 L58-66 | ○ |
| C-12 | optionsがOneToManyAssociationFieldでCascadeDelete | E-02 L90 | ○ |

### PropertyGroupCollection (UT-PRP-025 〜 UT-PRP-035)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-13 | getOptionIdMap()がoption.id => group.idのマップを生成 | E-03 L18-33 | ○ |
| C-14 | sortByPositions()がposition, nameでソート | E-03 L35-45 | ○ |
| C-15 | sortByConfig()がsortingTypeに応じてオプションをソート | E-03 L48-79 | ○ |
| C-16 | alphanumericの場合は名前、positionの場合は位置でソート | E-03 L62-66 | ○ |
| C-17 | getApiAlias()がproduct_group_collectionを返却 | E-03 L81-84 | ○ |

### PropertyGroupHydrator (UT-PRP-036 〜 UT-PRP-040)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-18 | idがUuid::fromBytesToHexで変換される | E-04 L17-19 | ○ |
| C-19 | filterableがboolにキャストされる | E-04 L26-28 | ○ |
| C-20 | createdAt/updatedAtがDateTimeImmutableに変換される | E-04 L32-37 | ○ |

### PropertyGroupOptionEntity (UT-PRP-041 〜 UT-PRP-055)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | groupIdがstring型必須プロパティ | E-06 L22 | ○ |
| C-22 | colorHexCodeがnull許容string型 | E-06 L28 | ○ |
| C-23 | combinableがデフォルトfalse | E-06 L44 | ○ |
| C-24 | getGroup()がPropertyGroupEntityまたはnullを返却 | E-06 L91-94 | ○ |
| C-25 | getMedia()がMediaEntityまたはnullを返却 | E-06 L141-144 | ○ |

### PropertyGroupOptionDefinition (UT-PRP-056 〜 UT-PRP-066)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 | ENTITY_NAME定数がproperty_group_option | E-07 L36 | ○ |
| C-27 | getParentDefinitionClass()がPropertyGroupDefinitionを返却 | E-07 L63-66 | ○ |
| C-28 | groupIdがFkFieldでRequired | E-07 L72 | ○ |
| C-29 | combinableがRuntimeフラグ付きBoolField | E-07 L77 | ○ |
| C-30 | productPropertiesにCascadeDelete, ReverseInheritedフラグ | E-07 L83 | ○ |
| C-31 | productOptionsにRestrictDeleteフラグ | E-07 L84 | ○ |
| C-32 | productConfiguratorSettingsにRestrictDeleteフラグ | E-07 L82 | ○ |

### PropertyGroupOptionCollection (UT-PRP-067 〜 UT-PRP-078)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | getPropertyGroupIds()がgroupIdの配列を返却 | E-08 L19-22 | ○ |
| C-34 | filterByGroupId()が指定IDでフィルタ | E-08 L24-27 | ○ |
| C-35 | getMediaIds()がmediaIdの配列を返却 | E-08 L32-35 | ○ |
| C-36 | groupByPropertyGroups()がグループごとにオプションを集約 | E-08 L49-73 | ○ |
| C-37 | fillOptions()がバリデーションをスキップして設定 | E-08 L82-87 | ○ |

### PropertyGroupOptionHydrator (UT-PRP-078 〜 UT-PRP-085)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | id, groupId, mediaIdがUuid::fromBytesToHexで変換 | E-09 L17-28 | ○ |
| C-39 | media, groupがmanyToOneでハイドレート | E-09 L35-36 | ○ |
| C-40 | productProperties, productOptionsがmanyToManyでハイドレート | E-09 L41-42 | ○ |

### PropertyGroupTranslationEntity (UT-PRP-085 〜 UT-PRP-089)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | propertyGroupIdがstring型必須プロパティ | E-10 L15 | ○ |
| C-42 | name, description, positionがnull許容 | E-10 L17-21 | ○ |
| C-43 | getPropertyGroup()がPropertyGroupEntityまたはnullを返却 | E-10 L45-48 | ○ |

### PropertyGroupTranslationDefinition (UT-PRP-090 〜 UT-PRP-093)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | getDefaults()がposition=1を返却 | E-11 L36-39 | ○ |
| C-45 | nameがStringFieldでRequired | E-11 L54 | ○ |
| C-46 | descriptionがLongTextField | E-11 L55 | ○ |

### PropertyGroupTranslationCollection (UT-PRP-094 〜 UT-PRP-097)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | getPropertyGroupIds()がpropertyGroupIdの配列を返却 | E-12 L17-20 | ○ |
| C-48 | filterByPropertyGroupId()が指定IDでフィルタ | E-12 L22-25 | ○ |
| C-49 | getLanguageIds(), filterByLanguageId()が言語フィルタを提供 | E-12 L30-38 | ○ |

### PropertyGroupOptionTranslationEntity (UT-PRP-098 〜 UT-PRP-101)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | propertyGroupOptionIdがstring型必須プロパティ | E-13 L15 | ○ |
| C-51 | name, positionがnull許容 | E-13 L17-19 | ○ |
| C-52 | setPosition()がint型を受け入れる | E-13 L58-60 | ○ |

### PropertyGroupOptionTranslationDefinition (UT-PRP-102 〜 UT-PRP-105)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | getDefaults()がposition=1を返却 | E-14 L35-38 | ○ |
| C-54 | nameがStringFieldでRequired | E-14 L53 | ○ |
| C-55 | positionがIntFieldでApiAware | E-14 L54 | ○ |

### PropertyGroupOptionTranslationCollection (UT-PRP-106 〜 UT-PRP-109)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-56 | getPropertyGroupOptionIds()がpropertyGroupOptionIdの配列を返却 | E-15 L17-20 | ○ |
| C-57 | filterByPropertyGroupOptionId()が指定IDでフィルタ | E-15 L22-25 | ○ |
| C-58 | getLanguageIds(), filterByLanguageId()が言語フィルタを提供 | E-15 L30-38 | ○ |

### PropertyEvents (UT-PRP-110 〜 UT-PRP-113)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-59 | PROPERTY_GROUP_WRITTEN_EVENTがproperty_group.written | E-05 L10 | ○ |
| C-60 | PROPERTY_GROUP_DELETED_EVENTがproperty_group.deleted | E-05 L12 | ○ |
| C-61 | PROPERTY_GROUP_OPTION_WRITTEN_EVENTがproperty_group_option.written | E-05 L22 | ○ |
| C-62 | PROPERTY_GROUP_OPTION_DELETED_EVENTがproperty_group_option.deleted | E-05 L24 | ○ |

## 4) 不足情報（Unknown / Missing）
- 全てのテストケースにソースコードからの根拠あり
- 追加検討事項：
  - 既存のPHPUnitテストとの整合性確認（テストファイルが別ディレクトリに存在する可能性）
  - 実際の商品との連携テスト（ProductDefinitionとのリレーション）

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 基本的なgetter/setter、定数定義
- **1: 中リスク** - Collectionのフィルタリング、ソートメソッド
  - sortByPositions(): ソート安定性
  - sortByConfig(): alphanumericとpositionの切り替え
  - groupByPropertyGroups(): 複雑な集約ロジック
- **1: 中リスク** - Hydratorの型変換
  - UUID変換の境界値（不正なバイナリデータ）
  - DateTimeImmutable変換の日付フォーマット

## 6) レビュアーチェックリスト（最小）
- [ ] PropertyGroupCollectionのsortByConfigメソッドで、SORTING_TYPE以外の値が渡された場合の挙動を確認
- [ ] groupByPropertyGroupsメソッドで、同一グループに大量のオプションが存在する場合のパフォーマンスを確認
- [ ] PropertyGroupHydratorで不正なUUID形式がrow配列に含まれる場合の例外処理を確認
- [ ] fillOptionsメソッドの「バリデーションスキップ」が意図した動作か確認
- [ ] RestrictDeleteフラグが設定されているproductOptionsの削除時の挙動を確認
- [ ] CascadeDeleteフラグが設定されているproductPropertiesの連鎖削除の影響範囲を確認
