# バッチ設計書 14-toolkit check pr

## 概要

本ドキュメントは、Nushellプロジェクトにおける`toolkit check pr`コマンドのバッチ設計書です。PR（プルリクエスト）提出前に必要なすべてのチェック（フォーマット、Clippy、テスト、標準ライブラリテスト）を一括で実行するコマンドの仕様を定義します。

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

`toolkit check pr`は、PRを提出する前に実行すべきすべての品質チェックを順次実行し、PRの品質を保証するための統合バッチ処理です。

**業務上の目的・背景**：PRを提出する際、複数のチェック（コードフォーマット、静的解析、ユニットテスト、標準ライブラリテスト）を個別に実行するのは煩雑です。本コマンドはこれらを一括実行し、開発者の作業効率を向上させるとともに、PRの品質基準を統一的に担保します。CIで実行されるチェックと同等のチェックをローカルで事前に実行できます。

**バッチの実行タイミング**：開発者がPRを提出する前に手動で実行します。すべてのチェックが成功した場合のみPRを提出することが推奨されます。

**主要な処理内容**：
1. 環境変数の設定（ロケール統一）
2. `toolkit fmt --check`でコードフォーマットチェック
3. `toolkit clippy`でコード品質チェック
4. `toolkit test`でテスト実行
5. `toolkit test stdlib`で標準ライブラリテスト実行
6. 各ステージの成功/失敗レポート生成

**前後の処理との関連**：本コマンドは他のtoolkitコマンド（fmt、clippy、test、test stdlib）を内部で呼び出す統合コマンドです。

**影響範囲**：Nushellプロジェクト全体のソースコード品質検証。ソースコードの変更は行いません（読み取り専用チェック）。

## バッチ種別

統合品質チェック / PR検証

## 実行スケジュール

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

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Rust環境 | Rustツールチェーンがインストールされていること |
| Clippyコンポーネント | `rustup component add clippy`でClippyがインストールされていること |
| rustfmtコンポーネント | `rustup component add rustfmt`でrustfmtがインストールされていること |
| Nushell環境 | Nushellがインストールされ、toolkitモジュールが利用可能であること |
| プロジェクトディレクトリ | Nushellプロジェクトのルートディレクトリで実行すること |
| cargo-nextest（オプション） | --fastオプション使用時に必要 |

### 実行可否判定

Cargoプロジェクトとして正常にビルドできる状態であれば実行可能。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| --fast | flag | No | false | cargo-nextestを使用して高速テストを実行 |
| --features | list<string> | No | [] | チェックを実行する機能のリスト |

### 入力データソース

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

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | 各チェックの実行結果とレポート |
| 標準エラー出力 | テキスト | エラーメッセージ |

### 出力ファイル仕様

ファイル出力はありません（コンソール出力のみ）。

### レポート形式

実行完了時に以下の形式でレポートが出力されます：

```
- :green_circle: `toolkit fmt`
- :green_circle: `toolkit clippy`
- :green_circle: `toolkit test`
- :green_circle: `toolkit test stdlib`
```

失敗したステージは`:red_circle:`、未実行のステージは`:black_circle:`で表示されます。

## 処理フロー

### 処理シーケンス

```
1. 環境変数の設定
   └─ NU_TEST_LOCALE_OVERRIDE=en_US.utf8
   └─ LANG=en_US.UTF-8
   └─ LANGUAGE=en

2. フォーマットチェック実行
   └─ fmt --check --verbose
   └─ 失敗時: レポート出力して終了

3. Clippyチェック実行
   └─ clippy --features $features --verbose
   └─ 失敗時: レポート出力して終了

4. テスト実行
   └─ test [--fast] [--features | --workspace]
   └─ 失敗時: レポート出力して終了

5. 標準ライブラリテスト実行
   └─ test stdlib
   └─ 失敗時: レポート出力して終了

6. 成功レポート出力
   └─ 全ステージ成功のレポートを表示
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[環境変数設定]
    B --> C[fmt --check実行]
    C --> D{fmt成功?}
    D -->|No| E[fail-fmtレポート]
    E --> F[異常終了]
    D -->|Yes| G[clippy実行]
    G --> H{clippy成功?}
    H -->|No| I[fail-clippyレポート]
    I --> F
    H -->|Yes| J[test実行]
    J --> K{test成功?}
    K -->|No| L[fail-testレポート]
    L --> F
    K -->|Yes| M[test stdlib実行]
    M --> N{test stdlib成功?}
    N -->|No| O[fail-test-stdlibレポート]
    O --> F
    N -->|Yes| P[成功レポート出力]
    P --> Q[正常終了]
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | フォーマットエラー | コードフォーマット違反 | `toolkit fmt`を実行して修正 |
| - | Clippyエラー | コード品質違反 | 指摘箇所を修正 |
| - | テスト失敗 | アサーション失敗 | 失敗したテストを修正 |
| - | 標準ライブラリテスト失敗 | アサーション失敗 | 失敗したテストを修正 |

### リトライ仕様

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

### 障害時対応

各ステージで失敗が発生した場合、レポートを確認して失敗したステージの問題を修正し、再度`toolkit check pr`を実行します。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 該当なし（読み取り専用） |
| コミットタイミング | 該当なし |
| ロールバック条件 | 該当なし |

## パフォーマンス要件

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

## 排他制御

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

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | 各ステージ開始時 | "running `toolkit {stage}`" |
| 進捗ログ | 各ステージ実行中 | 詳細な進捗情報 |
| 終了ログ | バッチ終了時 | ステージ別成功/失敗レポート |
| エラーログ | エラー発生時 | エラーメッセージ |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 処理時間 | 環境依存 | なし（手動実行） |
| 失敗ステージ数 | 1以上 | コンソールレポート |

## 備考

- 環境変数によりロケールを`en_US.UTF-8`に統一し、テスト結果の一貫性を確保します
- 各ステージは順次実行され、失敗した時点で後続のステージはスキップされます
- レポートは絵文字を使用して視覚的に成功/失敗を表示します
- `--fast`オプションを使用すると、テスト実行時にcargo-nextestを使用して高速化できます
- `--features`が空の場合、テストは`--workspace`オプションで実行されます
