# バッチ設計書 3-uninstall.sh

## 概要

本ドキュメントは、space-vimのアンインストールスクリプト `uninstall.sh` の設計仕様を記載する。

### 本バッチの処理概要

このバッチは、space-vim環境をシステムから削除するためのシェルスクリプトである。ユーザーに確認プロンプトを表示した上で、space-vimによって作成された設定ファイルとディレクトリを削除する。

**業務上の目的・背景**：ユーザーがspace-vimを利用しなくなった場合や、別のvim設定に切り替えたい場合に、クリーンにspace-vim環境を削除できるようにする。手動でファイルを探して削除する手間を省き、確実にすべての関連ファイルを削除することで、システムを元の状態に戻すことができる。確認プロンプトにより誤操作を防止する。

**バッチの実行タイミング**：ユーザーがspace-vimを削除したい時に手動実行する。

**主要な処理内容**：
1. ユーザーへの確認プロンプト表示
2. ユーザーの同意確認（y/n入力）
3. 同意した場合、以下のファイル/ディレクトリを削除：
   - ~/.vimrc
   - ~/.config/nvim/init.vim
   - ~/.spacevim
   - ~/.space-vim/

**前後の処理との関連**：このスクリプトは単独で実行される削除処理であり、install.shまたはMakefileでインストールされた環境を削除する。削除後は、ユーザーが再インストールを行うまでspace-vimは使用できない。

**影響範囲**：ユーザーのホームディレクトリ配下のspace-vim関連ファイル（`.vimrc`、`~/.config/nvim/init.vim`、`.spacevim`、`.space-vim/`）が削除される。

## バッチ種別

アンインストール処理 / 環境削除

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（アンインストール時のみ） |
| 実行時刻 | 任意 |
| 実行曜日 | 任意 |
| 実行日 | 任意 |
| トリガー | 手動実行 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| space-vimインストール済み | space-vimが事前にインストールされていること |
| シェル環境 | bashが利用可能であること |

### 実行可否判定

特別な実行可否判定はない。削除対象ファイルが存在しない場合でもエラーにはならない（rm -f, rm -rf オプションにより）。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | 本スクリプトはコマンドライン引数を受け付けない |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| 標準入力 | 文字 | ユーザーからのy/n入力 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | 処理結果メッセージ |

### 出力ファイル仕様

本バッチはファイルを出力せず、既存ファイルを削除する。

| 項目 | 内容 |
|-----|------|
| 削除対象 | ~/.vimrc, ~/.config/nvim/init.vim, ~/.spacevim, ~/.space-vim/ |

## 処理フロー

### 処理シーケンス

```
1. 確認プロンプトの表示
   └─ "Uninstall (y/n) ?" を表示
2. ユーザー入力の取得
   └─ 1文字の入力を待機（-n 1）
3. 入力の判定
   └─ Y/y の場合: アンインストール実行
   └─ N/n の場合: スキップ
   └─ その他: 再度入力を求める（ループ）
4. アンインストール実行（uninstall関数）
   └─ rm -f $HOME/.vimrc
   └─ rm -f $HOME/.config/nvim/init.vim
   └─ rm -f $HOME/.spacevim
   └─ rm -rf $HOME/.space-vim
5. 結果メッセージの表示
   └─ アンインストール時: "Uninstalled"
   └─ スキップ時: "Skipped"
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[確認プロンプト表示]
    B --> C[ユーザー入力待ち]
    C --> D{入力判定}
    D -->|Y/y| E[アンインストール実行]
    D -->|N/n| F[スキップ]
    D -->|その他| C
    E --> G[.vimrc 削除]
    G --> H[nvim/init.vim 削除]
    H --> I[.spacevim 削除]
    I --> J[.space-vim/ 削除]
    J --> K["Uninstalled" 表示]
    F --> L["Skipped" 表示]
    K --> M[バッチ終了]
    L --> M
```

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

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

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| N/A | N/A | N/A | 本バッチはデータベースを使用しない |

### テーブル別操作詳細

N/A - データベース操作なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 権限エラー | 削除対象ファイルに書き込み権限がない | 適切な権限でファイルを作成し直すか、sudoで実行 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | N/A |
| リトライ対象エラー | N/A |

### 障害時対応

- 削除に失敗した場合は手動でファイルを削除する
- 権限エラーの場合は、ファイルの所有者と権限を確認する

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | N/A（シェルスクリプトのためトランザクション管理なし） |
| コミットタイミング | N/A |
| ロールバック条件 | N/A（削除は順次実行され、途中で失敗しても前の削除は取り消されない） |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回/アンインストール |
| 目標処理時間 | 数秒以内 |
| メモリ使用量上限 | 最小限（シェルスクリプトのため） |

## 排他制御

同時実行の想定なし。複数回実行しても2回目以降は削除対象が存在しないため、エラーにはならない。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 確認ログ | 処理開始時 | "- Uninstall (y/n) ?" |
| 完了ログ | アンインストール完了時 | "- Uninstalled" |
| スキップログ | ユーザーキャンセル時 | "- Skipped" |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| N/A | N/A | N/A（手動実行スクリプトのため監視対象外） |

## 備考

- 確認プロンプトはwhileループで実装されており、Y/y または N/n 以外の入力は無視され再入力を求められる
- rm -f オプションにより、ファイルが存在しない場合でもエラーにならない
- rm -rf により ~/.space-vim ディレクトリとその中身がすべて削除される
- vim-plug本体（~/.vim/autoload/plug.vim 等）は削除されない
- インストールされたプラグイン（~/.vim/plugged/ 等）は削除されない
