# 画面設計書 14-omz reload

## 概要

本ドキュメントは、zshセッションを再起動するCLIコマンド `omz reload` の画面設計書です。

### 本画面の処理概要

`omz reload` コマンドは、現在のzshセッションを再起動（リロード）するためのコマンドインターフェースです。

**業務上の目的・背景**：Oh My Zshの設定変更（.zshrcの編集、プラグインの有効化/無効化、テーマの変更など）を行った後、変更を反映させるにはzshセッションを再起動する必要があります。手動で`exec zsh`を実行する代わりに、本コマンドを使用することで、補完キャッシュのクリアも含めた適切なリロード処理を簡単に実行できます。多くのomzコマンド（plugin enable/disable、theme set、update等）はこの関数を内部的に呼び出して自動リロードを行います。

**画面へのアクセス方法**：ターミナルで `omz reload` を実行することでアクセスします。

**主要な操作・処理内容**：
1. 補完キャッシュファイル（zcompdump）を削除
2. 現在のzshパスを特定
3. ログインシェルかどうかを判定
4. exec コマンドでzshプロセスを置き換え

**画面遷移**：
- 遷移元: omzコマンドのサブコマンドとして呼び出し、または他のomzコマンド（plugin enable/disable、theme set等）から内部呼び出し
- 遷移先: 新しいzshセッション（プロセス置き換えのため、元のセッションには戻らない）

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 6 | omzコマンド | 主機能 | omzコマンドの統合CLIインターフェースを通じてリロードを実行 |
| 17 | omz reload | 主機能 | 補完キャッシュを削除してzshセッションをリスタート |
| 5 | 補完キャッシュ管理 | 補助機能 | zcompdumpファイルを削除して補完キャッシュをクリア |

## 画面種別

コマンドラインインターフェース

## URL/ルーティング

```
omz reload
```

引数は不要です。

## 入出力項目

### 入力項目

なし

### 出力項目

なし（プロセス置き換えのため、出力前にセッションが終了）

## 表示項目

本コマンドは出力なしでセッションを即座に再起動するため、表示項目はありません。

## イベント仕様

### 1-補完キャッシュ削除

zshの補完キャッシュファイルを削除します。

- `$_comp_dumpfile` と `$ZSH_COMPDUMP` を削除
- rm -f で存在しない場合もエラーにしない
- キャッシュ削除により、次回起動時に補完が再構築される

### 2-zshパスの特定

現在実行中のzshのパスを特定します。

- `$ZSH_ARGZERO` が設定されていればそれを使用
- 設定されていなければ `$functrace[-1]` から取得（古いzshバージョン対応）
- 先頭の`-`はログインシェルを示す

### 3-ログインシェル判定

ログインシェルとして起動するかどうかを判定します。

- `$zsh` が `-` で始まる場合はログインシェル
- `-o login` オプションが設定されている場合もログインシェル
- 上記のいずれかの場合は `exec -l` を使用

### 4-セッション再起動

exec コマンドでzshプロセスを置き換えます。

- ログインシェルの場合: `exec -l "${zsh#-}"`
- 通常シェルの場合: `exec "$zsh"`
- exec により現在のプロセスが新しいzshに置き換わる

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

本コマンドはデータベースを使用しません。

### 操作別ファイルシステム影響一覧

| 操作 | 対象 | 操作種別 | 概要 |
|------|------|---------|------|
| キャッシュ削除 | $_comp_dumpfile | DELETE | 補完キャッシュファイルを削除 |
| キャッシュ削除 | $ZSH_COMPDUMP | DELETE | 補完キャッシュファイルを削除 |

## メッセージ仕様

本コマンドはメッセージを出力しません。即座にセッションを再起動します。

## 例外処理

| 例外状態 | 処理内容 |
|----------|----------|
| キャッシュファイルなし | 正常に継続（rm -fのため） |
| exec失敗 | シェルがエラーを報告 |

## 備考

- 本コマンドは `exec` を使用するため、コマンド実行後は元のセッションには戻りません
- 他のomzコマンド（plugin enable/disable、theme set、update）が内部的に呼び出します
- 対話セッションでない場合、一部のコマンドはリロードをスキップします（`[[ ! -o interactive ]] || _omz::reload`）
- 補完キャッシュの削除により、次回起動時に `compinit` が実行されます

---

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

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

### 推奨読解順序

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

まず、リロード処理で使用される主要な変数を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | cli.zsh | `lib/cli.zsh` | $_comp_dumpfile、$ZSH_COMPDUMP、$ZSH_ARGZEROの役割 |

**読解のコツ**: `$_comp_dumpfile`はcompinit時に設定される補完キャッシュのパスです。`$ZSH_ARGZERO`はzsh 5.3以降で利用可能です。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | cli.zsh | `lib/cli.zsh` | omz関数（3-21行目）がエントリーポイント |

**主要処理フロー**:
1. **行3-8**: コマンドライン引数の確認
2. **行15-18**: サブコマンド関数の存在確認
3. **行20**: _omz::reloadを呼び出し

#### Step 3: reloadコマンドの実装を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | cli.zsh | `lib/cli.zsh` | `_omz::reload`関数（735-743行目）がメインの実装 |

**主要処理フロー**:
- **行737**: 補完キャッシュファイルを削除
- **行740**: ZSH_ARGZEROまたはfunctraceからzshパスを取得
- **行742**: ログインシェル判定とexec実行

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

```
omz reload
    │
    ├─ omz [lib/cli.zsh:3-21]
    │      └─ _omz::reload [lib/cli.zsh:735-743]
    │             │
    │             ├─ rm -f (補完キャッシュ削除)
    │             │
    │             └─ exec zsh (セッション再起動)
    │
    └─ _omz [lib/cli.zsh:23-112] (補完関数)

※ 他のコマンドからの内部呼び出し:
_omz::plugin::enable ──▶ _omz::reload
_omz::plugin::disable ─▶ _omz::reload
_omz::theme::set ──────▶ _omz::reload
_omz::update ──────────▶ セッション再起動（同様のロジック）
```

### データフロー図

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

(なし) ─────────▶ rm -f $_comp_dumpfile $ZSH_COMPDUMP
                        │
                        ▼
                  zshパス取得 ($ZSH_ARGZERO or functrace)
                        │
                        ▼
                  ログインシェル判定
                        │
                        ▼
                  exec zsh ───────────────────────────▶ 新しいzshセッション
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| cli.zsh | `lib/cli.zsh` | ソース | omz reloadコマンドの実装 |
| compfix.zsh | `lib/compfix.zsh` | ソース | 補完関連の初期化（$_comp_dumpfileの設定元） |
| oh-my-zsh.sh | `oh-my-zsh.sh` | ソース | $ZSH_COMPDUMPのデフォルト設定 |
| .zcompdump | `$ZDOTDIR/.zcompdump` | キャッシュ | 補完キャッシュファイル |
