---
generated_at: 2026-01-28 16:10:00
metrics:
  claims_total: 100
  claims_with_evidence: 98
  claims_without_evidence: 2
confidence_derived: 0.98
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：98 / 100、根拠なし：2
- 優先レビュー（高）
  1. **UT-PLC-080**: handlePanGesture の入力値詳細が推測ベース
  2. **UT-PLC-094**: merge メソッドの戻り値型の詳細確認が必要

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

- E-01: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/PlaceSearch.swift`
- E-02: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/PlaceSearchService.swift`
- E-03: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/PlaceSearchSuggestionController.swift`
- E-04: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/PlacesSearchSuggestionTableViewCell.swift`
- E-05: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/PlacesViewController.swift`
- E-06: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/ArticlePlace.swift`
- E-07: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/ArticlePlaceView.swift`
- E-08: `/Users/tomoka.baba/Work/wikipedia-ios-main/Wikipedia/Code/WikidataFetcher+Places.swift`

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | PlaceSearchType enum の rawValue が 0,1,2 である | E-01 (L3-7) | ○ |
| C-02 | PlaceFilterType.stringValue が "top" を返す | E-01 (L14-15) | ○ |
| C-03 | PlaceFilterType.stringValue が "saved" を返す | E-01 (L16) | ○ |
| C-04 | MKCoordinateRegion.stringValue のフォーマット | E-01 (L31-33) | ○ |
| C-05 | PlaceSearch の初期化パラメータ | E-01 (L48-59) | ○ |
| C-06 | needsWikidataQuery の条件判定 | E-01 (L57) | ○ |
| C-07 | PlaceSearch.key の生成ロジック | E-01 (L62-76) | ○ |
| C-08 | PlaceSearch.dictionaryValue のシリアライズ | E-01 (L78-103) | ○ |
| C-09 | PlaceSearch.init(dictionary:) のデシリアライズ | E-01 (L105-139) | ○ |
| C-10 | PlaceSearch.init(object:) の NSCoding 対応 | E-01 (L141-176) | ○ |
| C-11 | PlaceSearchResult の初期化 | E-02 (L6-22) | ○ |
| C-12 | PlaceSearchService の dataStore 依存注入 | E-02 (L29-32) | ○ |
| C-13 | fetchRequestForSavedArticlesWithLocation の predicate | E-02 (L34-38) | ○ |
| C-14 | fetchRequestForSavedArticles の predicate | E-02 (L40-44) | ○ |
| C-15 | performSearch の saved フィルタ処理 | E-02 (L80-85) | ○ |
| C-16 | performSearch の top フィルタ処理 | E-02 (L87-108) | ○ |
| C-17 | fetchSavedArticles の検索文字列フィルタ | E-02 (L117-124) | ○ |
| C-18 | fetchSavedArticles の 99 件制限 | E-02 (L128) | ○ |
| C-19 | PlaceSearchSuggestionController の numberOfSections | E-03 (L53-55) | ○ |
| C-20 | PlaceSearchSuggestionController の numberOfRowsInSection | E-03 (L61-70) | ○ |
| C-21 | shouldUseFirstSuggestionAsDefault の判定ロジック | E-03 (L57-59) | ○ |
| C-22 | searchForIndexPath の変換ロジック | E-03 (L72-83) | ○ |
| C-23 | cellForRowAt のセル生成 | E-03 (L85-104) | ○ |
| C-24 | didSelectRowAt のデリゲート呼び出し | E-03 (L106-110) | ○ |
| C-25 | canEditRowAt の recentSection 判定 | E-03 (L145-152) | ○ |
| C-26 | viewForHeaderInSection のヘッダー生成 | E-03 (L112-135) | ○ |
| C-27 | clearButtonPressed のデリゲート呼び出し | E-03 (L167-169) | ○ |
| C-28 | PlaceSearchSuggestionController の apply(theme:) | E-03 (L12-17) | ○ |
| C-29 | PlacesSearchSuggestionTableViewCell の awakeFromNib | E-04 (L9-13) | ○ |
| C-30 | PlacesSearchSuggestionTableViewCell の apply(theme:) | E-04 (L17-23) | ○ |
| C-31 | ArticlePlace の初期化 | E-06 (L21-28) | ○ |
| C-32 | ArticlePlace.identifierForArticles のハッシュ計算 | E-06 (L30-39) | ○ |
| C-33 | ArticlePlaceView の setup | E-07 (L60-188) | ○ |
| C-34 | set(alwaysShowImage:animated:) の表示切替 | E-07 (L190-273) | ○ |
| C-35 | loadImage の画像読み込み | E-07 (L315-340) | ○ |
| C-36 | update(withArticlePlace:) のグループ表示 | E-07 (L342-364) | ○ |
| C-37 | updateDotAndImageHiddenState の表示状態 | E-07 (L366-379) | ○ |
| C-38 | setSelected の選択状態処理 | E-07 (L407-500) | ○ |
| C-39 | prepareForReuse のリセット処理 | E-07 (L390-405) | ○ |
| C-40 | zPosition の設定 | E-07 (L289-296) | ○ |
| C-41 | WikidataFetcher+Places の wikidataBoundingRegion | E-08 (L24-65) | ○ |
| C-42 | wikidataBoundingRegion の title nil チェック | E-08 (L7-11) | ○ |
| C-43 | wikidataBoundingRegion の座標数チェック | E-08 (L58-61) | ○ |
| C-44 | PlacesViewController の currentSearchFilter didSet | E-05 (L1213-1228) | ○ |
| C-45 | isDefaultSearch の判定条件 | E-05 (L593-595) | ○ |
| C-46 | isDistanceSignificant の距離計算 | E-05 (L618-645) | ○ |
| C-47 | region(thatFits:) の領域計算 | E-05 (L548-558) | ○ |
| C-48 | searchHistoryGroup のグループ名生成 | E-05 (L1266-1273) | ○ |
| C-49 | saveToHistory の履歴保存 | E-05 (L1275-1296) | ○ |
| C-50 | clearSearchHistory の履歴削除 | E-05 (L1298-1312) | ○ |
| C-51 | viewMode の traitBasedViewMode 更新 | E-05 (L1190-1206) | ○ |
| C-52 | overlayState の高さ設定 | E-05 (L1007-1035) | ○ |
| C-53 | handlePanGesture のジェスチャ処理 | E-05 (L1040-1091) | △ |
| C-54 | selectVisibleArticle の記事選択 | E-05 (L315-328) | ○ |
| C-55 | handleCompletion の検索結果処理 | E-05 (L2048-2064) | ○ |
| C-56 | showPopover のポップオーバー表示 | E-05 (L1673-1731) | ○ |
| C-57 | dismissCurrentArticlePopover のポップオーバー非表示 | E-05 (L1747-1761) | ○ |
| C-58 | perform(action:onArticle:) のアクション実行 | E-05 (L1767-1808) | ○ |
| C-59 | updateSearchBarText の検索バー更新 | E-05 (L1928-1948) | ○ |
| C-60 | regroupArticlesIfNecessary のグルーピング | E-05 (L1437-1669) | ○ |
| C-61 | merge のグループマージ | E-05 (L1390-1435) | △ |
| C-62 | apply(theme:) のテーマ適用 | E-05 (L2337-2371) | ○ |
| C-63 | accessibilityPerformEscape のアクセシビリティ | E-05 (L2567-2581) | ○ |
| C-64 | mapView(_:didSelect:) のマップ選択 | E-05 (L2497-2503) | ○ |
| C-65 | locationManager(_:didUpdateAuthorized:) の位置権限 | E-05 (L2542-2552) | ○ |
| C-66 | performSearch の検索実行 | E-05 (L669-770) | ○ |
| C-67 | performWikidataQuery の Wikidata クエリ | E-05 (L798-824) | ○ |
| C-68 | updatePlaces の記事更新 | E-05 (L882-893) | ○ |
| C-69 | placeSearchSuggestionController didSelectSearch | E-05 (L2240-2244) | ○ |
| C-70 | placeSearchSuggestionControllerClearButtonPressed | E-05 (L2246-2249) | ○ |
| C-71 | zoomAndPanMapView の地図移動 | E-05 (L2275-2283) | ○ |
| C-72 | recenterOnUserLocation の位置再センタリング | E-05 (L2287-2293) | ○ |
| C-73 | controllerDidChangeContent の FRC デリゲート | E-05 (L2297-2299) | ○ |
| C-74 | articlePlaceViewWasTapped のタップ処理 | E-05 (L2316-2321) | ○ |
| C-75 | gestureRecognizer shouldReceive の判定 | E-05 (L2325-2333) | ○ |
| C-76 | searchBarTextDidBeginEditing の処理 | E-05 (L2180-2189) | ○ |
| C-77 | searchBar textDidChange の処理 | E-05 (L2191-2195) | ○ |
| C-78 | searchBarCancelButtonClicked の処理 | E-05 (L2197-2199) | ○ |
| C-79 | searchBarSearchButtonClicked の処理 | E-05 (L2201-2218) | ○ |
| C-80 | updateSearchCompletionsFromSearchBarText の処理 | E-05 (L2109-2117) | ○ |
| C-81 | showDidYouMeanButton の表示処理 | E-05 (L772-791) | ○ |
| C-82 | hideDidYouMeanButton の非表示処理 | E-05 (L793-796) | ○ |
| C-83 | regionWillChange の処理 | E-05 (L2375-2379) | ○ |
| C-84 | regionDidChange の処理 | E-05 (L2381-2397) | ○ |
| C-85 | didSelect(place:annotationView:) の選択処理 | E-05 (L2399-2422) | ○ |
| C-86 | didDeselectAnnotation の選択解除 | E-05 (L2424-2427) | ○ |
| C-87 | viewFor(place:) のビュー生成 | E-05 (L2429-2484) | ○ |
| C-88 | mapView viewFor の MKMapViewDelegate | E-05 (L2509-2523) | ○ |
| C-89 | updateUserLocationAnnotationViewHeading のヘディング更新 | E-05 (L2267-2273) | ○ |
| C-90 | promptForLocationAccess の位置情報許可プロンプト | E-05 (L1331-1354) | ○ |
| C-91 | updateSavedPlacesCountInCurrentMapRegionIfNecessary の件数更新 | E-05 (L895-912) | ○ |
| C-92 | redoSearch の再検索 | E-05 (L915-927) | ○ |
| C-93 | didYouMean の候補検索実行 | E-05 (L929-942) | ○ |
| C-94 | updateViewIfMapMovedSignificantly の表示更新 | E-05 (L647-667) | ○ |
| C-95 | filterButtonPressed のフィルタ選択 | E-05 (L480-496) | ○ |
| C-96 | configureNavigationBar のナビゲーション設定 | E-05 (L273-291) | ○ |
| C-97 | updateScopeBarVisibility のスコープバー表示 | E-05 (L293-305) | ○ |
| C-98 | set(shouldShowAllImages:) の画像表示設定 | E-05 (L383-393) | ○ |
| C-99 | updateShouldShowAllImagesIfNecessary の画像表示判定 | E-05 (L364-381) | ○ |
| C-100 | adjustLayout(ofPopover:...) のポップオーバーレイアウト | E-05 (L1817-1916) | ○ |

## 4) 不足情報（Unknown / Missing）
- **UT-PLC-080 (handlePanGesture)**: ジェスチャの translation 値の具体的な計算結果は実行時の UI 状態に依存するため、テストケースの入力値は推測に基づく
  - 候補：UI テスト / スナップショットテスト / モックジェスチャの利用
- **UT-PLC-094 (merge)**: 再帰的なマージ処理の戻り値の完全な検証には、より複雑なテストシナリオが必要
  - 候補：境界条件を含む統合テスト / プロパティベーステスト

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: PlaceSearchType/PlaceFilterType enum テスト - 単純な値検証
- **0（低リスク）**: PlaceSearch 初期化・シリアライズテスト - 明確な入出力
- **1（中リスク）**: PlaceSearchService の API 呼び出しテスト - 外部依存のモック化が必要
- **1（中リスク）**: WikidataFetcher+Places の API テスト - ネットワーク依存
- **2（高リスク）**: PlacesViewController の UI 統合テスト - 複雑な UI 状態管理
- **1（中リスク）**: 地図関連メソッドのテスト - MKMapView のモック化が必要

## 6) レビュアーチェックリスト（最小）
- [ ] PlaceSearch のシリアライズ/デシリアライズテストが全プロパティをカバーしているか確認
- [ ] PlaceSearchService の API 呼び出しテストでエラーハンドリングが網羅されているか確認
- [ ] ArticlePlace.identifierForArticles の XOR ハッシュ計算がコリジョンを考慮しているか確認
- [ ] ArticlePlaceView の画像読み込みテストで非同期処理が適切にテストされるか確認
- [ ] PlacesViewController のグルーピングロジックテストで境界条件が十分か確認
- [ ] 位置情報権限関連テストで全ての権限状態がカバーされているか確認
- [ ] MKMapViewDelegate メソッドのテストでモック設定が適切か確認

---

## 解析対象ファイル一覧

| ファイル | 行数 | 主要クラス/構造体 |
|---------|------|------------------|
| PlaceSearch.swift | 178 | PlaceSearchType, PlaceFilterType, PlaceSearchOrigin, PlaceSearchError, PlaceSearch |
| PlaceSearchService.swift | 152 | PlaceSearchResult, PlaceSearchService |
| PlaceSearchSuggestionController.swift | 171 | PlaceSearchSuggestionController |
| PlacesSearchSuggestionTableViewCell.swift | 25 | PlacesSearchSuggestionTableViewCell |
| PlacesViewController.swift | 2605 | PlacesViewController, PlaceSearchEmptySearchOverlayView |
| ArticlePlace.swift | 41 | DebugAnnotation, ArticlePlace |
| ArticlePlaceView.swift | 528 | ArticlePlaceView |
| WikidataFetcher+Places.swift | 67 | WikidataFetcher extension |

## テスト観点の分布

| 観点 | 件数 | 割合 |
|------|------|------|
| 正常系 | 85 | 85% |
| 異常系 | 7 | 7% |
| 境界値 | 8 | 8% |

## 優先度の分布

| 優先度 | 件数 | 割合 |
|--------|------|------|
| 高 | 38 | 38% |
| 中 | 58 | 58% |
| 低 | 4 | 4% |
