# 帳票設計書 8-show-config

## 概要

本ドキュメントは、Ghosttyターミナルエミュレータの `show-config` コマンドが出力する設定レポートの設計書です。

### 本帳票の処理概要

`show-config` コマンドは、現在の設定を有効なGhostty設定ファイル形式で標準出力に表示するCLIレポートです。デフォルトからの変更点のみ、または全設定を表示できます。

**業務上の目的・背景**：ユーザーが現在の有効な設定を確認し、設定のバックアップや他環境への移行、トラブルシューティングに活用できるようにします。`--docs`オプションで各オプションの説明も確認でき、設定ファイル作成の参考になります。

**帳票の利用シーン**：
- 現在の設定確認
- 設定のバックアップ作成
- デフォルト設定の確認と学習
- 設定オプションのドキュメント参照
- 設定ファイルの雛形生成

**主要な出力内容**：
1. 設定キー名
2. 設定値
3. 設定の説明（--docs指定時）

**帳票の出力タイミング**：`ghostty +show-config` コマンド実行時

**帳票の利用者**：エンドユーザー、システム管理者、開発者

## 帳票種別

CLIレポート（設定ファイル形式テキスト）

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| - | CLI | `ghostty +show-config` | 変更のみ出力 |
| - | CLI | `ghostty +show-config --default` | デフォルト設定出力 |
| - | CLI | `ghostty +show-config --default --docs` | ドキュメント付き出力 |

## 出力形式

### 基本仕様

| 項目 | 内容 |
|-----|------|
| ファイル形式 | テキスト（stdout、設定ファイル形式） |
| 用紙サイズ | N/A |
| 向き | N/A |
| ファイル名 | N/A（標準出力） |
| 出力方法 | 標準出力への表示 |
| 文字コード | UTF-8 |

### 端末出力固有設定

| 項目 | 内容 |
|-----|------|
| ハイパーリンク | 無 |
| カラー出力 | 無 |
| インタラクティブ | 無 |

## 帳票レイアウト

### レイアウト概要

#### 通常出力モード
```
┌─────────────────────────────────────┐
│  key = value                         │
│  key = value                         │
│  ...                                │
└─────────────────────────────────────┘
```

#### ドキュメント付き出力モード（--docs）
```
┌─────────────────────────────────────┐
│  # 説明文                            │
│  # 説明文（複数行）                   │
│  key = value                         │
│                                     │
│  # 説明文                            │
│  key = value                         │
│  ...                                │
└─────────────────────────────────────┘
```

### ヘッダー部

ヘッダーはありません。

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | コメント | 設定の説明 | Configフィールドdoc | "# {説明}" (--docs時) |
| 2 | 設定キー | 設定項目名 | Configフィールド名 | "{key}" |
| 3 | 区切り | 等号記号 | 固定 | " = " |
| 4 | 設定値 | 設定の値 | Config値 | "{value}" |

### フッター部

フッターはありません。

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| --default | デフォルト設定を表示 | No |
| --changes-only | 変更された設定のみ表示（デフォルト: true） | No |
| --docs | ドキュメント付き出力 | No |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| 1 | Config構造体フィールド定義順 | 定義順 |

### 改ページ条件

改ページなし（連続出力）

## データベース参照仕様

### 参照テーブル一覧

データベース参照はありません。

### データ取得元詳細

| 取得元 | 用途 | 取得方法 |
|-------|------|---------|
| Config.load | ユーザー設定 | 設定ファイル読み込み |
| Config.default | デフォルト設定 | コンパイル時デフォルト |
| configpkg.FileFormatter | 設定フォーマット | 設定値のシリアライズ |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| changed | config != default | - | 変更検出 |

## 処理フロー

### 出力フロー

```mermaid
flowchart TD
    A[コマンド実行] --> B[オプション解析]
    B --> C{--default指定?}
    C -->|Yes| D[Config.default読み込み]
    C -->|No| E[Config.load読み込み]
    D --> F[FileFormatter初期化]
    E --> F
    F --> G[stdoutライター初期化]
    G --> H[configfmt.format呼び出し]
    H --> I[各設定項目を出力]
    I --> J{--docs指定?}
    J -->|Yes| K[説明文も出力]
    J -->|No| L[値のみ出力]
    K --> M{--changes-only?}
    L --> M
    M -->|Yes| N[変更項目のみ出力]
    M -->|No| O[全項目出力]
    N --> P[バッファフラッシュ]
    O --> P
    P --> Q[終了コード0を返却]
```

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| 設定読み込み失敗 | 設定ファイル不正 | エラー返却 | プロセス終了 |
| 出力失敗 | stdoutへの書き込みエラー | なし（エラー返却） | プロセス終了 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | Config全フィールド（数百項目） |
| 目標出力時間 | 即時（1秒未満） |
| 同時出力数上限 | N/A |

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

- 設定ファイルの読み取り権限が必要
- 出力には設定値のみ含まれる
- パスワード等の機密情報は含まれない設計

## 備考

- 出力は有効なGhostty設定ファイル形式
- `--changes-only`はデフォルトでtrue（変更のみ表示）
- `--default`指定時は`--changes-only`は無効
- 新規ユーザーには`ghostty +show-config --default --docs`を推奨

---

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

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

### 推奨読解順序

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

設定構造とフォーマッタを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | show_config.zig | `src/cli/show_config.zig` | Options構造体（8-29行目） |
| 1-2 | Config.zig | `src/config/Config.zig` | Config構造体の全フィールド |
| 1-3 | config.zig | `src/config.zig` | FileFormatter定義 |

**読解のコツ**: Options構造体の各フィールドがCLIオプションに対応し、FileFormatterが設定値のシリアライズを担当します。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | show_config.zig | `src/cli/show_config.zig` | run関数（58-86行目）がエントリーポイント |

**主要処理フロー**:
1. **59-66行目**: オプション解析
2. **68行目**: Config読み込み（--defaultで分岐）
3. **71-76行目**: FileFormatter初期化
4. **80-83行目**: 出力処理

#### Step 3: 設定フォーマッタを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | config.zig | `src/config.zig` | FileFormatterの実装 |
| 3-2 | Config.zig | `src/config/Config.zig` | 各フィールドの型とデフォルト値 |

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

```
ghostty (main)
    │
    └─ Action.run (ghostty.zig:99)
           │
           └─ show_config.run (show_config.zig:58)
                  │
                  ├─ args.parse (オプション解析)
                  │
                  ├─ Config.default/Config.load (設定読み込み)
                  │
                  ├─ configpkg.FileFormatter初期化
                  │      │
                  │      ├─ config (設定参照)
                  │      ├─ changed (変更フラグ)
                  │      └─ docs (ドキュメントフラグ)
                  │
                  └─ configfmt.format (フォーマット出力)
                         │
                         └─ stdout出力
```

### データフロー図

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

設定ファイル ───▶ Config.load()
                      │
               または │
                      │
デフォルト設定 ───▶ Config.default()
                      │
                      ▼
              FileFormatter初期化
                      │
    ┌─────────────────┼─────────────────┐
    ▼                 ▼                 ▼
config           changed flag      docs flag
(設定値)          (変更検出)        (ドキュメント)
    │                 │                 │
    └──────────▶ format() ◀─────────────┘
                      │
                      ▼
               設定ファイル形式
                      │
                      ▼
                  stdout
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| show_config.zig | `src/cli/show_config.zig` | ソース | メイン処理 |
| ghostty.zig | `src/cli/ghostty.zig` | ソース | Actionディスパッチャー |
| args.zig | `src/cli/args.zig` | ソース | 引数解析ユーティリティ |
| config.zig | `src/config.zig` | ソース | 設定モジュールエントリ |
| Config.zig | `src/config/Config.zig` | ソース | 設定構造体定義 |
