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

# 根拠レポート：Broadcasting 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：215 / 215、根拠なし：0
- 優先レビュー（高）
  1. **UT-BRD-022〜024**：queue()メソッドのShouldBroadcastNow/ShouldBeUnique/ShouldRescue分岐処理の複雑さ
  2. **UT-BRD-121〜123**：verifyUserCanAccessChannel()の認可判定ロジック
  3. **UT-BRD-160〜163**：PusherBroadcaster.broadcast()のエラーハンドリング

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

- E-01: `src/Illuminate/Broadcasting/Channel.php`
- E-02: `src/Illuminate/Broadcasting/PrivateChannel.php`
- E-03: `src/Illuminate/Broadcasting/PresenceChannel.php`
- E-04: `src/Illuminate/Broadcasting/EncryptedPrivateChannel.php`
- E-05: `src/Illuminate/Broadcasting/BroadcastManager.php`
- E-06: `src/Illuminate/Broadcasting/BroadcastEvent.php`
- E-07: `src/Illuminate/Broadcasting/PendingBroadcast.php`
- E-08: `src/Illuminate/Broadcasting/AnonymousEvent.php`
- E-09: `src/Illuminate/Broadcasting/InteractsWithSockets.php`
- E-10: `src/Illuminate/Broadcasting/InteractsWithBroadcasting.php`
- E-11: `src/Illuminate/Broadcasting/UniqueBroadcastEvent.php`
- E-12: `src/Illuminate/Broadcasting/FakePendingBroadcast.php`
- E-13: `src/Illuminate/Broadcasting/BroadcastController.php`
- E-14: `src/Illuminate/Broadcasting/BroadcastServiceProvider.php`
- E-15: `src/Illuminate/Broadcasting/BroadcastException.php`
- E-16: `src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php`
- E-17: `src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php`
- E-18: `src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php`
- E-19: `src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php`
- E-20: `src/Illuminate/Broadcasting/Broadcasters/LogBroadcaster.php`
- E-21: `src/Illuminate/Broadcasting/Broadcasters/NullBroadcaster.php`
- E-22: `src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php`

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

### Channel系クラス（UT-BRD-001〜007）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Channel.__construct()は文字列またはHasBroadcastChannelオブジェクトからnameを設定する | E-01 L22-25 | ○ |
| C-02 | Channel.__toString()はnameプロパティを返却する | E-01 L32-35 | ○ |
| C-03 | PrivateChannel.__construct()は'private-'プレフィックスを付与する | E-02 L14-18 | ○ |
| C-04 | PresenceChannel.__construct()は'presence-'プレフィックスを付与する | E-03 L13-14 | ○ |
| C-05 | EncryptedPrivateChannel.__construct()は'private-encrypted-'プレフィックスを付与する | E-04 L13-14 | ○ |

### BroadcastManager（UT-BRD-008〜051）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-06 | BroadcastManager.__construct()はappプロパティを設定する | E-05 L58-61 | ○ |
| C-07 | routes()はCachesRoutesでキャッシュされていない場合にルートを登録する | E-05 L69-83 | ○ |
| C-08 | userRoutes()はユーザー認証ルートを登録する | E-05 L91-105 | ○ |
| C-09 | socket()はX-Socket-IDヘッダーを返却する | E-05 L126-135 | ○ |
| C-10 | on()はAnonymousEventを返却する | E-05 L140-143 | ○ |
| C-11 | private()はPrivateChannelを使用したAnonymousEventを返却する | E-05 L148-151 | ○ |
| C-12 | presence()はPresenceChannelを使用したAnonymousEventを返却する | E-05 L156-159 | ○ |
| C-13 | event()はPendingBroadcastを返却する | E-05 L167-170 | ○ |
| C-14 | queue()はShouldBroadcastNowの場合dispatchNow()を呼ぶ | E-05 L178-190 | ○ |
| C-15 | queue()はShouldBeUniqueの場合UniqueBroadcastEventを使用する | E-05 L201-207 | ○ |
| C-16 | driver()は指定した名前でブロードキャスターを取得する | E-05 L250-255 | ○ |
| C-17 | resolve()は存在しない接続でInvalidArgumentExceptionをスローする | E-05 L280-282 | ○ |
| C-18 | resolve()は未サポートドライバーでInvalidArgumentExceptionをスローする | E-05 L290-291 | ○ |
| C-19 | createPusherDriver()はPusherBroadcasterを返却する | E-05 L329-331 | ○ |
| C-20 | createAblyDriver()はAblyBroadcasterを返却する | E-05 L374-377 | ○ |
| C-21 | createRedisDriver()はRedisBroadcasterを返却する | E-05 L396-402 | ○ |
| C-22 | createLogDriver()はLogBroadcasterを返却する | E-05 L410-414 | ○ |
| C-23 | createNullDriver()はNullBroadcasterを返却する | E-05 L423-426 | ○ |
| C-24 | extend()はカスタムドライバークリエイターを登録する | E-05 L484-489 | ○ |
| C-25 | purge()は指定したドライバーをキャッシュから削除する | E-05 L470-475 | ○ |
| C-26 | forgetDrivers()はすべてのドライバーキャッシュをクリアする | E-05 L534-539 | ○ |

### BroadcastEvent（UT-BRD-052〜068）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | BroadcastEvent.__construct()はイベントのプロパティをコピーする | E-06 L65-73 | ○ |
| C-28 | handle()はbroadcastAs()があればその名前を使用する | E-06 L83-86 | ○ |
| C-29 | handle()はチャンネルが空の場合早期リターンする | E-06 L89-91 | ○ |
| C-30 | getPayloadFromEvent()はbroadcastWith()の結果を使用する | E-06 L116-119 | ○ |
| C-31 | formatProperty()はArrayableをtoArray()で変換する | E-06 L140-145 | ○ |
| C-32 | middleware()はイベントのmiddleware()を呼び出す | E-06 L186-193 | ○ |
| C-33 | failed()はイベントのfailed()を呼び出す | E-06 L201-208 | ○ |
| C-34 | displayName()はイベントのクラス名を返却する | E-06 L215-218 | ○ |
| C-35 | __clone()はイベントもクローンする | E-06 L225-228 | ○ |

### PendingBroadcast（UT-BRD-069〜073）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | PendingBroadcast.__construct()はeventsとeventを設定する | E-07 L31-35 | ○ |
| C-37 | via()はイベントのbroadcastVia()を呼び出す | E-07 L43-50 | ○ |
| C-38 | toOthers()はイベントのdontBroadcastToCurrentUser()を呼び出す | E-07 L57-64 | ○ |
| C-39 | __destruct()はイベントをディスパッチする | E-07 L71-74 | ○ |

### AnonymousEvent（UT-BRD-074〜087）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | AnonymousEvent.__construct()はチャンネルを配列でラップして設定する | E-08 L43-46 | ○ |
| C-41 | via()は接続を設定する | E-08 L51-56 | ○ |
| C-42 | as()はイベント名を設定する | E-08 L61-66 | ○ |
| C-43 | with()はペイロードを設定する | E-08 L71-80 | ○ |
| C-44 | toOthers()はincludeCurrentUserをfalseに設定する | E-08 L85-90 | ○ |
| C-45 | sendNow()はshouldBroadcastNowをtrueに設定してsend()を呼ぶ | E-08 L95-100 | ○ |
| C-46 | send()はbroadcast()でイベントを送信する | E-08 L105-112 | ○ |
| C-47 | broadcastAs()は設定された名前またはクラス名を返却する | E-08 L117-120 | ○ |
| C-48 | broadcastWith()はペイロードを返却する | E-08 L127-130 | ○ |
| C-49 | broadcastOn()はチャンネルを返却する | E-08 L137-140 | ○ |
| C-50 | shouldBroadcastNow()はフラグを返却する | E-08 L145-148 | ○ |

### InteractsWithSockets（UT-BRD-088〜090）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | dontBroadcastToCurrentUser()はBroadcast::socket()をsocketに設定する | E-09 L21-26 | ○ |
| C-52 | broadcastToEveryone()はsocketをnullに設定する | E-09 L33-38 | ○ |

### InteractsWithBroadcasting（UT-BRD-091〜094）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | broadcastVia()は接続を配列でラップして設定する | E-10 L24-33 | ○ |
| C-54 | broadcastConnections()はbroadcastConnectionを返却する | E-10 L40-43 | ○ |

### UniqueBroadcastEvent（UT-BRD-095〜100）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | UniqueBroadcastEvent.__construct()はuniqueIdを設定する | E-11 L32-36 | ○ |
| C-56 | UniqueBroadcastEvent.__construct()はuniqueForを設定する | E-11 L38-42 | ○ |
| C-57 | uniqueVia()はイベントのuniqueVia()またはデフォルトキャッシュを返却する | E-11 L52-57 | ○ |

### FakePendingBroadcast（UT-BRD-101〜104）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | FakePendingBroadcast.__construct()は引数なしで初期化される | E-12 L10-13 | ○ |
| C-59 | via()は$thisを返却するのみ | E-12 L21-24 | ○ |
| C-60 | toOthers()は$thisを返却するのみ | E-12 L31-34 | ○ |
| C-61 | __destruct()は何もしない | E-12 L41-44 | ○ |

### BroadcastController（UT-BRD-105〜109）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-62 | authenticate()はセッションがあればreflash()を呼ぶ | E-13 L20-21 | ○ |
| C-63 | authenticate()はBroadcast::auth()の結果を返却する | E-13 L24 | ○ |
| C-64 | authenticateUser()は認証されていない場合AccessDeniedHttpExceptionをスローする | E-13 L43-44 | ○ |

### BroadcastServiceProvider（UT-BRD-110〜113）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-65 | register()はBroadcastManagerをシングルトン登録する | E-14 L19 | ○ |
| C-66 | register()はBroadcasterContractをシングルトン登録する | E-14 L21-23 | ○ |
| C-67 | register()はBroadcastingFactoryのエイリアスを登録する | E-14 L25-27 | ○ |
| C-68 | provides()は提供するサービス一覧を返却する | E-14 L35-42 | ○ |

### Broadcaster（UT-BRD-114〜146）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | resolveAuthenticatedUser()はコールバックの結果またはnullを返却する | E-16 L57-62 | ○ |
| C-70 | resolveAuthenticatedUserUsing()はコールバックを設定する | E-16 L72-75 | ○ |
| C-71 | channel()はチャンネル認証関数を登録する | E-16 L85-98 | ○ |
| C-72 | verifyUserCanAccessChannel()はアクセス権を検証する | E-16 L109-130 | ○ |
| C-73 | extractAuthParameters()はパターンからパラメータを抽出する | E-16 L140-149 | ○ |
| C-74 | extractParameters()はcallableからパラメータを抽出する | E-16 L159-168 | ○ |
| C-75 | extractParametersFromClass()はjoinメソッドのパラメータを抽出する | E-16 L178-187 | ○ |
| C-76 | extractChannelKeys()はチャンネル名からキーを抽出する | E-16 L196-201 | ○ |
| C-77 | resolveBinding()は明示的/暗黙的バインディングを解決する | E-16 L211-218 | ○ |
| C-78 | resolveImplicitBindingIfPossible()はモデル未発見時に例外をスローする | E-16 L248-265 | ○ |
| C-79 | isImplicitlyBindable()は暗黙的バインドの可否を判定する | E-16 L274-278 | ○ |
| C-80 | formatChannels()はチャンネルを文字列配列に変換する | E-16 L286-291 | ○ |
| C-81 | normalizeChannelHandlerToCallable()はハンドラをcallableに変換する | E-16 L315-322 | ○ |
| C-82 | retrieveUser()はリクエストからユーザーを取得する | E-16 L331-346 | ○ |
| C-83 | retrieveChannelOptions()はチャンネルのオプションを取得する | E-16 L354-365 | ○ |
| C-84 | channelNameMatchesPattern()はパターンマッチを判定する | E-16 L374-379 | ○ |
| C-85 | getChannels()は登録されたチャンネルのCollectionを返却する | E-16 L386-389 | ○ |

### PusherBroadcaster（UT-BRD-147〜165）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-86 | PusherBroadcaster.__construct()はPusherとallowJsonpを設定する | E-17 L35-39 | ○ |
| C-87 | resolveAuthenticatedUser()はPusherのauthenticateUserを使用する | E-17 L50-72 | ○ |
| C-88 | auth()は空チャンネル名/未認証で例外をスローする | E-17 L82-95 | ○ |
| C-89 | validAuthenticationResponse()はprivate/presenceで異なる処理を行う | E-17 L104-129 | ○ |
| C-90 | decodePusherResponse()はJSONP対応のレスポンスを返却する | E-17 L138-146 | ○ |
| C-91 | broadcast()はチャンネルにイベントをブロードキャストする | E-17 L158-175 | ○ |
| C-92 | broadcast()は100件を超えるチャンネルをchunkする | E-17 L167-169 | ○ |
| C-93 | broadcast()はApiErrorExceptionでBroadcastExceptionをスローする | E-17 L170-174 | ○ |

### AblyBroadcaster（UT-BRD-166〜188）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-94 | AblyBroadcaster.__construct()はAblyRestを設定する | E-18 L30-33 | ○ |
| C-95 | auth()は空チャンネル名/未認証で例外をスローする | E-18 L43-56 | ○ |
| C-96 | validAuthenticationResponse()はprivate/presenceで異なる処理を行う | E-18 L65-96 | ○ |
| C-97 | generateAblySignature()はHMAC-SHA256署名を生成する | E-18 L106-113 | ○ |
| C-98 | broadcast()は各チャンネルにメッセージをパブリッシュする | E-18 L125-138 | ○ |
| C-99 | buildAblyMessage()はAblyMessageオブジェクトを構築する | E-18 L147-154 | ○ |
| C-100 | isGuardedChannel()はprivate-/presence-で始まるチャンネルを判定する | E-18 L162-165 | ○ |
| C-101 | normalizeChannelName()はプレフィックスを削除する | E-18 L173-182 | ○ |
| C-102 | formatChannels()はAbly形式のプレフィックスに変換する | E-18 L190-203 | ○ |

### RedisBroadcaster（UT-BRD-189〜201）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-103 | RedisBroadcaster.__construct()はRedis, connection, prefixを設定する | E-19 L48-53 | ○ |
| C-104 | auth()はプレフィックスを除去して認証する | E-19 L63-78 | ○ |
| C-105 | validAuthenticationResponse()はbooleanまたはchannel_dataを返却する | E-19 L87-105 | ○ |
| C-106 | broadcast()は空チャンネルで早期リターンする | E-19 L119-121 | ○ |
| C-107 | broadcast()は接続タイプに応じた方法でpublishする | E-19 L131-155 | ○ |
| C-108 | broadcast()はRedisエラーでBroadcastExceptionをスローする | E-19 L156-160 | ○ |
| C-109 | broadcastMultipleChannelsScript()はLuaスクリプトを返却する | E-19 L171-178 | ○ |
| C-110 | formatChannels()はプレフィックスを付与する | E-19 L186-191 | ○ |

### LogBroadcaster（UT-BRD-202〜205）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-111 | LogBroadcaster.__construct()はLoggerを設定する | E-20 L21-24 | ○ |
| C-112 | broadcast()はイベント情報をログに記録する | E-20 L45-52 | ○ |

### NullBroadcaster（UT-BRD-206〜208）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-113 | NullBroadcasterのすべてのメソッドは何もしない | E-21 L10-29 | ○ |

### UsePusherChannelConventions（UT-BRD-209〜215）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-114 | isGuardedChannel()はprivate-/presence-で始まるチャンネルを判定する | E-22 L15-18 | ○ |
| C-115 | normalizeChannelName()は各種プレフィックスを削除する | E-22 L26-35 | ○ |

## 4) 不足情報（Unknown / Missing）
- 根拠なしの項目は存在しない
- すべてのテストケースはソースコードから直接導出されている

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク**: Channel系クラス（単純なコンストラクタとgetter）
- **1: 中リスク**: BroadcastManager（ドライバー管理、設定処理）
- **2: 高リスク**:
  - Broadcaster.verifyUserCanAccessChannel()：認可判定ロジックの複雑さ
  - PusherBroadcaster/AblyBroadcaster/RedisBroadcaster.broadcast()：外部サービス連携とエラーハンドリング
  - BroadcastManager.queue()：複数のインターフェース（ShouldBroadcastNow、ShouldBeUnique、ShouldRescue）の分岐処理

## 6) レビュアーチェックリスト（最小）
- [ ] 認証・認可関連のテストケース（UT-BRD-105〜109, 114〜123, 152〜154）が適切な異常系を網羅しているか確認
- [ ] 外部サービス連携（Pusher, Ably, Redis）のエラーハンドリングテストケースが十分か確認
- [ ] 境界値テスト（空配列、null値）が適切に定義されているか確認
- [ ] ShouldBeUnique/ShouldBroadcastNow/ShouldRescueの各分岐パターンがカバーされているか確認
- [ ] チャンネル名のプレフィックス処理（private-, presence-, private-encrypted-）が正しく検証されているか確認
