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

## 概要

本ドキュメントは、Nushell本体および全プラグインをcargoからアンインストールするシェルスクリプト `uninstall-all.sh` のバッチ設計書です。Linux/macOS環境向けのアンインストールバッチとして設計されています。

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

このバッチは、cargoでインストールされたNushell本体と全ての公式プラグインをシステムからアンインストールします。開発環境のクリーンアップや、古いバージョンの完全削除を行う際に使用するスクリプトです。

**業務上の目的・背景**：Nushell開発者が開発環境をクリーンアップしたり、インストールをやり直したりする場合があります。`install-all.sh` でインストールしたすべてのコンポーネントを一括でアンインストールすることで、手動で個別にアンインストールする手間を省き、確実にすべてのコンポーネントを削除できます。

**バッチの実行タイミング**：開発環境のクリーンアップ時、Nushellの再インストール前、または異なるバージョンへの切り替え時に手動で実行します。

**主要な処理内容**：
1. Nushell本体を `cargo uninstall nu` でアンインストール
2. 各プラグイン（nu_plugin_inc, nu_plugin_gstat, nu_plugin_query, nu_plugin_example, nu_plugin_formats, nu_plugin_custom_values, nu_plugin_polars）を順次アンインストール

**前後の処理との関連**：本バッチは `install-all.sh` の逆操作として機能します。再インストールを行う場合は、本バッチ実行後に `install-all.sh` を実行します。

**影響範囲**：`~/.cargo/bin` ディレクトリからNushellバイナリ（nu）と各プラグインバイナリが削除されます。

## バッチ種別

アンインストール処理 / 環境クリーンアップ

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | 任意 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | 手動実行 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Cargo環境 | cargoコマンドが利用可能であること |
| インストール済み | 対象のバイナリがcargoでインストールされていること |
| シェル環境 | Bash互換シェルが利用可能であること |

### 実行可否判定

- `cargo` コマンドが実行可能であること
- `set -euo pipefail` によりエラー発生時は即座に停止

## 入力仕様

### 入力パラメータ

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

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| ~/.cargo/bin/ | ディレクトリ | インストール済みバイナリの格納先 |
| ~/.cargo/.crates.toml | ファイル | cargoのインストール管理ファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | アンインストール進捗メッセージ |

### 出力ファイル仕様

ファイル出力はありません。バイナリファイルの削除のみを行います。

## 処理フロー

### 処理シーケンス

```
1. 環境設定
   └─ set -euo pipefail でエラー時即停止を設定
2. 開始メッセージ出力
   └─ "Uninstall nu and all plugins from cargo/bin..."
3. Nushell本体アンインストール
   └─ cargo uninstall nu
4. プラグインループ処理
   └─ 7個のプラグインを順次 cargo uninstall でアンインストール
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[環境変数設定]
    B --> C[開始メッセージ出力]
    C --> D[Nushell本体アンインストール]
    D --> E{プラグインループ}
    E -->|次のプラグイン| F[プラグインアンインストール]
    F --> E
    E -->|全完了| G[バッチ終了]
```

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

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

本バッチはデータベース操作を行いません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 1 | 未インストール | 対象がインストールされていない場合 | 警告を確認して継続 |
| 1 | 権限エラー | バイナリ削除の権限がない場合 | 適切な権限で再実行 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0回（自動リトライなし） |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

`set -e` により任意のコマンドが失敗した時点でスクリプトは停止します。未インストールのコンポーネントがある場合はエラーとなるため、事前にインストール状態を確認してください。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 各アンインストールコマンド単位 |
| コミットタイミング | 各 cargo uninstall 完了時 |
| ロールバック条件 | 自動ロールバックなし（再インストールで復旧） |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 8件（本体1 + プラグイン7） |
| 目標処理時間 | 数秒〜数十秒 |
| メモリ使用量上限 | 最小限 |

## 排他制御

同一環境での並列実行は非推奨です。同時実行による競合を避けてください。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | バッチ開始時 | "Uninstall nu and all plugins from cargo/bin..." |
| 進捗ログ | 各アンインストール時 | cargoの出力 |
| 終了ログ | 該当なし | 特になし |
| エラーログ | エラー発生時 | cargoのエラー出力 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 処理時間 | 1分以上 | 手動確認 |
| エラー件数 | 1件以上 | 標準エラー出力 |

## 備考

- アンインストール対象が存在しない場合、cargoはエラーを返します
- プラグインリストはスクリプト内にハードコードされており、`install-all.sh` と同期を保つ必要があります
- Windowsユーザー向けの同等スクリプトは存在しないため、手動でアンインストールが必要です
