# 機能設計書 93-AboutAvaloniaDialog

## 概要

本ドキュメントは、Avaloniaフレームワークにおける「About Avalonia」ダイアログ（AboutAvaloniaDialog）機能の設計仕様を記述します。AboutAvaloniaDialogは、Avaloniaフレームワークのバージョン情報と著作権情報を表示するシンプルなダイアログウィンドウです。

### 本機能の処理概要

AboutAvaloniaDialogは、Avaloniaで構築されたアプリケーションにおいて、フレームワークの情報を表示するための標準的な「About」ダイアログを提供します。Avaloniaロゴ、バージョン番号、著作権情報、および公式ウェブサイトへのリンクを表示します。

**業務上の目的・背景**：多くのデスクトップアプリケーションでは、「Help」メニューや「About」メニューからソフトウェアのバージョン情報を確認できる機能が求められます。Avaloniaフレームワークは、この標準的な機能を簡単に実装できるよう、再利用可能なAboutダイアログを提供しています。これにより、開発者は独自にバージョン情報ダイアログを作成する手間を省くことができます。

**機能の利用シーン**：
- アプリケーションの「Help > About」メニューからの表示
- フレームワークバージョンの確認
- 開発ビルドかリリースビルドかの判別
- Avalonia公式サイトへのアクセス

**主要な処理内容**：
1. アセンブリからバージョン情報を取得
2. バージョン番号のフォーマット（例：v11.0）
3. 開発ビルド判定（Revision == 999の場合）
4. 現在年の著作権表示
5. 公式ウェブサイトへのURLランチャー起動

**関連システム・外部連携**：Launcher.LaunchUriAsync()を使用してシステムのデフォルトブラウザでAvalonia公式サイトを開きます。

**権限による制御**：本機能は情報表示のみで、特別な権限制御はありません。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | AboutAvaloniaDialog | 主画面 | Avaloniaバージョン情報の表示 |

## 機能種別

情報表示ダイアログ / バージョン情報

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| - | - | - | パラメータなし（ダイアログ表示のみ） | - |

### 入力データソース

- アセンブリメタデータ（バージョン情報）
- システム日時（著作権年）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Version | string | フォーマット済みバージョン文字列（例：v11.0） |
| IsDevelopmentBuild | bool | 開発ビルドフラグ |
| Copyright | string | 著作権表示文字列 |

### 出力先

- ダイアログウィンドウ上のUI表示
- ブラウザへのURL起動（ボタンクリック時）

## 処理フロー

### 処理シーケンス

```
1. ダイアログインスタンス生成
   └─ AboutAvaloniaDialogコンストラクタ呼び出し
2. XAMLロード
   └─ AvaloniaXamlLoader.Load(this)
3. DataContext設定
   └─ 自身をDataContextに設定
4. バージョン情報取得
   └─ アセンブリからVersion取得
5. UI表示
   └─ ロゴ、バージョン、著作権情報をバインディング
6. ユーザー操作待機
   └─ 「Learn more」ボタンまたはウィンドウクローズ
```

### フローチャート

```mermaid
flowchart TD
    A[ダイアログ表示] --> B[XAMLロード]
    B --> C[アセンブリからバージョン取得]
    C --> D[静的プロパティ初期化]
    D --> E[UI表示]
    E --> F{ユーザー操作}
    F -->|Learn moreクリック| G[ブラウザでURL起動]
    F -->|閉じる| H[ダイアログ終了]
    G --> F
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-93-01 | バージョンフォーマット | 「v{Major}.{Minor}」形式で表示 | 常時 |
| BR-93-02 | 開発ビルド判定 | Revision番号が999の場合はIsDevelopmentBuild=true | ビルド時 |
| BR-93-03 | 著作権年 | 現在年を動的に取得して表示 | 常時 |
| BR-93-04 | URL起動 | https://www.avaloniaui.net/ を起動 | ボタンクリック時 |

### 計算ロジック

バージョン文字列は`s_version.ToString(2)`で生成され、メジャーバージョンとマイナーバージョンのみを含みます（例：11.0）。

## データベース操作仕様

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

本機能はデータベース操作を伴いません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | - | 通常エラーは発生しない | - |

### リトライ仕様

URL起動に失敗した場合のリトライは行いません。

## トランザクション仕様

本機能はUI表示のため、トランザクション管理は不要です。

## パフォーマンス要件

- 静的プロパティにより初回のみバージョン取得
- ダイアログの即時表示

## セキュリティ考慮事項

- 外部URLへのアクセスはシステムのデフォルトブラウザを使用

## 備考

AboutAvaloniaDialogは固定サイズ（430x475）のウィンドウとして表示されます。ロゴ画像はDrawingGroupとしてXAML内に埋め込まれています。

---

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

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

### 推奨読解順序

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

Aboutダイアログは非常にシンプルで、静的プロパティでデータを管理します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | AboutAvaloniaDialog.xaml.cs | `src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml.cs` | 静的プロパティの定義 |

**読解のコツ**: 静的コンストラクタでの初期化とプロパティの遅延評価パターンを確認してください。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | AboutAvaloniaDialog.xaml.cs | `src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml.cs` | コンストラクタとイベントハンドラ |

**主要処理フロー**:
1. **10行目**: s_version - アセンブリからバージョン取得
2. **12行目**: Version - フォーマット済みバージョン文字列
3. **14行目**: IsDevelopmentBuild - 開発ビルド判定
4. **16行目**: Copyright - 著作権文字列
5. **18-22行目**: コンストラクタ - XAMLロードとDataContext設定
6. **24-28行目**: Button_OnClick - URL起動処理

#### Step 3: UIレイアウトを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | AboutAvaloniaDialog.xaml | `src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml` | XAMLレイアウト定義 |

**主要構成要素**:
- **16-20行目**: AvaloniaLogo - DrawingGroupによるロゴ定義
- **31-37行目**: ロゴ画像表示
- **39-43行目**: タイトル「Avalonia」表示
- **45-49行目**: バージョン表示（{Binding Version}）
- **63-69行目**: 「Learn more」ボタン
- **71-73行目**: 著作権表示（{Binding Copyright}）

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

```
AboutAvaloniaDialog
    │
    ├─ コンストラクタ
    │      ├─ AvaloniaXamlLoader.Load(this)
    │      └─ DataContext = this
    │
    ├─ 静的プロパティ
    │      ├─ Version → s_version.ToString(2)
    │      ├─ IsDevelopmentBuild → s_version.Revision == 999
    │      └─ Copyright → $"© {DateTime.Now.Year} The Avalonia Project"
    │
    └─ Button_OnClick
           └─ Launcher.LaunchUriAsync(url)
```

### データフロー図

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

アセンブリ ────────▶ GetName().Version ────▶ s_version
                           │
                           ├─ ToString(2) ────▶ Version
                           │
                           └─ Revision == 999 ─▶ IsDevelopmentBuild

DateTime.Now.Year ─▶ $"© {Year}..." ────────▶ Copyright

ボタンクリック ────▶ Launcher.LaunchUriAsync ─▶ ブラウザ起動
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| AboutAvaloniaDialog.xaml.cs | `src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml.cs` | ソース | コードビハインド |
| AboutAvaloniaDialog.xaml | `src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml` | XAML | UIレイアウト定義 |
