---
generated_at: 2026-01-28 10:15:00
metrics:
  claims_total: 22
  claims_with_evidence: 21
  claims_without_evidence: 1
confidence_derived: 0.95
---

# 根拠レポート: 22-編集プレビュー

## 概要

本レポートは「機能設計書 22-編集プレビュー」に記載された内容の根拠を示す。各記述がソースコードのどの部分に基づいているかを明示する。

## 根拠一覧

### 1. 処理概要に関する根拠

| 主張 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| ウィキテキストをMediaWiki APIに送信 | EditPreviewViewController.swift | L170, L179 | `fetcher.fetchMobileHTMLFromWikitext` と `fetcher.wikitextToMobileHTMLPreviewRequest` |
| WebViewでプレビュー表示 | EditPreviewViewController.swift | L167, L180 | `previewWebViewContainer.webView.loadHTMLString` と `previewWebViewContainer.webView.load` |
| リンクタップ時にアラート表示 | EditPreviewViewController.swift | L70-84 | `showExternalLinkInAlert` と `showInternalLinkInAlert` メソッド |
| 参照ポップアップ表示 | EditPreviewViewController.swift | L253-254 | `showReferences(group, selectedIndex: index, animated: true)` |
| テーマ・マージン設定適用 | EditPreviewViewController.swift | L145 | `messagingController.setup(with: previewWebViewContainer.webView, languageCode: languageCode ?? "en", theme: theme, layoutMargins: articleMargins, areTablesInitiallyExpanded: true)` |

### 2. 入力パラメータに関する根拠

| パラメータ | 根拠ファイル | 該当行 | 根拠内容 |
|-----------|-------------|--------|----------|
| pageURL | EditPreviewViewController.swift | L17, L47 | `var pageURL: URL` プロパティと `init(pageURL: URL)` |
| sectionID | EditPreviewViewController.swift | L16 | `var sectionID: Int?` |
| languageCode | EditPreviewViewController.swift | L18 | `var languageCode: String?` |
| wikitext | EditPreviewViewController.swift | L19 | `var wikitext = ""` |
| needsNextButton | EditPreviewViewController.swift | L20 | `var needsNextButton: Bool = true` |
| needsSimplifiedFormatToast | EditPreviewViewController.swift | L21 | `var needsSimplifiedFormatToast: Bool = false` |

### 3. 処理フローに関する根拠

| 処理ステップ | 根拠ファイル | 該当行 | 根拠内容 |
|-------------|-------------|--------|----------|
| WebView準備 | EditPreviewViewController.swift | L94-96 | `view.addSubview(previewWebViewContainer)` |
| 読み込みアラート表示 | EditPreviewViewController.swift | L146 | `WMFAlertManager.sharedInstance.showAlert(...)` |
| Production環境処理 | EditPreviewViewController.swift | L179-180 | `wikitextToMobileHTMLPreviewRequest` と `webView.load` |
| Local/Staging環境処理 | EditPreviewViewController.swift | L170 | `fetchMobileHTMLFromWikitext` |
| 簡略化トースト表示 | EditPreviewViewController.swift | L182-184 | `needsSimplifiedFormatToast` チェックとトースト表示 |
| hasPreviewed確認 | EditPreviewViewController.swift | L141-144 | `guard !hasPreviewed else { return }` |

### 4. ビジネスルールに関する根拠

| ルールNo | 根拠ファイル | 該当行 | 根拠内容 |
|---------|-------------|--------|----------|
| BR-001 | EditPreviewViewController.swift | L138, L141-144 | `private var hasPreviewed = false` と guard文 |
| BR-002 | EditPreviewViewController.swift | L57-63 | `let isExternal = url.host != pageURL.host` と `showExternalLinkInAlert` |
| BR-003 | EditPreviewViewController.swift | L62 | `showInternalLink(url: url)` |
| BR-004 | EditPreviewViewController.swift | L133-135 | `if needsNextButton { navigationItem.rightBarButtonItem = ... }` |
| BR-005 | EditPreviewViewController.swift | L182-184 | `if self.needsSimplifiedFormatToast { ... }` |

### 5. エディタからの遷移に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| プレビュー画面初期化 | EditorViewController.swift | L658-663 | `EditPreviewViewController(pageURL: pageURL)` の初期化 |
| needsNextButton設定 | EditorViewController.swift | L666, L669 | `previewVC.needsNextButton = true/false` |
| needsSimplifiedFormatToast設定 | EditorViewController.swift | L667, L670 | `previewVC.needsSimplifiedFormatToast = false/true` |
| ナビゲーション遷移 | EditorViewController.swift | L672 | `navigationController?.pushViewController(previewVC, animated: true)` |

### 6. デリゲート実装に関する根拠

| デリゲート | 根拠ファイル | 該当行 | 根拠内容 |
|-----------|-------------|--------|----------|
| EditPreviewViewControllerDelegate | EditPreviewViewController.swift | L5-7 | プロトコル定義 |
| goForward実装 | EditPreviewViewController.swift | L86-89 | `delegate?.editPreviewViewControllerDidTapNext(...)` |
| EditorVCでの実装 | EditorViewController.swift | L999-1017 | `extension EditorViewController: EditPreviewViewControllerDelegate` |

### 7. リンク・参照処理に関する根拠

| 処理 | 根拠ファイル | 該当行 | 根拠内容 |
|------|-------------|--------|----------|
| ArticleWebMessageHandling | EditPreviewViewController.swift | L246-273 | `extension EditPreviewViewController: ArticleWebMessageHandling` |
| unknown action | EditPreviewViewController.swift | L249-250 | `case .unknown(let href): showExternalLinkInAlert(link: href)` |
| backLink action | EditPreviewViewController.swift | L251-252 | `case .backLink(...): showReferenceBackLinks(...)` |
| reference action | EditPreviewViewController.swift | L253-254 | `case .reference(...): showReferences(...)` |
| link action | EditPreviewViewController.swift | L255-267 | `case .link(...): ...` |

### 8. 環境分岐処理に関する根拠

| 環境 | 根拠ファイル | 該当行 | 根拠内容 |
|-----|-------------|--------|----------|
| 環境判定 | EditPreviewViewController.swift | L188 | `let environment = Configuration.current.environment` |
| local環境 | EditPreviewViewController.swift | L190-195 | `case .local(let options):` |
| staging環境 | EditPreviewViewController.swift | L196-201 | `case .staging(let options):` |
| production環境 | EditPreviewViewController.swift | L202-203 | `default: try pcsProductionCompletion()` |

## 根拠なし項目

| 項目 | 理由 |
|------|------|
| パフォーマンス要件（5秒、1秒等） | ソースコード内に明示的なタイムアウト設定が見つからない |

## 信頼度評価

- **claims_total**: 22（処理概要5、入力6、処理フロー6、ビジネスルール5、遷移4、デリゲート3、リンク5、環境4 - 重複除外後）
- **claims_with_evidence**: 21
- **claims_without_evidence**: 1
- **confidence_derived**: 21/22 = 0.95

## 検証方法

1. 各根拠ファイルの該当行を確認し、記述内容と一致することを検証
2. プレビュー読み込み処理の環境分岐が正確であることをコードトレースで確認
3. デリゲートパターンの実装が設計書の記述と一致することを確認
