# 画面設計書 13-AboutDialog（バージョン情報）

## 概要

本ドキュメントは、Windows Terminal の AboutDialog（バージョン情報）画面の設計仕様を記述する。AboutDialog は、アプリケーションのバージョン番号、更新確認、各種ドキュメントリンクを表示する情報ダイアログである。

### 本画面の処理概要

AboutDialog は、Windows Terminal のバージョン情報やプロジェクト関連リンクをユーザーに提示するコンテンツダイアログである。ダイアログの表示と同時に更新チェックが非同期で実行され、利用可能な更新がある場合はその旨が表示される。

**業務上の目的・背景**：ユーザーが現在使用している Windows Terminal のバージョンを確認し、最新版への更新が利用可能かどうかを把握するために必要な画面である。また、ソースコードリポジトリ、ドキュメント、リリースノート、プライバシーポリシー、サードパーティライセンスへのリンクを提供し、ユーザーが関連情報にアクセスできるようにする。

**画面へのアクセス方法**：TerminalPage の Help メニューから「About」を選択するか、コマンドパレットから「About」アクションを実行することで表示される。TerminalPage 内で `_ShowAboutDialog` メソッド（TerminalPage.cpp 行860-863）が呼び出される。

**主要な操作・処理内容**：
1. バージョン情報の表示：アプリケーション名とバージョン番号を表示する
2. 更新チェック：ダイアログ表示時に自動で更新チェックを非同期実行する（1日に1回のスロットリング）
3. フィードバック送信：PrimaryButton クリックでフィードバックページを開く
4. 関連リンクの表示：ソースコード、ドキュメント、リリースノート、プライバシーポリシー、サードパーティ通知へのリンクを提供
5. サードパーティ通知の表示：NOTICE.html ファイルをブラウザで開く

**画面遷移**：TerminalPage の Help メニューからダイアログが表示される。ダイアログの Close ボタンで閉じて TerminalPage に戻る。外部リンクのクリックで既定のブラウザが起動する。

**権限による表示制御**：特になし。全ユーザーが利用可能。ただし、更新チェックはパッケージ版（Store 経由インストール）でのみ機能する。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 120 | Aboutダイアログ | 主機能 | バージョン番号・更新確認・ドキュメントリンクの表示 |

## 画面種別

ダイアログ（ContentDialog）

## URL/ルーティング

該当なし（ContentDialog として TerminalPage 内にインライン定義される）

## 入出力項目

| 項目名 | 入出力 | 型 | 必須 | 説明 |
|--------|--------|-----|------|------|
| ApplicationDisplayName | 出力（表示） | String | Yes | アプリケーション表示名 |
| ApplicationVersion | 出力（表示） | String | Yes | アプリケーションバージョン文字列 |
| CheckingForUpdates | 出力（表示） | Boolean | - | 更新チェック中フラグ |
| UpdatesAvailable | 出力（表示） | Boolean | - | 利用可能な更新が存在するフラグ |

## 表示項目

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ApplicationDisplayName | Run（TextBlock内） | アプリケーション名の表示 |
| AboutDialog_VersionLabel + ApplicationVersion | Run（TextBlock内） | バージョンラベルとバージョン番号 |
| ProgressRing + CheckingForUpdatesLabel | StackPanel | 更新チェック中の表示（プログレスリング + テキスト） |
| UpdateAvailableLabel | TextBlock | 更新が利用可能な場合の通知テキスト |
| SourceCodeLink | HyperlinkButton | ソースコードへのリンク（https://go.microsoft.com/fwlink/?linkid=2203152） |
| DocumentationLink | HyperlinkButton | ドキュメントへのリンク（https://go.microsoft.com/fwlink/?linkid=2125416） |
| ReleaseNotesLink | HyperlinkButton | リリースノートへのリンク（https://go.microsoft.com/fwlink/?linkid=2125417） |
| PrivacyPolicyLink | HyperlinkButton | プライバシーポリシーへのリンク（https://go.microsoft.com/fwlink/?linkid=2125418） |
| ThirdPartyNoticesLink | HyperlinkButton | サードパーティ通知へのリンク（Click イベントで NOTICE.html を開く） |

## イベント仕様

### 1-ダイアログ表示（コンストラクタ）

AboutDialog のコンストラクタ（AboutDialog.cpp 行28-32）で `InitializeComponent()` 後に `_queueUpdateCheck()` が呼び出され、更新チェックが非同期で開始される。

### 2-更新チェック（_queueUpdateCheck）

非同期コルーチン `_queueUpdateCheck()`（AboutDialog.cpp 行60-148）が実行される。
- 前回のチェックから1日未満の場合はスキップ（行64-67）
- パッケージ版でない場合はスキップ（行70-73）
- CheckingForUpdates を true に設定し、プログレスリングを表示
- PackageManager で更新を確認し、結果に応じて UpdatesAvailable を設定
- PackageManager が応答しない場合は StoreContext にフォールバック
- DEV ブランディングでは3秒待機後に常に更新ありと報告（テスト用）

### 3-フィードバック送信（_SendFeedbackOnClick）

PrimaryButton がクリックされると、ShellExecute でフィードバック URL をブラウザで開く（AboutDialog.cpp 行44-51）。Release ブランディングと Dev ブランディングで異なる URL を使用する。

### 4-サードパーティ通知（_ThirdPartyNoticesOnClick）

ThirdPartyNoticesLink がクリックされると、実行ファイルと同じディレクトリの NOTICE.html を ShellExecute で開く（AboutDialog.cpp 行53-58）。

## データベース更新仕様

### 操作別データベース影響一覧

該当なし。本画面はデータベースを操作しない。

## メッセージ仕様

| メッセージID | 種別 | 表示条件 | メッセージ内容 |
|-------------|------|----------|---------------|
| AboutDialog（x:Uid） | ダイアログタイトル | 常時 | ダイアログのタイトル |
| AboutDialog_VersionLabel | ラベル | 常時 | バージョン番号の前のラベルテキスト |
| AboutDialog_CheckingForUpdatesLabel | 情報 | 更新チェック中 | 更新チェック中であることを示すテキスト |
| AboutDialog_UpdateAvailableLabel | 情報 | 更新あり | 利用可能な更新がある旨のテキスト |
| AboutDialog_SourceCodeLink | リンクテキスト | 常時 | ソースコードリンクのテキスト |
| AboutDialog_DocumentationLink | リンクテキスト | 常時 | ドキュメントリンクのテキスト |
| AboutDialog_ReleaseNotesLink | リンクテキスト | 常時 | リリースノートリンクのテキスト |
| AboutDialog_PrivacyPolicyLink | リンクテキスト | 常時 | プライバシーポリシーリンクのテキスト |
| AboutDialog_ThirdPartyNoticesLink | リンクテキスト | 常時 | サードパーティ通知リンクのテキスト |

## 例外処理

- 更新チェック中の例外：`_queueUpdateCheck` 内の try-catch で例外をキャッチし、静かに無視する（AboutDialog.cpp 行141-144）。更新チェックの失敗はユーザーに通知されない
- PackageManager アクセス時の例外：内部の try-catch で処理され、StoreContext へのフォールバックが行われる（AboutDialog.cpp 行119-121）

## 備考

- DefaultButton は Close に設定されている（XAML 行14）
- テキスト選択が有効化されており、バージョン情報をコピー可能（IsTextSelectionEnabled="True"）
- ApplicationDisplayName と ApplicationVersion は CascadiaSettings クラスの静的メソッドから取得される（AboutDialog.cpp 行34-42）
- 更新チェックは1日に1回にスロットリングされる（_lastUpdateCheck による制御）
- リンクは Microsoft の短縮URL（go.microsoft.com）を使用しており、リダイレクト先は変更可能

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

AboutDialog の公開プロパティとデータバインディングを把握する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | AboutDialog.idl | `src/cascadia/TerminalApp/AboutDialog.idl` | ContentDialog を基底クラスとするランタイムクラス。ApplicationDisplayName、ApplicationVersion、CheckingForUpdates、UpdatesAvailable の4つのプロパティを確認（行6-15） |

#### Step 2: エントリーポイントを理解する

TerminalPage から AboutDialog がどのように呼び出されるかを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | TerminalPage.cpp | `src/cascadia/TerminalApp/TerminalPage.cpp` | `_ShowAboutDialog` メソッド（行860-863）。`_ShowDialogHelper(L"AboutDialog")` を呼び出し、x:Load による遅延読み込みと DialogPresenter による表示を行う |
| 2-2 | TerminalPage.xaml | `src/cascadia/TerminalApp/TerminalPage.xaml` | AboutDialog の配置定義（行85-87）。x:Load="False" で遅延読み込み |

**主要処理フロー**:
1. **行860**: Help メニューまたはコマンドパレットから `_ShowAboutDialog` が呼び出される
2. **行862**: `_ShowDialogHelper(L"AboutDialog")` で FindName により XAML の遅延読み込みが行われる
3. **行878-885**: `_ShowDialogHelper` が DialogPresenter 経由でダイアログを表示

#### Step 3: ダイアログの実装を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | AboutDialog.xaml | `src/cascadia/TerminalApp/AboutDialog.xaml` | UI レイアウト。バージョン情報テキスト、更新チェック表示、HyperlinkButton 群の構造を確認 |
| 3-2 | AboutDialog.h | `src/cascadia/TerminalApp/AboutDialog.h` | WINRT_OBSERVABLE_PROPERTY による UpdatesAvailable、CheckingForUpdates の宣言（行19-20）、_lastUpdateCheck メンバ（行25） |
| 3-3 | AboutDialog.cpp | `src/cascadia/TerminalApp/AboutDialog.cpp` | コンストラクタでの _queueUpdateCheck 呼び出し（行32）、更新チェックコルーチンの実装（行60-148）、フィードバック送信（行44-51）、サードパーティ通知表示（行53-58） |

### プログラム呼び出し階層図

```
TerminalPage::_ShowAboutDialog (TerminalPage.cpp:860)
    |
    +-- TerminalPage::_ShowDialogHelper("AboutDialog") (TerminalPage.cpp:878)
            |
            +-- FindName("AboutDialog") --> AboutDialog コンストラクタ
            |       |
            |       +-- InitializeComponent()
            |       +-- _queueUpdateCheck() (非同期コルーチン)
            |               |
            |               +-- PackageManager::FindPackageForUser
            |               |       +-- CheckUpdateAvailabilityAsync
            |               |
            |               +-- StoreContext::GetDefault (フォールバック)
            |                       +-- GetAppAndOptionalStorePackageUpdatesAsync
            |
            +-- DialogPresenter::ShowDialog
```

### データフロー図

```
[入力]                       [処理]                              [出力]

(なし - 自動取得)        AboutDialog                         UI表示
                         |                                     |
CascadiaSettings    --> ApplicationDisplayName()         --> アプリ名テキスト
CascadiaSettings    --> ApplicationVersion()             --> バージョンテキスト
                         |                                     |
PackageManager      --> _queueUpdateCheck()              --> CheckingForUpdates (ProgressRing)
StoreContext            (非同期)                          --> UpdatesAvailable (更新通知)
                         |                                     |
PrimaryButton       --> _SendFeedbackOnClick()           --> ShellExecute (ブラウザ起動)
ThirdPartyNotices   --> _ThirdPartyNoticesOnClick()       --> ShellExecute (NOTICE.html)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| AboutDialog.xaml | `src/cascadia/TerminalApp/AboutDialog.xaml` | ソース（XAML） | UI レイアウト定義 |
| AboutDialog.h | `src/cascadia/TerminalApp/AboutDialog.h` | ソース（ヘッダー） | クラス宣言・プロパティ定義 |
| AboutDialog.cpp | `src/cascadia/TerminalApp/AboutDialog.cpp` | ソース（実装） | 更新チェック、リンク処理の実装 |
| AboutDialog.idl | `src/cascadia/TerminalApp/AboutDialog.idl` | ソース（IDL） | WinRT インターフェース定義 |
| TerminalPage.cpp | `src/cascadia/TerminalApp/TerminalPage.cpp` | ソース（実装） | `_ShowAboutDialog` 呼び出し元 |
| TerminalPage.xaml | `src/cascadia/TerminalApp/TerminalPage.xaml` | ソース（XAML） | AboutDialog の配置定義（行85-87） |
| Resources.resw | `src/cascadia/TerminalApp/Resources/en-US/Resources.resw` | リソース | ダイアログテキスト・リンクテキストの文字列リソース |
