# 画面設計書 44-Platform Information

## 概要

本ドキュメントは、Avalonia UIフレームワークのControlCatalogサンプルアプリケーションにおける「Platform Information」ページの画面設計書です。

### 本画面の処理概要

Platform Informationページは、アプリケーションが実行されているプラットフォーム情報を表示し、AvaloniaのOnPlatform/OnFormFactor拡張機能の使用方法をデモンストレーションする画面です。実行環境に応じたプラットフォーム固有のUI制御方法を示しています。

**業務上の目的・背景**：クロスプラットフォームアプリケーション開発において、プラットフォーム固有の処理やUI調整が必要な場合があります。本画面は、実行時にプラットフォームやフォームファクター（デスクトップ/モバイル/TV）を検出し、それに応じたUI変更を行う方法を示しています。Windows/macOS/Linux/Browser/iOS/Androidなど、複数プラットフォームでの動作確認とXAMLマークアップ拡張の使用例として提供されています。

**画面へのアクセス方法**：MainWindowからMainViewのHamburgerMenuを開き、「Platform Information」メニュー項目を選択することでアクセスできます。

**主要な操作・処理内容**：
1. 現在のプラットフォーム情報（Desktop/Mobile、Native/Browser）の表示
2. フォームファクターに応じた視覚的インジケーター表示（Desktop/Mobile/TV）
3. プラットフォームに応じた視覚的インジケーター表示（Windows/macOS/Linux/Browser/iOS/Android）
4. 複合条件（Win/Lin/Mac）による視覚的インジケーター表示

**画面遷移**：本画面は単独の情報表示ページであり、MainViewのHamburgerMenuから遷移します。他画面への直接遷移機能は持ちません。

**権限による表示制御**：本デモ画面では権限による表示制御は実装されていません。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 46 | Screens | 主機能 | マルチモニター環境での画面情報取得・表示 |

## 画面種別

情報表示 / デモ

## URL/ルーティング

ControlCatalog内のHamburgerMenuナビゲーションによるページ切り替え（URL/ルーティング定義なし）

## 入出力項目

本画面は情報表示専用であり、ユーザー入力項目はありません。

## 表示項目

| 項目名 | 表示位置 | 説明 |
|--------|----------|------|
| PlatformInfo | 上部 | プラットフォーム情報テキスト（例："Platform: Desktop (native)"） |
| Desktopインジケーター | フォームファクター行 | デスクトップ環境の場合に緑色表示 |
| Mobileインジケーター | フォームファクター行 | モバイル環境の場合に緑色表示 |
| TVインジケーター | フォームファクター行 | TV環境の場合に緑色表示 |
| Windowsインジケーター | プラットフォーム行 | Windows環境の場合に緑色表示 |
| macOSインジケーター | プラットフォーム行 | macOS環境の場合に緑色表示 |
| Linuxインジケーター | プラットフォーム行 | Linux環境の場合に緑色表示 |
| Browserインジケーター | プラットフォーム行 | Browser環境の場合に緑色表示 |
| iOSインジケーター | プラットフォーム行 | iOS環境の場合に緑色表示 |
| Androidインジケーター | プラットフォーム行 | Android環境の場合に緑色表示 |
| Win/Lin/Macインジケーター | プラットフォーム行 | Windows/Linux/macOSいずれかの場合に緑色表示 |

## イベント仕様

### 1-ページ初期化イベント

PlatformInfoPageのコンストラクタでPlatformInformationViewModelをインスタンス化し、DataContextに設定する。ViewModelのコンストラクタでIRuntimePlatformサービスからプラットフォーム情報を取得してPlatformInfoプロパティを設定する。

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

本画面はUIコントロールのデモ画面であり、データベースへのアクセス・更新は行いません。

## メッセージ仕様

| メッセージ種別 | 表示条件 | メッセージ内容 |
|---------------|----------|---------------|
| 情報表示 | デスクトップ（ネイティブ） | "Platform: Desktop (native)" |
| 情報表示 | モバイル（ネイティブ） | "Platform: Mobile (native)" |
| 情報表示 | デスクトップ（ブラウザ） | "Platform: Desktop (browser)" |
| 情報表示 | モバイル（ブラウザ） | "Platform: Mobile (browser)" |
| 情報表示 | 不明（ネイティブ） | "Platform: Unknown (native) - please report" |
| 情報表示 | 不明（ブラウザ） | "Platform: Unknown (browser) - please report" |

## 例外処理

- IRuntimePlatformサービスが取得できない場合は、GetRuntimeInfo()がnullを返すためプラットフォーム情報は表示されない
- RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER"))でブラウザ環境を検出

## 備考

- OnPlatformマークアップ拡張を使用してプラットフォーム固有の値を設定
- OnFormFactorマークアップ拡張を使用してフォームファクター固有の値を設定
- OnPlatformのOptionsパラメータで複数プラットフォームを同時指定可能（例："macOS, Linux, Windows"）
- AvaloniaLocator.Current.GetService<IRuntimePlatform>()は内部APIであり、本番コードでは非推奨（OperatingSystemクラスまたはRuntimeInformationクラスの使用を推奨）

---

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

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

### 推奨読解順序

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

ViewModelでのプラットフォーム情報取得ロジックを理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | PlatformInformationViewModel.cs | `samples/ControlCatalog/ViewModels/PlatformInformationViewModel.cs` | コンストラクタ（10-55行）でプラットフォーム検出ロジックを確認 |
| 1-2 | PlatformInformationViewModel.cs | `samples/ControlCatalog/ViewModels/PlatformInformationViewModel.cs` | PlatformInfoプロパティ（57行）で表示文字列を確認 |

**読解のコツ**: RuntimeInformation.IsOSPlatformとAvaloniaのIRuntimePlatformの使い分けに注目。

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

UserControlの初期化処理を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | PlatformInfoPage.xaml.cs | `samples/ControlCatalog/Pages/PlatformInfoPage.xaml.cs` | コンストラクタ（8-12行）でViewModel設定 |

**主要処理フロー**:
1. **10行**: InitializeComponentでXAMLをロード
2. **11行**: PlatformInformationViewModelをインスタンス化してDataContext設定

#### Step 3: XAMLマークアップ拡張を理解する

OnPlatform/OnFormFactorマークアップ拡張の使用方法を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | PlatformInfoPage.xaml | `samples/ControlCatalog/Pages/PlatformInfoPage.xaml` | 16-24行でOnFormFactor使用例（Desktop/Mobile/TV） |
| 3-2 | PlatformInfoPage.xaml | `samples/ControlCatalog/Pages/PlatformInfoPage.xaml` | 27-44行でOnPlatform使用例（各OS） |
| 3-3 | PlatformInfoPage.xaml | `samples/ControlCatalog/Pages/PlatformInfoPage.xaml` | 45-52行でOnPlatformの複合条件使用例 |

**主要処理フロー**:
- **16行**: `{OnFormFactor Gray, Desktop=Green}` - Desktopの場合のみ緑色
- **27行**: `{OnPlatform Gray, Windows=Green}` - Windowsの場合のみ緑色
- **47-48行**: `<On Options="macOS, Linux, Windows" Content="Green" />` - 複合条件

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

```
PlatformInfoPage (UserControl)
    │
    ├─ InitializeComponent()
    │      └─ XAMLパーサー → PlatformInfoPage.xaml読み込み
    │             ├─ OnFormFactor評価
    │             │      └─ IRuntimePlatform.GetRuntimeInfo()
    │             └─ OnPlatform評価
    │                    └─ RuntimeInformation.IsOSPlatform()
    │
    └─ PlatformInformationViewModel
           ├─ AvaloniaLocator.Current.GetService<IRuntimePlatform>()
           ├─ RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER"))
           └─ PlatformInfo (Property)
                  └─ "Platform: {type} ({mode})"
```

### データフロー図

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

システム情報 ───────────▶ IRuntimePlatform ───────────▶ PlatformInfo
(OS/フォームファクター)   ├─ GetRuntimeInfo()            TextBlock表示
                          ├─ IsDesktop
                          └─ IsMobile

XAMLマークアップ ────────▶ OnPlatform/OnFormFactor ───▶ Background色
(各Border)               ├─ プラットフォーム判定           │
                          └─ 条件マッチング                ▼
                                                      緑色/灰色表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| PlatformInfoPage.xaml | `samples/ControlCatalog/Pages/PlatformInfoPage.xaml` | XAML | 画面レイアウト・マークアップ拡張使用 |
| PlatformInfoPage.xaml.cs | `samples/ControlCatalog/Pages/PlatformInfoPage.xaml.cs` | ソース | コードビハインド |
| PlatformInformationViewModel.cs | `samples/ControlCatalog/ViewModels/PlatformInformationViewModel.cs` | ソース | プラットフォーム情報取得ViewModel |
