# バッチ設計書 18-toolkit install

## 概要

本ドキュメントは、Nushellプロジェクトにおける`toolkit install`コマンドのバッチ設計書です。Nushell本体およびオプションで全プラグインをインストールするコマンドの仕様を定義します。

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

`toolkit install`は、Nushell本体を指定された機能（features）でビルドしてシステムにインストールし、オプションで全プラグインもインストールするバッチ処理です。

**業務上の目的・背景**：Nushellの開発版やカスタムビルドをシステムにインストールする際、cargo installコマンドを手動で実行するのは煩雑です。本コマンドは、機能フラグの指定や全プラグインの一括インストールを簡単に行えるインターフェースを提供します。開発者が最新のソースコードから直接Nushellをインストールする際に使用されます。

**バッチの実行タイミング**：開発者がNushellの開発版をシステムにインストールする際に手動で実行します。リリース前のテストや、特定の機能を有効化したカスタムビルドを作成する際にも使用します。

**主要な処理内容**：
1. nu-cmd-langのbuild.rsをtouchしてcommit_hashを更新
2. 指定された機能（features）でNushell本体をインストール
3. `--all`オプション指定時は全プラグインをインストール
4. インストール進捗をコンソールに表示

**前後の処理との関連**：インストール後、`toolkit add plugins`でプラグインを登録し、Nushellを再起動して使用します。

**影響範囲**：Cargoのインストールディレクトリ（通常~/.cargo/bin）にバイナリがインストールされます。既存のインストール済みバイナリは上書きされます。

## バッチ種別

インストール処理

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（手動実行） |
| 実行時刻 | 任意 |
| 実行曜日 | 任意 |
| 実行日 | 任意 |
| トリガー | 手動 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Rust環境 | Rustツールチェーンがインストールされていること |
| Nushell環境 | Nushellがインストールされ、toolkitモジュールが利用可能であること |
| プロジェクトディレクトリ | Nushellプロジェクトのルートディレクトリで実行すること |
| 書き込み権限 | Cargoインストールディレクトリへの書き込み権限があること |

### 実行可否判定

Cargoプロジェクトとして正常に構成されており、Rustツールチェーンが利用可能であれば実行可能。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| ...features | string | No | [] | Nushellに含める機能のリスト（スペース区切り） |
| --all | flag | No | false | 全プラグインもインストールする |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| ソースコード | Rustファイル群 | ワークスペース配下の全ソースファイル |
| Cargo.toml | TOML | ワークスペースとクレートの設定 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | インストール進捗メッセージ |
| ~/.cargo/bin/ | バイナリ | インストールされた実行ファイル |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | nu（Windows: nu.exe） |
| 出力先 | ~/.cargo/bin/（または$CARGO_HOME/bin/） |
| プラグイン | nu_plugin_*（同ディレクトリ） |

## 処理フロー

### 処理シーケンス

```
1. ビルドスクリプトの更新
   └─ touch crates/nu-cmd-lang/build.rs
   └─ commit_hashを正しく取得するため

2. Nushell本体のインストール
   └─ cargo install --path . --features {features} --locked --force

3. プラグインインストール判定
   └─ --all未指定: 処理終了
   └─ --all指定: プラグインインストールへ

4. 各プラグインのインストール
   └─ nu_plugin_inc
   └─ nu_plugin_gstat
   └─ nu_plugin_query
   └─ nu_plugin_polars
   └─ nu_plugin_example
   └─ nu_plugin_custom_values
   └─ nu_plugin_formats
   └─ 各プラグインに対してcargo install --path crates/{plugin}
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[build.rsをtouch]
    B --> C[Nushell本体インストール]
    C --> D[cargo install --path . --features --locked --force]
    D --> E{--all指定?}
    E -->|No| F[正常終了]
    E -->|Yes| G[プラグインリスト取得]
    G --> H[各プラグインをループ]
    H --> I[cargo install --path crates/plugin]
    I --> J{全プラグイン完了?}
    J -->|No| H
    J -->|Yes| F
```

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

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

データベース操作はありません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | コンパイルエラー | ソースコードの問題 | エラーメッセージに従い修正 |
| - | 依存関係エラー | クレートが見つからない | Cargo.lockを確認 |
| - | 権限エラー | インストール先に書き込めない | 権限を確認 |
| - | ディスク容量不足 | 空き容量がない | 空き容量を確保 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（手動再実行） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

### 障害時対応

インストールエラーが発生した場合、エラーメッセージを確認して問題を解決し、再度インストールを実行します。`--force`オプションにより、既存のバイナリは強制的に上書きされます。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 該当なし |
| コミットタイミング | 該当なし |
| ロールバック条件 | 該当なし |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | プロジェクト全体のソースファイル |
| 目標処理時間 | 数分〜数十分（環境依存） |
| メモリ使用量上限 | Cargoビルドに依存（数GB） |

## 排他制御

同一ディレクトリでの複数Cargo操作は競合する可能性があります。Cargo.lockによるファイルロックが使用されます。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 進捗ログ | インストール中 | Cargoの標準出力 |
| 開始ログ | 各プラグイン開始時 | "Installing {plugin}" |
| 区切り線 | 各インストール開始時 | "----------------------------" |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 処理時間 | 環境依存 | なし（手動実行） |
| インストール成功 | 終了コード0 | なし |

## 備考

- `touch crates/nu-cmd-lang/build.rs`により、`version`コマンドで正しいcommit_hashが表示されるようになります
- `--locked`オプションにより、Cargo.lockに記載された正確なバージョンの依存関係を使用します
- `--force`オプションにより、既存のインストール済みバイナリを強制的に上書きします
- 利用可能な機能はCargo.tomlのfeaturesセクションで定義されています
- インストール後、`toolkit add plugins`でプラグインを登録することを推奨します
- インストール対象プラグイン一覧:
  - nu_plugin_inc
  - nu_plugin_gstat
  - nu_plugin_query
  - nu_plugin_polars
  - nu_plugin_example
  - nu_plugin_custom_values
  - nu_plugin_formats
