# 通知設計書 12-インストールエラー通知

## 概要

本ドキュメントは、space-vimのインストールスクリプト（install.sh）において、エラーが発生した際に表示されるエラー通知（error関数）の設計を記載する。

### 本通知の処理概要

インストールエラー通知は、space-vimのインストールプロセスにおいて致命的なエラーが発生した際に、ユーザーに問題を通知し、スクリプトを終了させる機能である。

**業務上の目的・背景**：インストールプロセスでは、gitコマンドの不在やvim/neovimの不在など、処理を続行できない致命的なエラーが発生する可能性がある。この通知により、ユーザーはエラーの発生と原因を即座に認識でき、適切な対処（必要なソフトウェアのインストールなど）を行うことができる。

**通知の送信タイミング**：致命的なエラー条件が検出された時点（gitが存在しない、vim/neovimが存在しないなど）でerror関数が呼び出され、即座にスクリプトが終了する。

**通知の受信者**：インストールスクリプトを実行しているターミナルユーザー。標準エラー出力（stderr）に出力されるため、スクリプト実行者が直接確認する。

**通知内容の概要**：赤色のバツマーク記号（[✘]）とともに、エラーの説明メッセージが表示される。ANSIエスケープシーケンスを使用して視覚的にエラーを強調する。

**期待されるアクション**：ユーザーはエラーメッセージを確認し、不足している依存関係（git, vim, neovimなど）をインストールするか、問題を解決してから再度インストールスクリプトを実行する。

## 通知種別

ターミナル標準エラー出力（CLI通知）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期 |
| 優先度 | 高 |
| リトライ | 無し（即座に終了） |

### 送信先決定ロジック

スクリプト実行者のターミナルセッション（stderr）に直接出力される。送信先の動的決定は行わない。

## 通知テンプレート

### ターミナル出力の場合

| 項目 | 内容 |
|-----|------|
| 出力先 | stderr（標準エラー出力） |
| 形式 | ANSIカラーエスケープシーケンス付きテキスト |

### 本文テンプレート

```
\33[31m[✘]\33[0m ${メッセージ}${追加情報}
```

- `\33[31m` : 赤色開始
- `[✘]` : バツマーク記号
- `\33[0m` : 色リセット
- `${メッセージ}` : エラーメッセージ本文
- `${追加情報}` : オプションの追加情報

### 添付ファイル

該当なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| $1 | メッセージ本文 | 関数呼び出し時の第1引数 | Yes |
| $2 | 追加情報 | 関数呼び出し時の第2引数 | No |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| シェルスクリプト実行 | gitコマンド不在 | exists "git"がfalse | check_git関数内（154行目） |
| シェルスクリプト実行 | vim/neovim不在 | exists "vim"とexists "nvim"の両方がfalse | infer関数内（192行目） |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| なし | error関数が呼び出された場合、必ず通知が出力される |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[エラー条件検出] --> B[error関数呼び出し]
    B --> C[ANSIカラー付きエラーメッセージ生成]
    C --> D[msg関数でstderrに出力]
    D --> E[exit 1でスクリプト終了]
```

## データベース参照・更新仕様

### 参照テーブル一覧

該当なし（ファイルシステムベースの処理）

### 更新テーブル一覧

該当なし

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| gitコマンド不在 | gitがPATHに存在しない | ユーザーがgitをインストール |
| vim/neovim不在 | vim/neovimの両方がPATHに存在しない | ユーザーがvimまたはneovimをインストール |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0（即座に終了、リトライなし） |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | 制限なし |
| 1日あたり上限 | 制限なし |

### 配信時間帯

制限なし（スクリプト実行時に即座に出力）

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

- 機密情報は含まれない
- ローカルターミナルへの出力のみで外部通信なし
- ANSIエスケープシーケンスによる表示制御のみ

## 備考

- error関数は66-69行目で定義されている
- msg関数を内部で使用してstderrに出力する
- 赤色（\\33[31m）でバツマーク記号を表示し、視覚的にエラーを強調する
- `exit 1`によりスクリプトが終了するため、error関数呼び出し後の処理は実行されない

---

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

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

### 推奨読解順序

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

本通知はシンプルなシェルスクリプトの関数であり、複雑なデータ構造は使用していない。引数`$1`、`$2`のみを使用する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | install.sh | `install.sh` | 関数定義部分（56-69行目）を確認 |

**読解のコツ**: error関数は必ず`exit 1`でスクリプトを終了するため、呼び出し元に戻ることはない点に注意。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | install.sh | `install.sh` | main処理（214-220行目）からerror関数が呼び出される可能性のあるフローを追跡 |

**主要処理フロー**:
1. **214行目**: check_git関数でgitの存在確認 → 不在ならerror呼び出し
2. **218行目**: install関数 → infer関数 → vim/neovim不在ならerror呼び出し

#### Step 3: error関数の実装を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | install.sh | `install.sh` | error関数定義（66-69行目） |
| 3-2 | install.sh | `install.sh` | msg関数定義（56-58行目） |

**主要処理フロー**:
- **66-69行目**: error関数 - ANSIカラー付きエラーメッセージを出力し、exit 1で終了
- **67行目**: 赤色でバツマーク記号とメッセージを表示
- **68行目**: exit 1でスクリプト終了

#### Step 4: error関数の呼び出し箇所を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | install.sh | `install.sh` | check_git関数内（154行目） |
| 4-2 | install.sh | `install.sh` | infer関数内（192行目） |

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

```
main (214-220行目)
    |
    +-- check_git (151-155行目)
    |       +-- error (66-69行目) [gitが存在しない場合]
    |              +-- msg (56-58行目)
    |              +-- exit 1
    |
    +-- install (196-209行目)
            +-- infer (157-194行目)
                    +-- error (66-69行目) [vim/neovimが存在しない場合]
                           +-- msg (56-58行目)
                           +-- exit 1
```

### データフロー図

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

エラー条件検出 ──▶ error関数呼び出し ──▶ stderr (ターミナル)
                        |
                   ANSIカラー付き
                   エラーメッセージ生成
                        |
                   msg関数で出力
                        |
                   exit 1 ──▶ スクリプト終了
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| install.sh | `install.sh` | ソース | インストールスクリプト本体。error関数を含むすべての通知関数を定義 |
