# 機能設計書 32-git_current_user_name

## 概要

本ドキュメントは、Oh My Zshの`git_current_user_name`関数の機能設計について記載する。この関数は、Gitの設定から現在のユーザー名（`user.name`）を取得して出力する機能を提供する。

### 本機能の処理概要

**業務上の目的・背景**：Gitを使用した開発において、現在設定されているユーザー名を確認することは重要である。特に複数のGitアカウント（個人用・業務用等）を使い分けている場合、誤ったユーザー名でコミットしてしまうことを防ぐため、プロンプトでユーザー名を表示できることは有用である。また、チーム開発においてコミット作成者を即座に確認できることも作業効率向上に寄与する。

**機能の利用シーン**：開発者がターミナルで作業する際、プロンプトに現在のGitユーザー名を表示したいケースで利用される。複数のGitプロファイルを使い分ける開発者や、ペアプログラミング時にコミット者を明示したい場合に特に有用である。

**主要な処理内容**：
1. `git config user.name`コマンドを実行
2. Gitの設定階層（local > global > system）からユーザー名を取得
3. 取得したユーザー名を標準出力に出力

**関連システム・外部連携**：Gitコマンドラインツールおよびgit configシステムと連携する。

**権限による制御**：特になし。Gitリポジトリおよびgit configへの読み取りアクセス権があれば実行可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | ターミナルプロンプト | 結果表示画面 | プロンプト変数（$PROMPT、$RPROMPT等）に組み込んで使用 |

## 機能種別

データ取得・出力処理

## 入力仕様

### 入力パラメータ

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

### 入力データソース

- **Git設定**: `~/.gitconfig`（global）、`.git/config`（local）、システムgit設定からuser.nameを取得

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ユーザー名 | string | git config user.nameで設定されたユーザー名文字列 |

### 出力先

標準出力

## 処理フロー

### 処理シーケンス

```
1. git config user.nameを実行
   └─ __git_prompt_git関数を使用してGIT_OPTIONAL_LOCKS=0環境変数付きで実行
2. 取得した値を標準出力に出力
   └─ 設定がない場合は何も出力しない
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[git config user.name実行]
    B --> C{設定が存在?}
    C -->|Yes| D[ユーザー名を出力]
    D --> E[終了]
    C -->|No| E
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-32-1 | Git設定参照 | Gitの設定階層に従ってuser.nameを取得する | 常時 |
| BR-32-2 | 未設定時の動作 | user.nameが未設定の場合は何も出力しない | user.name未設定時 |
| BR-32-3 | リポジトリ外でも動作 | Gitリポジトリ外でもglobal設定から取得可能 | 常時 |

### 計算ロジック

特になし

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 暗黙のエラー | user.nameが設定されていない | 何も出力しない（正常終了） |

### リトライ仕様

リトライは実装されていない

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

該当なし

## パフォーマンス要件

プロンプト表示に使用されるため、可能な限り高速に実行される必要がある。`GIT_OPTIONAL_LOCKS=0`環境変数を設定することで、gitコマンドがロックを取得しないようにしている。

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

- `__git_prompt_git`ラッパー関数を使用して`GIT_OPTIONAL_LOCKS=0`を設定
- 標準エラー出力は`/dev/null`にリダイレクトしてエラーメッセージを非表示

## 備考

- `git_current_user_email`関数と対になる機能
- Git設定の優先順位: local > global > system

---

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

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

### 推奨読解順序

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

この関数はシンプルで、Git configシステムの理解が重要。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | git.zsh | `lib/git.zsh` | 関数の位置と依存関係を確認 |

**読解のコツ**: `git config`コマンドの動作（設定階層の優先順位）を理解することが重要。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | git.zsh | `lib/git.zsh` | `git_current_user_name`関数の定義（350-352行目） |

**主要処理フロー**:
1. **350行目**: 関数定義開始とコメント
2. **351行目**: `__git_prompt_git config user.name`を実行して結果を出力
3. **352行目**: 関数定義終了

#### Step 3: ヘルパー関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | git.zsh | `lib/git.zsh` | `__git_prompt_git`関数（10-12行目） |

**主要処理フロー**:
- **11行目**: `GIT_OPTIONAL_LOCKS=0`を設定してgitコマンドを実行

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

```
git_current_user_name()
    │
    └─ __git_prompt_git config user.name
           │
           └─ command git config user.name (GIT_OPTIONAL_LOCKS=0環境変数付き)
```

### データフロー図

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

なし ───────▶ git config user.name ───────▶ ユーザー名文字列
                      │
                      ▼
               Git設定ファイル読み取り
               (local > global > system)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| git.zsh | `lib/git.zsh` | ソース | git_current_user_name関数の定義元 |
| oh-my-zsh.sh | `oh-my-zsh.sh` | ソース | lib/git.zshを読み込むメインスクリプト |
| .gitconfig | `~/.gitconfig` | 設定 | globalレベルのGit設定ファイル |
| config | `.git/config` | 設定 | localレベルのGit設定ファイル |
