# 画面設計書 4-エラービュー

## 概要

本ドキュメントは、Ghosttyターミナルエミュレータのエラービュー画面の設計について記載する。エラービューは、アプリケーション起動時や動作中に致命的なエラーが発生した際に表示される画面である。

### 本画面の処理概要

エラービューは、Ghosttyの初期化や動作中に回復不能なエラーが発生した場合に、ユーザーにエラー状態を通知し、適切な対処方法を案内する。

**業務上の目的・背景**：アプリケーションが正常に動作できない状態であることをユーザーに明確に伝え、ログの確認やアプリケーションの再起動を促す。致命的エラーは設定ファイルの重大な問題、メモリ不足、GPUの初期化失敗などが原因となりうる。

**画面へのアクセス方法**：
- アプリケーション起動時に致命的エラーが発生した場合に自動表示
- Ghostty.App.readinessが`.error`状態の場合に表示

**主要な操作・処理内容**：
1. エラー状態の視覚的表示（アプリアイコンとエラーメッセージ）
2. ログ確認の案内
3. アプリケーション再起動の案内

**画面遷移**：
- アプリ起動（エラー発生） → エラービュー表示
- この画面からの遷移はなし（アプリの再起動が必要）

**権限による表示制御**：特になし。エラー発生時は全てのユーザーに同一の画面が表示される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 37 | macOSアプリ | 主機能 | 致命的エラー発生時のエラー画面表示 |

## 画面種別

エラー通知画面（静的表示）

## URL/ルーティング

N/A（ネイティブデスクトップアプリケーション）

## 入出力項目

| 項目名 | 入力/出力 | データ型 | 必須 | 説明 |
|--------|----------|----------|------|------|
| エラー状態 | 入力 | ghostty.readiness | はい | .error状態であること |

## 表示項目

| 項目名 | 表示位置 | データ型 | 説明 |
|--------|----------|----------|------|
| アプリアイコン | 左 | Image | 128x128のアプリケーションアイコン |
| エラータイトル | 右上 | Text | "Oh, no." のタイトルテキスト |
| エラーメッセージ | 右下 | Text | 対処方法を含む説明テキスト |

## イベント仕様

### 1-エラー状態検出

TerminalViewのbody変数内でghostty.readinessの状態を監視し、`.error`の場合にErrorViewを表示する。

**処理フロー**：
1. `switch ghostty.readiness`で状態を判定
2. `case .error`の場合、`ErrorView()`を返す
3. ErrorViewが画面に表示される

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

N/A（本アプリケーションはデータベースを使用しない）

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|----------|
| MSG001 | エラー | "Oh, no." | 常に表示 |
| MSG002 | 情報 | "Something went fatally wrong.\nCheck the logs and restart Ghostty." | 常に表示 |

## 例外処理

| 例外状況 | 処理内容 |
|----------|----------|
| 致命的エラー発生 | ErrorViewを表示し、ユーザーにログ確認と再起動を案内 |

## 備考

- シンプルな静的ビューとして実装
- SwiftUIのPreviewProvider対応
- パディングが設定されている（`.padding()`）
- アプリアイコン画像は"AppIconImage"リソースを使用

---

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

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

### 推奨読解順序

#### Step 1: ビュー構造を理解する

エラービューのSwiftUI実装を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | ErrorView.swift | `macos/Sources/Features/Terminal/ErrorView.swift` | ErrorView構造体（3-18行目） |

**読解のコツ**: 非常にシンプルなSwiftUIビュー。HStackで左にアイコン、右にテキストを配置。

#### Step 2: 呼び出し元を理解する

エラービューがいつ表示されるかを理解。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | TerminalView.swift | `macos/Sources/Features/Terminal/TerminalView.swift` | body変数のswitch文（67-73行目） |

**主要処理フロー**:
1. **68行目**: `switch ghostty.readiness`で状態判定
2. **69行目**: `case .loading` → "Loading"テキスト表示
3. **70-71行目**: `case .error` → `ErrorView()`表示
4. **72行目**: `case .ready` → 通常のターミナル表示

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

```
TerminalView
    │
    └─ switch ghostty.readiness
           │
           ├─ .loading → Text("Loading")
           │
           ├─ .error → ErrorView
           │              │
           │              └─ HStack
           │                    ├─ Image("AppIconImage")
           │                    └─ VStack
           │                          ├─ Text("Oh, no.")
           │                          └─ Text("Something went fatally wrong...")
           │
           └─ .ready → ZStack (通常のターミナル)
```

### データフロー図

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

Ghostty.App.readiness ───▶ TerminalView.body ───────────▶ ErrorView表示
(.error状態)                   │
                              ▼
                        switch文で分岐
                              │
                              ▼
                        ErrorView()を返す
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| ErrorView.swift | `macos/Sources/Features/Terminal/ErrorView.swift` | ソース | エラー表示のSwiftUIビュー |
| TerminalView.swift | `macos/Sources/Features/Terminal/TerminalView.swift` | ソース | ErrorViewの呼び出し元 |
| AppIconImage | リソース | 画像 | アプリケーションアイコン |
