# 機能設計書 66-色変数初期化

## 概要

本ドキュメントは、Oh My Zshのテーマ・外観機能における色変数初期化の設計を記載する。この機能は、zsh組み込みの`colors`関数を使用して、`$fg`、`$bg`、`$color`、`$reset_color`等の色変数を定義し、プロンプトやスクリプトで色を簡単に使用できるようにする。

### 本機能の処理概要

**業務上の目的・背景**：ターミナルで色を使用する場合、ANSIエスケープシーケンスを直接記述するのは煩雑で可読性が低い。この機能は、zsh組み込みの`colors`関数をロードして、`$fg[red]`、`$bg[blue]`のような直感的な連想配列形式で色を指定できるようにする。これにより、テーマやプラグインの開発者は、読みやすく保守しやすいコードでカラフルなプロンプトや出力を作成できる。

**機能の利用シーン**：
- カスタムプロンプトで色付きテキストを表示したい場合
- プラグインやスクリプトでステータスメッセージに色を付けたい場合
- テーマ開発で統一された色名を使用したい場合

**主要な処理内容**：
1. `colors`関数を自動ロードして実行する
2. `prompt_subst`オプションを有効にする
3. Gitプロンプト関連のデフォルト変数を設定する
4. Rubyプロンプト関連のデフォルト変数を設定する

**関連システム・外部連携**：
- zsh組み込みの`colors`関数（autoload）
- ターミナルエミュレータのANSI色サポート

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

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | CLIコマンドのため関連画面なし |

## 機能種別

初期化処理 / 変数定義

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| なし | - | - | 初期化処理のため入力パラメータなし | - |

### 入力データソース

- zsh組み込み: `colors`関数

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| $fg | associative array | フォアグラウンド色の連想配列 |
| $bg | associative array | バックグラウンド色の連想配列 |
| $color | associative array | 色名からエスケープシーケンスへのマッピング |
| $reset_color | string | 色リセットのエスケープシーケンス |
| $bold_color | string | 太字のエスケープシーケンス |
| $fg_bold | associative array | 太字フォアグラウンド色の連想配列 |
| $fg_no_bold | associative array | 通常フォアグラウンド色の連想配列 |

### 出力先

- シェル変数（グローバルスコープ）

## 処理フロー

### 処理シーケンス

```
1. colors関数のロードと実行
   └─ autoload -U colors && colors
2. prompt_substオプション有効化
   └─ setopt prompt_subst
3. Gitプロンプトデフォルト変数設定
   ├─ ZSH_THEME_GIT_PROMPT_PREFIX
   ├─ ZSH_THEME_GIT_PROMPT_SUFFIX
   ├─ ZSH_THEME_GIT_PROMPT_DIRTY
   └─ ZSH_THEME_GIT_PROMPT_CLEAN
4. Rubyプロンプトデフォルト変数設定
   ├─ ZSH_THEME_RUBY_PROMPT_PREFIX
   └─ ZSH_THEME_RUBY_PROMPT_SUFFIX
```

### フローチャート

```mermaid
flowchart TD
    A[theme-and-appearance.zsh読み込み] --> B[autoload -U colors]
    B --> C[colors実行]
    C --> D[$fg, $bg, $reset_color等定義]
    D --> E[setopt prompt_subst]
    E --> F[Gitプロンプト変数設定]
    F --> G[Rubyプロンプト変数設定]
    G --> H[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | colors自動ロード | zsh組み込みのcolors関数を-Uオプション（エイリアス展開抑制）でロード | 常時 |
| BR-02 | prompt_subst有効化 | プロンプト内での変数・コマンド展開を有効にする | 常時 |
| BR-03 | デフォルト値提供 | Gitプロンプト関連変数のデフォルト値を提供 | テーマ未設定時 |

### 計算ロジック

該当なし

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

該当なし（データベースを使用しない）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | - | エラーは発生しない設計（colors関数は常に利用可能） | - |

### リトライ仕様

該当なし

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

該当なし

## パフォーマンス要件

- シェル起動時に1回のみ実行されるため、ミリ秒単位で完了すれば十分

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

- 特になし

## 備考

- `colors`関数はzshの標準機能であり、すべてのzsh環境で利用可能
- 定義される色名: black, red, green, yellow, blue, magenta, cyan, white
- 256色やTrue Colorのサポートは別途`spectrum.zsh`で提供

---

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

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

### 推奨読解順序

#### Step 1: colorsの読み込みとprompt_substを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | theme-and-appearance.zsh | `lib/theme-and-appearance.zsh` | 1-5行目の初期化処理 |

**主要処理フロー**:
- **2行目**: `autoload -U colors && colors` - colors関数をロードして実行
- **5行目**: `setopt prompt_subst` - プロンプト内での変数展開を有効化

**読解のコツ**:
- `autoload -U`は関数をロードし、`-U`はエイリアス展開を抑制
- `colors`関数を実行すると、`$fg`、`$bg`、`$reset_color`等が定義される
- `prompt_subst`オプションがないとプロンプト内で`$fg[red]`等が展開されない

#### Step 2: Gitプロンプト変数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | theme-and-appearance.zsh | `lib/theme-and-appearance.zsh` | 7-14行目のGit/Rubyプロンプト変数 |

**主要処理フロー**:
- **8行目**: `ZSH_THEME_GIT_PROMPT_PREFIX="git:("` - Gitプロンプトの接頭辞
- **9行目**: `ZSH_THEME_GIT_PROMPT_SUFFIX=")"` - Gitプロンプトの接尾辞
- **10行目**: `ZSH_THEME_GIT_PROMPT_DIRTY="*"` - ダーティ状態の表示
- **11行目**: `ZSH_THEME_GIT_PROMPT_CLEAN=""` - クリーン状態の表示
- **12-13行目**: Rubyプロンプトの接頭辞・接尾辞

**読解のコツ**:
- これらはデフォルト値であり、テーマで上書き可能
- `git_prompt_info`関数（lib/git.zsh）でこれらの変数が使用される

#### Step 3: zsh colorsの仕様を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | - | zshソースコード | zsh colors関数の仕様（外部参照） |

**読解のコツ**:
- `colors`関数は以下の変数を定義:
  - `$color`: 色名からエスケープコードへのマッピング
  - `$fg`: フォアグラウンド色（例: `$fg[red]` = `\e[31m`）
  - `$bg`: バックグラウンド色（例: `$bg[blue]` = `\e[44m`）
  - `$fg_bold`: 太字フォアグラウンド色
  - `$reset_color`: 色リセット（`\e[0m`）

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

```
oh-my-zsh.sh (エントリポイント)
    │
    └─ source lib/theme-and-appearance.zsh
           │
           ├─ autoload -U colors
           │      └─ zsh組み込みcolors関数をロード
           │
           ├─ colors
           │      └─ $fg, $bg, $reset_color等を定義
           │
           ├─ setopt prompt_subst
           │
           └─ ZSH_THEME_GIT_PROMPT_* 変数設定
```

### データフロー図

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

zsh colors関数 ────────────────▶                                ┌─ $fg[color]
                                  autoload + colors実行         │   "red" → "\e[31m"
                                  色変数定義 ──────────────────▶├─ $bg[color]
                                                                │   "blue" → "\e[44m"
                                                                └─ $reset_color
                                                                    "\e[0m"

デフォルト値 ─────────────────▶  変数代入 ─────────────────────▶ ZSH_THEME_GIT_PROMPT_*
  "git:(", ")", "*", ""
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| theme-and-appearance.zsh | `lib/theme-and-appearance.zsh` | ソース | 色変数初期化およびテーマ・外観設定のメイン実装 |
| git.zsh | `lib/git.zsh` | ソース | Gitプロンプト関数（ZSH_THEME_GIT_PROMPT_*を使用） |
| spectrum.zsh | `lib/spectrum.zsh` | ソース | 256色サポート（拡張色機能） |
