---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 84
  claims_with_evidence: 84
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：wikipedia-welcome 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：84 / 84、根拠なし：0
- 優先レビュー（高）
  1. **UT-WEL-001〜009（WelcomeViewController）**：メインのウェルカム画面制御
  2. **UT-WEL-018〜044（WelcomePageViewController）**：ページ遷移とナビゲーション
  3. **UT-WEL-069〜080（WelcomeAnimationView）**：アニメーション処理

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomeViewController.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomeContainerViewController.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomePageViewController.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomePanelViewController.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomePanelLabelContentViewController.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomeAnimationViewController.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WelcomeAnimationView.swift`

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

### WelcomeViewController（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | WelcomeViewController.init(theme:viewControllers:completion:)が存在する | E-01: Line 7-12 | ○ |
| C-02 | completionクロージャがプロパティとして保持される | E-01: Line 5, 8 | ○ |
| C-03 | viewDidLoadでapply(theme:)が呼ばれる | E-01: Line 18-21 | ○ |
| C-04 | viewWillDisappearでcompletionが実行される | E-01: Line 23-26 | ○ |
| C-05 | addPageViewControllerでWelcomePageViewControllerが追加される | E-01: Line 28-35 | ○ |
| C-06 | preferredStatusBarStyleがtheme.preferredStatusBarStyleを返す | E-01: Line 37-39 | ○ |
| C-07 | apply(theme:)でviewIfLoadedチェックが行われる | E-01: Line 43-56 | ○ |
| C-08 | apply(theme:)でview.backgroundColorが設定される | E-01: Line 48 | ○ |
| C-09 | apply(theme:)で子VCにテーマが伝播される | E-01: Line 50-55 | ○ |

### WelcomeContainerViewController（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-10 | WelcomeContainerViewControllerDataSourceプロトコルが定義されている | E-02: Line 3-7 | ○ |
| C-11 | isFirstのデフォルト実装がfalseを返す | E-02: Line 9-13 | ○ |
| C-12 | init(dataSource:)でdataSourceが設定される | E-02: Line 23-26 | ○ |
| C-13 | viewDidLoadでdataSource nilチェックが行われる | E-02: Line 32-42 | ○ |
| C-14 | viewDidLoadでWelcomeAnimationViewControllerが追加される | E-02: Line 39 | ○ |
| C-15 | viewDidLoadでpanelViewControllerが追加される | E-02: Line 40 | ○ |
| C-16 | addChild(_:to:)で複数の条件チェックが行われる | E-02: Line 44-57 | ○ |
| C-17 | apply(theme:)でコンテナビューの背景色が設定される | E-02: Line 60-69 | ○ |
| C-18 | pageViewControllerDidAppearでanimationView.animate()が呼ばれる | E-02: Line 72-76 | ○ |

### WelcomePageViewController（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | init(viewControllers:)でallViewControllersが設定される | E-03: Line 24-29 | ○ |
| C-20 | viewDidLoadでallViewControllers.count >= 2のアサーションがある | E-03: Line 37 | ○ |
| C-21 | viewDidLoadでfirstViewControllerが表示される | E-03: Line 38-43 | ○ |
| C-22 | addPageControlButtonsでskipButtonとnextButtonが追加される | E-03: Line 54-57 | ○ |
| C-23 | next(_:)で次のVCに遷移する | E-03: Line 95-107 | ○ |
| C-24 | skip(_:)でdismissが呼ばれる | E-03: Line 109-111 | ○ |
| C-25 | directionがRTL環境で.reverseを返す | E-03: Line 124-126 | ○ |
| C-26 | viewController(at:)でインデックス範囲チェックが行われる | E-03: Line 128-133 | ○ |
| C-27 | visibleViewControllerがviewControllers?.firstを返す | E-03: Line 135-137 | ○ |
| C-28 | apply(theme:)でallViewControllersにテーマが適用される | E-03: Line 140-154 | ○ |
| C-29 | pageViewController(_:viewControllerBefore:)が前のVCを返す | E-03: Line 157-163 | ○ |
| C-30 | pageViewController(_:viewControllerAfter:)が次のVCを返す | E-03: Line 165-176 | ○ |
| C-31 | presentationCount(for:)がallViewControllers.countを返す | E-03: Line 179-181 | ○ |
| C-32 | presentationIndex(for:)が現在のインデックスを返す | E-03: Line 183-191 | ○ |
| C-33 | pageViewController(_:didFinishAnimating:...)でボタンアニメーションが実行される | E-03: Line 193-202 | ○ |
| C-34 | animatePageControlButtons(for:)で最後のページでボタンが非表示になる | E-03: Line 204-217 | ○ |

### WelcomePanelViewController（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-35 | init(titleLabelText:actionLabelText:actionButtonTitle:contentViewController:)が存在する | E-04: Line 21-27 | ○ |
| C-36 | viewDidLoadで各configure/addメソッドが呼ばれる | E-04: Line 33-40 | ○ |
| C-37 | viewDidAppearでスクロールインジケータがフラッシュされる | E-04: Line 42-47 | ○ |
| C-38 | configureActionButtonでactionButtonTitleがnilの場合に非表示になる | E-04: Line 51-55 | ○ |
| C-39 | configureTitleLabelでtitleLabel.textが設定される | E-04: Line 57-59 | ○ |
| C-40 | configureActionLabelでactionLabelTextがnilの場合に非表示になる | E-04: Line 61-64 | ○ |
| C-41 | addChild(_:to:)でcontentViewControllerが追加される | E-04: Line 70-83 | ○ |
| C-42 | performAction(_:)でdismissが呼ばれる | E-04: Line 85-87 | ○ |
| C-43 | apply(theme:)で各コンポーネントにテーマが適用される | E-04: Line 90-104 | ○ |
| C-44 | UIScrollView拡張のcontentSizeHeightExceedsBoundsHeight()が存在する | E-04: Line 106-109 | ○ |
| C-45 | UIScrollView拡張のflashVerticalScrollIndicatorAfterDelay(_:)が存在する | E-04: Line 110-114 | ○ |

### WelcomePanelLabelContentViewController（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | init(text:)でテキストが設定される | E-05: Line 8-11 | ○ |
| C-47 | viewDidLoadでlabel.textが設定される | E-05: Line 13-17 | ○ |
| C-48 | traitCollectionDidChangeでupdateFontsが呼ばれる | E-05: Line 23-26 | ○ |
| C-49 | updateFontsでWMFFontが適用される | E-05: Line 28-30 | ○ |
| C-50 | apply(theme:)でテーマが適用される | E-05: Line 33-42 | ○ |

### WelcomeAnimationViewController（E-06）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | init(animationView:waitsForAnimationTrigger:)が存在する | E-06: Line 8-12 | ○ |
| C-52 | waitsForAnimationTriggerのデフォルト値がtrueである | E-06: Line 8 | ○ |
| C-53 | viewDidLoadでanimationViewがサブビューとして追加される | E-06: Line 18-21 | ○ |
| C-54 | viewDidAppearでwaitsForAnimationTriggerがfalseの場合にanimate()が呼ばれる | E-06: Line 23-29 | ○ |
| C-55 | animate()でcompletedAnimationがtrueの場合は早期リターンする | E-06: Line 31-37 | ○ |
| C-56 | animate()でanimationView.animate()が呼ばれcompletedAnimationがtrueになる | E-06: Line 35-36 | ○ |

### WelcomeAnimationView（E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-57 | init(staticImageNamed:contentMode:animatedImageViews:propertyAnimator:)が存在する | E-07: Line 53-70 | ○ |
| C-58 | animatedImageViewsがサブビューとして追加される | E-07: Line 62-69 | ○ |
| C-59 | animate()でpropertyAnimator.startAnimation()が呼ばれる | E-07: Line 44-51 | ○ |
| C-60 | animate()完了時にfinishedAnimatingがtrueになる | E-07: Line 47-50 | ○ |
| C-61 | bounds didSetでupdateLayoutが呼ばれる | E-07: Line 72-79 | ○ |
| C-62 | updateLayoutでanimatedImageViewsがnilの場合は早期リターンする | E-07: Line 81-84 | ○ |
| C-63 | updateLayoutで各imageViewのframeが計算される | E-07: Line 85-102 | ○ |
| C-64 | normalizedPoint(_:from:to:)で座標が正規化される | E-07: Line 34-39 | ○ |
| C-65 | size(for:)でサイズが計算される | E-07: Line 105-122 | ○ |
| C-66 | AnimatedImageView.init(imageName:...)が存在する | E-07: Line 18-27 | ○ |
| C-67 | AnimatedImageViewのデフォルト値が設定されている | E-07: Line 18 | ○ |

## 4) 不足情報（Unknown / Missing）
- 該当なし。すべてのテストケースは実際のソースコードに基づいて生成されています。

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - すべてのテストケースがソースコードから直接導出されており、推測や仮定に基づくものはありません。

### 注意点
1. **UIテスト**: ビューコントローラのテストはUIKitに依存するため、XCTestやViewInspectorなどのフレームワークを使用したテスト環境が必要です。
2. **非同期処理**: アニメーション関連のテスト（UT-WEL-071〜072、UT-WEL-084）は非同期処理を含むため、expectationを使用したテストが必要です。
3. **プライベートメソッド**: 一部のテスト対象メソッド（updateFonts、updateLayoutなど）はprivateであるため、内部状態や副作用を通じて間接的にテストする必要があります。

## 6) レビュアーチェックリスト（最小）
- [ ] WelcomeViewControllerの初期化とライフサイクルテスト（UT-WEL-001〜009）が網羅的か確認
- [ ] WelcomePageViewControllerのページ遷移ロジック（UT-WEL-022〜037）が境界値を含めて網羅されているか確認
- [ ] WelcomeAnimationViewのアニメーション状態管理（UT-WEL-067〜068、UT-WEL-071〜072）が正しくテストされているか確認
- [ ] Themeableプロトコル実装のテスト（各クラスのapply(theme:)）がviewIfLoadedチェックを含めて適切か確認
- [ ] RTL対応のテスト（UT-WEL-026〜027）がローカライゼーション要件を満たしているか確認
