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

# 根拠レポート: Core-Framework-Script 単体テストケース一覧

## 本レポートについて

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

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

1. **根拠の有無確認**: 各テストケースに対して、ソースコードの根拠（Evidence）が存在するか
2. **根拠との整合性**: テストケースの内容がソースコードと矛盾していないか
3. **網羅性**: 参照すべきクラス・メソッドを適切にカバーしているか

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）: **1.00**
  - 根拠あり: 183 / 183、根拠なし: 0
- 優先レビュー（高）
  1. **ScriptExecutor**: 統合テストでカバーされているためunitテストは対象外（@codeCoverageIgnore）
  2. **ScriptLoader.load()**: DBアクセスを伴うためモック設計が必要
  3. **AppContextCreator.fetchPrivileges()**: DBアクセスを伴うためモック設計が必要

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `src/Core/Framework/Script/ScriptEntity.php`
- E-02: `src/Core/Framework/Script/ScriptDefinition.php`
- E-03: `src/Core/Framework/Script/ScriptCollection.php`
- E-04: `src/Core/Framework/Script/ScriptException.php`
- E-05: `src/Core/Framework/Script/ServiceStubs.php`
- E-06: `src/Core/Framework/Script/AppContextCreator.php`
- E-07: `src/Core/Framework/Script/Execution/Script.php`
- E-08: `src/Core/Framework/Script/Execution/ScriptAppInformation.php`
- E-09: `src/Core/Framework/Script/Execution/Hook.php`
- E-10: `src/Core/Framework/Script/Execution/FunctionHook.php`
- E-11: `src/Core/Framework/Script/Execution/InterfaceHook.php`
- E-12: `src/Core/Framework/Script/Execution/TraceHook.php`
- E-13: `src/Core/Framework/Script/Execution/OptionalFunctionHook.php`
- E-14: `src/Core/Framework/Script/Execution/DeprecatedHook.php`
- E-15: `src/Core/Framework/Script/Execution/ScriptLoader.php`
- E-16: `src/Core/Framework/Script/Execution/ScriptExecutor.php`
- E-17: `src/Core/Framework/Script/Execution/ScriptTwigLoader.php`
- E-18: `src/Core/Framework/Script/Execution/Awareness/StoppableHook.php`
- E-19: `src/Core/Framework/Script/Execution/Awareness/StoppableHookTrait.php`
- E-20: `src/Core/Framework/Script/Execution/Awareness/SalesChannelContextAware.php`
- E-21: `src/Core/Framework/Script/Execution/Awareness/SalesChannelContextAwareTrait.php`
- E-22: `src/Core/Framework/Script/Execution/Awareness/ScriptResponseAwareTrait.php`
- E-23: `src/Core/Framework/Script/Execution/Awareness/HookServiceFactory.php`
- E-24: `src/Core/Framework/Script/Execution/Awareness/AppSpecificHook.php`
- E-25: `src/Core/Framework/Script/Debugging/Debug.php`
- E-26: `src/Core/Framework/Script/Debugging/ScriptTraces.php`
- E-27: `src/Core/Framework/Script/Facade/ArrayFacade.php`
- E-28: `src/Core/Framework/Script/Api/ScriptResponse.php`
- E-29: `src/Core/Framework/Script/Api/ScriptResponseFactoryFacade.php`
- E-30: `src/Core/Framework/Script/Api/AclFacade.php`
- E-31: `src/Core/Framework/Script/Api/ResponseCacheConfiguration.php`
- E-32: `src/Core/Framework/Script/Api/ApiHook.php`
- E-33: `src/Core/Framework/Script/Api/StoreApiHook.php`
- E-34: `src/Core/Framework/Script/Api/StoreApiCacheKeyHook.php`
- E-35: `src/Core/Framework/Script/Api/StoreApiResponseHook.php`
- E-36: `src/Core/Framework/Script/Api/ResponseHook.php`
- E-37: `src/Core/Framework/Script/Api/ScriptResponseEncoder.php`
- E-38: `src/Core/Framework/Script/Api/ScriptApiRoute.php`
- E-39: `src/Core/Framework/Script/Api/ScriptStoreApiRoute.php`
- E-40: `src/Core/Framework/Script/Exception/ScriptExecutionFailedException.php`

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

### ScriptEntity (UT-SCR-001 - UT-SCR-009)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getScript()でscript文字列が返却される | E-01 L30-33 | ○ |
| C-02 | setScript()でscriptプロパティが更新される | E-01 L35-38 | ○ |
| C-03 | getHook()でhook文字列が返却される | E-01 L40-43 | ○ |
| C-04 | getName()でname文字列が返却される | E-01 L50-53 | ○ |
| C-05 | isActive()でアクティブ状態が返却される | E-01 L60-63 | ○ |
| C-06 | getApp()で関連AppEntityが返却される | E-01 L80-83 | ○ |
| C-07 | getAppId()でAppIdが返却される | E-01 L70-73 | ○ |

### ScriptDefinition (UT-SCR-010 - UT-SCR-013)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-08 | getEntityName()で'script'が返却される | E-02 L27-29 | ○ |
| C-09 | getEntityClass()でScriptEntity::classが返却される | E-02 L32-35 | ○ |
| C-10 | getCollectionClass()でScriptCollection::classが返却される | E-02 L37-40 | ○ |
| C-11 | since()で'6.4.7.0'が返却される | E-02 L42-45 | ○ |

### ScriptCollection (UT-SCR-014)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | getExpectedClass()でScriptEntity::classが返却される | E-03 L16-18 | ○ |

### ScriptException (UT-SCR-015 - UT-SCR-024)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-13 | scriptExecutionFailed()でScriptExecutionFailedExceptionが返却される | E-04 L24-28 | ○ |
| C-14 | hookMethodOutsideOfSalesChannelContext()で適切な例外が返却される | E-04 L30-38 | ○ |
| C-15 | storefrontBundleMissingForHookMethod()で適切な例外が返却される | E-04 L40-48 | ○ |
| C-16 | accessFromScriptExecutionContextNotAllowed()で適切な例外が返却される | E-04 L50-58 | ○ |
| C-17 | functionDoesNotExistInInterfaceHook()で適切な例外が返却される | E-04 L60-68 | ○ |
| C-18 | noHookServiceFactory()で適切な例外が返却される | E-04 L70-78 | ○ |
| C-19 | serviceNotAvailableInHook()で適切な例外が返却される | E-04 L80-88 | ○ |
| C-20 | serviceAlreadyExists()で適切な例外が返却される | E-04 L90-98 | ○ |
| C-21 | interfaceHookExecutionNotAllowed()で適切な例外が返却される | E-04 L100-108 | ○ |
| C-22 | requiredFunctionMissingInInterfaceHook()で適切な例外が返却される | E-04 L110-118 | ○ |

### Script (UT-SCR-025 - UT-SCR-037)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 | getName()でスクリプト名が返却される | E-07 L35-38 | ○ |
| C-24 | getScript()でスクリプト内容が返却される | E-07 L40-43 | ○ |
| C-25 | getTwigOptions()でTwigオプションが返却される | E-07 L47-51 | ○ |
| C-26 | setTwigOptions()でTwigオプションが設定される | E-07 L53-58 | ○ |
| C-27 | getLastModified()で最終更新日時が返却される | E-07 L60-63 | ○ |
| C-28 | getIncludes()でincludesが返却される | E-07 L65-72 | ○ |
| C-29 | isAppScript()でApp判定が行われる | E-07 L74-77 | ○ |
| C-30 | getScriptAppInformation()でScriptAppInformationが返却される | E-07 L79-82 | ○ |
| C-31 | isActive()でアクティブ状態が返却される | E-07 L84-87 | ○ |

### ScriptAppInformation (UT-SCR-038 - UT-SCR-041)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | getAppId()でAppIdが返却される | E-08 L21-24 | ○ |
| C-33 | getAppName()でAppNameが返却される | E-08 L26-29 | ○ |
| C-34 | getAppVersion()でAppVersionが返却される | E-08 L31-34 | ○ |
| C-35 | getIntegrationId()でIntegrationIdが返却される | E-08 L36-39 | ○ |

### Hook / FunctionHook / InterfaceHook (UT-SCR-042 - UT-SCR-049)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | Hook.getContext()でContextが返却される | E-09 L48-51 | ○ |
| C-37 | Hook.getDeprecatedServices()で空配列が返却される | E-09 L43-46 | ○ |
| C-38 | FunctionHook.getFunctionName()は抽象メソッド | E-10 L16 | ○ |
| C-39 | InterfaceHook.getFunction()でFunctionHookが取得できる | E-11 L16 | ○ |
| C-40 | InterfaceHook.getServiceIds()で空配列が返却される | E-11 L21-24 | ○ |
| C-41 | OptionalFunctionHook.willBeRequiredInVersion()でnullが返却される | E-13 L15-18 | ○ |

### ScriptTwigLoader (UT-SCR-050 - UT-SCR-060)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | getSourceContext()でSourceが返却される | E-17 L20-29 | ○ |
| C-43 | getSourceContext()で存在しないテンプレートはLoaderError | E-17 L24-26 | ○ |
| C-44 | getCacheKey()でキャッシュキーが生成される | E-17 L31-42 | ○ |
| C-45 | isFresh()でフレッシュネスが判定される | E-17 L44-53 | ○ |
| C-46 | exists()で存在確認が行われる | E-17 L57-61 | ○ |

### ServiceStubs (UT-SCR-061 - UT-SCR-069)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | add()でサービスが追加される | E-05 L63-74 | ○ |
| C-48 | add()で重複時は例外がスローされる | E-05 L65-66 | ○ |
| C-49 | __call()でサービスが取得される | E-05 L47-58 | ○ |
| C-50 | __call()で未登録時は例外がスローされる | E-05 L49-51 | ○ |
| C-51 | get()でサービスが取得される | E-05 L79-90 | ○ |

### ScriptLoader (UT-SCR-070 - UT-SCR-074)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-52 | get()でスクリプトリストが取得される | E-15 L47-80 | ○ |
| C-53 | invalidateCache()でキャッシュが削除される | E-15 L82-85 | ○ |
| C-54 | getSubscribedEvents()でイベント購読が返却される | E-15 L37-43 | ○ |

### Debug (UT-SCR-075 - UT-SCR-078)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | dump()で値が追加される | E-25 L15-22 | ○ |
| C-56 | all()で全値が取得される | E-25 L24-30 | ○ |

### ScriptTraces (UT-SCR-079 - UT-SCR-090)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-57 | addDeprecationNotice()で通知が追加される | E-26 L31-34 | ○ |
| C-58 | initHook()でトレースが初期化される | E-26 L41-51 | ○ |
| C-59 | trace()でスクリプト実行がトレースされる | E-26 L53-70 | ○ |
| C-60 | getHookCount()でHook数が取得される | E-26 L72-79 | ○ |
| C-61 | getHooks()でHook名リストが取得される | E-26 L81-91 | ○ |
| C-62 | getScripts()でスクリプト情報が取得される | E-26 L93-99 | ○ |
| C-63 | getTook()で合計時間が計算される | E-26 L101-111 | ○ |
| C-64 | getScriptCount()でスクリプト数が取得される | E-26 L113-121 | ○ |
| C-65 | getDeprecationCount()で通知数が取得される | E-26 L123-135 | ○ |
| C-66 | reset()でトレースがリセットされる | E-26 L168-172 | ○ |

### ArrayFacade (UT-SCR-091 - UT-SCR-110)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-67 | set()でキーと値が設定される | E-27 L48-52 | ○ |
| C-68 | push()で末尾に追加される | E-27 L54-63 | ○ |
| C-69 | removeBy()でインデックス削除される | E-27 L65-74 | ○ |
| C-70 | remove()で値が削除される | E-27 L76-88 | ○ |
| C-71 | reset()で配列がリセットされる | E-27 L90-97 | ○ |
| C-72 | merge()でマージされる | E-27 L99-113 | ○ |
| C-73 | replace()で置換される | E-27 L115-129 | ○ |
| C-74 | ArrayAccessインターフェースが実装されている | E-27 L138-182 | ○ |
| C-75 | IteratorAggregateインターフェースが実装されている | E-27 L187-190 | ○ |
| C-76 | count()で要素数が返却される | E-27 L192-200 | ○ |
| C-77 | all()で全要素が返却される | E-27 L202-210 | ○ |

### StoppableHookTrait (UT-SCR-111 - UT-SCR-113)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-78 | stopPropagation()で伝播が停止される | E-19 L15-18 | ○ |
| C-79 | isPropagationStopped()で状態が返却される | E-19 L20-23 | ○ |

### SalesChannelContextAwareTrait (UT-SCR-114)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | getSalesChannelContext()でコンテキストが返却される | E-21 L16-19 | ○ |

### ScriptResponseAwareTrait (UT-SCR-115 - UT-SCR-117)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-81 | getScriptResponse()でレスポンスが返却される | E-22 L23-30 | ○ |
| C-82 | setResponse()でレスポンスが設定される | E-22 L32-35 | ○ |

### ScriptResponse (UT-SCR-118 - UT-SCR-128)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 | getCode()でステータスコードが返却される | E-28 L54-57 | ○ |
| C-84 | setCode()でステータスコードが設定される | E-28 L59-62 | ○ |
| C-85 | getBody()でボディが返却される | E-28 L64-67 | ○ |
| C-86 | setBody()でボディが設定される | E-28 L69-79 | ○ |
| C-87 | getHeaders()でヘッダーが返却される | E-28 L36-40 | ○ |
| C-88 | setHeader()でヘッダーが設定される | E-28 L42-46 | ○ |
| C-89 | removeHeader()でヘッダーが削除される | E-28 L48-52 | ○ |
| C-90 | getCache()でキャッシュ設定が返却される | E-28 L81-84 | ○ |
| C-91 | getInner()で内部Responseが返却される（アクセス制限あり） | E-28 L86-96 | ○ |

### ResponseCacheConfiguration (UT-SCR-129 - UT-SCR-138)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-92 | disable()でキャッシュが無効化される | E-31 L35-41 | ○ |
| C-93 | clientMaxAge()で時間が設定される | E-31 L62-68 | ○ |
| C-94 | sharedMaxAge()で時間が設定される | E-31 L70-79 | ○ |
| C-95 | invalidationState()で状態が追加される | E-31 L81-91 | ○ |
| C-96 | tag()でタグが追加される | E-31 L93-103 | ○ |
| C-97 | getters で各値が取得される | E-31 L105-147 | ○ |

### AclFacade (UT-SCR-139 - UT-SCR-140)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-98 | can()で権限チェックが行われる | E-30 L29-32 | ○ |

### ScriptResponseFactoryFacade (UT-SCR-141 - UT-SCR-147)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-99 | json()でJSONレスポンスが生成される | E-29 L45-52 | ○ |
| C-100 | redirect()でリダイレクトレスポンスが生成される | E-29 L66-74 | ○ |
| C-101 | render()でテンプレートがレンダリングされる | E-29 L89-102 | ○ |
| C-102 | render()でStorefrontなしの場合は例外 | E-29 L91-93 | ○ |
| C-103 | render()でSalesChannelContextなしの場合は例外 | E-29 L95-97 | ○ |

### ApiHook (UT-SCR-148 - UT-SCR-151)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-104 | getName()でhook名が返却される | E-32 L56-63 | ○ |
| C-105 | getInternalName()で内部名が返却される | E-32 L43-46 | ○ |
| C-106 | getRequest()でリクエストが返却される | E-32 L48-54 | ○ |
| C-107 | getServiceIds()でサービスIDが返却される | E-32 L65-73 | ○ |

### StoreApiHook (UT-SCR-152 - UT-SCR-158)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-108 | getName()でhook名が返却される | E-33 L70-77 | ○ |
| C-109 | getRequest()でリクエストが返却される | E-33 L51-55 | ○ |
| C-110 | getQuery()でクエリが返却される | E-33 L57-63 | ○ |
| C-111 | getSalesChannelContext()でコンテキストが返却される | E-33 L65-68 | ○ |
| C-112 | getFunction()でFunctionHookが取得される | E-33 L79-88 | ○ |

### StoreApiCacheKeyHook (UT-SCR-159 - UT-SCR-162)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-113 | getCacheKey()でキャッシュキーが返却される | E-34 L67-70 | ○ |
| C-114 | setCacheKey()でキャッシュキーが設定される | E-34 L72-75 | ○ |
| C-115 | getFunctionName()で'cache_key'が返却される | E-34 L88-91 | ○ |
| C-116 | getServiceIds()で空配列が返却される | E-34 L82-86 | ○ |

### StoreApiResponseHook (UT-SCR-163 - UT-SCR-164)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-117 | getFunctionName()で'response'が返却される | E-35 L75-78 | ○ |
| C-118 | getServiceIds()でサービスIDが返却される | E-35 L80-90 | ○ |

### ResponseHook (UT-SCR-165 - UT-SCR-175)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-119 | getName()で'response'が返却される | E-36 L42-45 | ○ |
| C-120 | isInRouteScope()でスコープチェックが行われる | E-36 L47-50 | ○ |
| C-121 | getHeaders()でヘッダーが返却される | E-36 L52-58 | ○ |
| C-122 | getHeader()で単一ヘッダーが返却される | E-36 L60-63 | ○ |
| C-123 | setHeader()でヘッダーが設定される | E-36 L65-68 | ○ |
| C-124 | removeHeader()でヘッダーが削除される | E-36 L70-73 | ○ |
| C-125 | getCode()でステータスコードが返却される | E-36 L75-78 | ○ |
| C-126 | setCode()でステータスコードが設定される | E-36 L80-83 | ○ |
| C-127 | getServiceIds()で空配列が返却される | E-36 L36-40 | ○ |

### ScriptResponseEncoder (UT-SCR-176 - UT-SCR-177)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-128 | encodeToSymfonyResponse()で内部Responseが返却される | E-37 L22-27 | ○ |
| C-129 | encodeToSymfonyResponse()でJsonResponseが生成される | E-37 L29-31 | ○ |

### AppContextCreator (UT-SCR-178 - UT-SCR-180)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-130 | getAppContext()で元のContextが返却される | E-06 L29-34 | ○ |
| C-131 | getAppContext()でApp用Contextが生成される | E-06 L36-47 | ○ |
| C-132 | キャッシュ動作が正しく機能する | E-06 L49-60 | ○ |

### ScriptExecutionFailedException (UT-SCR-181 - UT-SCR-183)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-133 | コンストラクタで正しいエラーメッセージが生成される | E-40 L16-45 | ○ |
| C-134 | HttpExceptionInterfaceからステータスコードが継承される | E-40 L24-27 | ○ |
| C-135 | ShopwareHttpExceptionからエラーコードが継承される | E-40 L29-31 | ○ |

## 4) 不足情報（Unknown / Missing）
- **なし**: すべてのテストケースがソースコードに基づいて作成されました

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: すべてのテストケースがソースコードの実装に対応
- **注意点**:
  - ScriptExecutorは`@codeCoverageIgnore`アノテーションがあり、統合テストでカバーされている
  - ScriptLoader.load()およびAppContextCreator.fetchPrivileges()はDBアクセスを伴うため、モックが必要
  - ScriptStoreApiRouteはキャッシュ処理を含むため、キャッシュアダプタのモックが必要

## 6) レビュアーチェックリスト（最小）
- [ ] ScriptEntity: getter/setterが正しくテストされているか
- [ ] ScriptException: 各例外ファクトリメソッドが正しいエラーコードを返すか
- [ ] ServiceStubs: 重複チェックと例外スローが正しく動作するか
- [ ] ScriptTwigLoader: 存在しないテンプレートで正しい例外がスローされるか
- [ ] ArrayFacade: ArrayAccess/IteratorAggregate/Countableが正しく実装されているか
- [ ] ScriptResponse.getInner(): スクリプト実行コンテキスト内でのアクセス制限が機能するか
- [ ] StoreApiHook.getFunction(): 存在しない関数名で正しい例外がスローされるか
- [ ] ScriptResponseFactoryFacade.render(): StorefrontとSalesChannelContext不在時の例外処理が正しいか
