# 機能設計書 90-chruby_prompt_info

## 概要

本ドキュメントは、chrubyで管理されている現在のRubyバージョンをプロンプト表示用に取得する`chruby_prompt_info`関数の機能設計について記述する。

### 本機能の処理概要

chrubyバージョン管理ツールで現在選択されているRubyバージョン名を取得し、プロンプト表示用にフォーマットして出力する関数である。current_ruby関数を使用してバージョン情報を取得する。

**業務上の目的・背景**：chrubyはシンプルなRubyバージョン管理ツールであり、rbenvやRVMの代替として人気がある。プロンプトに現在のRubyバージョンを表示することで、開発者がどのRubyバージョンで作業しているかを常に把握できる。ruby_prompt_info関数からのフォールバック先として、またはテーマから直接呼び出される形で使用される。

**機能の利用シーン**：chrubyプラグインが有効化されている環境で、テーマがプロンプトを構築する際に呼び出される。`$(chruby_prompt_info)`または`$(ruby_prompt_info)`の形式で使用される。

**主要な処理内容**：
1. current_ruby関数を呼び出して現在のRubyバージョンを取得
2. 結果の%文字をエスケープ
3. エスケープ済み文字列を出力

**関連システム・外部連携**：chrubyコマンド。

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

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | 画面関連なし（関数） |

## 機能種別

プロンプト情報取得

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| なし | - | - | 引数は受け取らない | - |

### 入力データソース

- current_ruby関数の出力
- chrubyコマンドの出力（current_ruby経由）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 標準出力 | 文字列 | Rubyバージョン名（例: "ruby-3.2.0"、"system"） |

### 出力先

- 標準出力：プロンプト埋め込み用文字列

## 処理フロー

### 処理シーケンス

```
1. current_ruby関数呼び出し
   └─ chrubyコマンドの出力から現在のバージョンを取得
2. %エスケープ処理
   └─ 出力内の%を%%に変換
3. 結果出力
   └─ echoで出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[current_ruby呼び出し]
    B --> C[%文字エスケープ]
    C --> D[結果をecho]
    D --> E[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-90-001 | システムRuby表示 | chrubyで選択されていない場合は"system"を出力 | chruby出力に*がない場合 |
| BR-90-002 | %エスケープ | 出力内の%を%%にエスケープ | 常時 |
| BR-90-003 | プラグイン依存 | chrubyプラグインが有効でない場合はダミー関数が使用される | プラグイン未読込時 |

### 計算ロジック

%エスケープ処理：
- `${$(current_ruby):gs/%/%%}` - current_ruby出力の%を%%に置換

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

### 操作別データベース影響一覧

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| - | - | - | データベース操作なし |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | chruby不在 | chrubyがインストールされていない | ダミー関数がreturn 1を返す |

### リトライ仕様

リトライは行わない。

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

トランザクション管理なし。

## パフォーマンス要件

- プロンプト表示のたびに呼び出されるため、高速に完了すること
- chrubyコマンドの実行を含むため、数十ミリ秒程度

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

- %文字のエスケープを行い、プロンプトインジェクションを防止

## 備考

- chrubyプラグイン（plugins/chruby/chruby.plugin.zsh）に実装される
- lib/prompt_info_functions.zshにダミー関数が定義されている
- ruby_prompt_infoからのフォールバック先として使用される

---

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

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

### 推奨読解順序

#### Step 1: chruby_prompt_info関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | chruby.plugin.zsh | `plugins/chruby/chruby.plugin.zsh` | 71-73行目: chruby_prompt_info関数 |

**読解のコツ**: `${$(...):gs/%/%%}`はコマンド置換の結果に対してグローバル置換を適用する構文。

**主要処理フロー**:
- **71行目**: 関数定義
- **72行目**: current_ruby関数を呼び出し、結果の%を%%にエスケープしてecho

#### Step 2: current_ruby関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | chruby.plugin.zsh | `plugins/chruby/chruby.plugin.zsh` | 61-69行目: current_ruby関数 |

**主要処理フロー**:
- **62行目**: ローカル変数ruby定義
- **63行目**: chrubyコマンドで*がついている行を取得、空白と*を削除
- **64-68行目**: *がついた行が1つあればそれを出力、なければ"system"を出力

#### Step 3: chrubyプラグインの読み込みを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | chruby.plugin.zsh | `plugins/chruby/chruby.plugin.zsh` | 1-54行目: chruby読み込み処理 |

**主要処理フロー**:
- **3-16行目**: _source-from-omz-settings - zstyleで設定されたパスから読み込み
- **18-23行目**: _source-from-default-location - デフォルトパスから読み込み
- **25-44行目**: _source-from-homebrew - Homebrewインストールパスから読み込み
- **47-49行目**: 上記3つを順番に試行

#### Step 4: ダミー関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | prompt_info_functions.zsh | `lib/prompt_info_functions.zsh` | 13-26行目: ダミー関数定義 |

**主要処理フロー**:
- **13行目**: chruby_prompt_infoを含む複数関数のダミー定義
- **25行目**: return 1でfalseを返す
- chrubyプラグイン読み込み時に実際の実装で上書きされる

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

```
chruby_prompt_info()  ← 本機能
    │
    └─ current_ruby()
           │
           └─ chruby (外部コマンド)
                  └─ *がついた行を取得
```

### データフロー図

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

chruby出力 ──────────────▶ current_ruby() ─────────────▶ バージョン名
(* ruby-3.2.0)                 │                        or "system"
                               │
                               └─▶ chruby_prompt_info()
                                        │
                                        └─▶ %エスケープ済み出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| chruby.plugin.zsh | `plugins/chruby/chruby.plugin.zsh` | プラグイン | chruby統合、chruby_prompt_info実装 |
| prompt_info_functions.zsh | `lib/prompt_info_functions.zsh` | ソース | ダミー関数定義、ruby_prompt_info |
| chruby.sh | `/usr/local/share/chruby/chruby.sh` | 外部 | chruby本体 |
| auto.sh | `/usr/local/share/chruby/auto.sh` | 外部 | chruby自動切替 |
