# 機能設計書 116-InterFont

## 概要

本ドキュメントは、Avaloniaフレームワークのインターフォント機能について、その設計と実装を詳細に記述する機能設計書である。Interフォントファミリーをアプリケーションのデフォルトフォントとして埋め込み、提供する。

### 本機能の処理概要

InterFontは、Avaloniaアプリケーションにおいて、高品質なオープンソースフォント「Inter」をアプリケーションリソースとして埋め込み、フォントマネージャーに登録する機能である。システムフォントに依存せず、全てのプラットフォームで一貫したタイポグラフィを実現する。

**業務上の目的・背景**：クロスプラットフォームアプリケーション開発において、各プラットフォームで利用可能なフォントが異なるため、UIの見た目が環境によって変わってしまう問題がある。Interフォントを埋め込むことで、Windows、macOS、Linux、さらにはWebAssemblyやモバイルプラットフォームでも同一のタイポグラフィを保証できる。Interはスクリーン表示に最適化された可読性の高いフォントであり、モダンなUIデザインに適している。

**機能の利用シーン**：アプリケーション起動時にWithInterFont()拡張メソッドを呼び出すことで、Interフォントがフォントマネージャーに登録される。その後、XAML内でFontFamily="Inter"と指定するか、デフォルトフォントとして使用される。

**主要な処理内容**：
1. InterFontCollectionクラスによるフォントコレクション定義
2. EmbeddedFontCollectionの継承によるリソース埋め込み
3. AppBuilder拡張メソッドによるフォント登録
4. FontManagerへのフォントコレクション追加

**関連システム・外部連携**：Avalonia.Media.Fonts（FontManager、EmbeddedFontCollection）

**権限による制御**：特になし

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | フォント機能は全UIコントロールに影響 |

## 機能種別

フォントリソース / アプリケーション設定 / UIインフラストラクチャ

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| - | - | - | 特にパラメータは取らない | - |

### 入力データソース

- 埋め込みリソース（avares://Avalonia.Fonts.Inter/Assets）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| InterFontCollection | EmbeddedFontCollection | Interフォントファミリーコレクション |

### 出力先

- FontManagerのフォントコレクション

## 処理フロー

### 処理シーケンス

```
1. アプリケーション構成
   └─ AppBuilder.WithInterFont()呼び出し
2. フォント設定
   └─ ConfigureFonts()でコールバック登録
3. フォントコレクション生成
   └─ new InterFontCollection()
4. フォントマネージャー登録
   └─ fontManager.AddFontCollection()
5. フォント使用可能
   └─ FontFamily="Inter"で使用可能
```

### フローチャート

```mermaid
flowchart TD
    A[アプリケーション起動] --> B[AppBuilder生成]
    B --> C[WithInterFont呼び出し]
    C --> D[ConfigureFonts]
    D --> E[InterFontCollection生成]
    E --> F[AddFontCollection]
    F --> G[FontManager登録完了]
    G --> H[アプリケーション実行]
    H --> I[FontFamily=Interで使用]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | URI形式 | フォントはfonts:Inter形式のURIで参照 | 常時 |
| BR-002 | リソース配置 | フォントファイルはavares://Avalonia.Fonts.Inter/Assetsに配置 | 常時 |
| BR-003 | EmbeddedFontCollection継承 | InterFontCollectionはEmbeddedFontCollectionを継承 | 常時 |

### 計算ロジック

特になし。

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

本機能はデータベース操作を行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | - | リソースが見つからない | パッケージ参照を確認 |

### リトライ仕様

該当なし。

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

該当なし。

## パフォーマンス要件

- フォントは遅延読み込みにより、実際に使用されるまでメモリを消費しない
- 埋め込みリソースとしてアセンブリに含まれるため、ファイルシステムアクセス不要

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

- Interフォントはオープンソースライセンス（SIL Open Font License）で提供

## 備考

- Interフォントは https://rsms.me/inter/ で開発されているオープンソースフォント
- Regular、Bold、Italicなどの複数のウェイトとスタイルを含む

---

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

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

### 推奨読解順序

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

まず、フォントコレクションシステムを理解することが重要。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | EmbeddedFontCollection.cs | `src/Avalonia.Base/Media/Fonts/EmbeddedFontCollection.cs` | 埋め込みフォントコレクション基底クラス（別モジュール） |

**読解のコツ**: AvaloniaのリソースURI（avares://）の仕組みを理解しておくとよい。

#### Step 2: フォントコレクションを理解する

処理の中核となるInterFontCollectionを特定。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | InterFontCollection.cs | `src/Avalonia.Fonts.Inter/InterFontCollection.cs` | Interフォントコレクション定義 |

**主要処理フロー**:
1. **6行目**: EmbeddedFontCollectionの継承
2. **8-10行目**: コンストラクタでキーURIとソースURIを指定
   - キーURI: `fonts:Inter` - フォントを参照するためのURI
   - ソースURI: `avares://Avalonia.Fonts.Inter/Assets` - フォントファイルの配置場所

#### Step 3: AppBuilder拡張を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | AppBuilderExtension.cs | `src/Avalonia.Fonts.Inter/AppBuilderExtension.cs` | AppBuilder拡張メソッド |

**主要処理フロー**:
- **7-12行目**: WithInterFont()拡張メソッド
- **9-11行目**: ConfigureFonts()でフォントマネージャーにコレクションを追加

#### Step 4: アセンブリ情報を確認する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | AssemblyInfo.cs | `src/Avalonia.Fonts.Inter/Properties/AssemblyInfo.cs` | アセンブリメタデータ |

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

```
AppBuilder
    │
    └─ WithInterFont() [拡張メソッド]
           └─ ConfigureFonts(Action<FontManager>)
                  └─ fontManager.AddFontCollection()
                         └─ new InterFontCollection()
                                ├─ base(keyUri, sourceUri)
                                ├─ キーURI: fonts:Inter
                                └─ ソースURI: avares://Avalonia.Fonts.Inter/Assets
```

### データフロー図

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

AppBuilder ──────────▶ WithInterFont() ──────────▶ AppBuilder
                            │
                            ▼
                     ConfigureFonts()
                            │
                            ▼
                     InterFontCollection
                            │
                            ▼
埋め込みフォント ─────▶ FontManager ──────────────▶ フォント使用可能
(avares://...)         AddFontCollection()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| InterFontCollection.cs | `src/Avalonia.Fonts.Inter/InterFontCollection.cs` | ソース | フォントコレクション定義 |
| AppBuilderExtension.cs | `src/Avalonia.Fonts.Inter/AppBuilderExtension.cs` | ソース | AppBuilder拡張メソッド |
| AssemblyInfo.cs | `src/Avalonia.Fonts.Inter/Properties/AssemblyInfo.cs` | ソース | アセンブリメタデータ |
| Assets/ | `src/Avalonia.Fonts.Inter/Assets/` | リソース | Interフォントファイル |
