# バッチ設計書 64-CheckPSVersion.ps1

## 概要

本ドキュメントは、PowerShell Coreのバージョンチェックを行うスクリプト `CheckPSVersion.ps1` のバッチ設計書である。実行中のPowerShellバージョンが7.0.0以上であるかを確認し、条件を満たさない場合はエラーを出力して終了する。

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

本スクリプトは、OpenConsoleプロジェクトのビルドやスクリプト実行に必要なPowerShellランタイムバージョンの前提条件を検証するガードスクリプトである。

**業務上の目的・背景**：OpenConsoleプロジェクトの各種PowerShellスクリプト（OpenConsole.psm1等）はPowerShell 7以上の機能を使用しており、古いバージョンのPowerShell（Windows PowerShell 5.1等）では正常に動作しない。本スクリプトは、ビルドやスクリプト実行の前段階でバージョンチェックを行い、不適切な環境での実行を早期に検出してわかりやすいエラーメッセージを表示する。これにより、開発者が環境問題をすぐに把握し、適切なPowerShellバージョンをインストールできる。

**バッチの実行タイミング**：他のスクリプトやビルドプロセスの前提条件チェックとして、必要に応じて呼び出される。開発環境セットアップ時やCI/CDパイプラインの初期化時に実行される。

**主要な処理内容**：
1. `$PSVersionTable.PSVersion.Major` でPowerShellのメジャーバージョンを取得する
2. メジャーバージョンが7未満であるかチェックする
3. 条件を満たさない場合、エラーメッセージを出力しExit 1で終了する

**前後の処理との関連**：ビルドスクリプトやrazzle.cmd（No.1）等の環境セットアップスクリプトから呼び出される可能性がある。WindowsCheckPSVersion.ps1（No.65）と同様の目的を持つが、本スクリプトはPowerShellセッション内で直接バージョンを確認する点が異なる。

**影響範囲**：プロセスの終了コードに影響する（バージョン不足時にExit 1）。ファイルシステムやデータベースへの変更はない。

## バッチ種別

環境チェック / バリデーション

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（他スクリプトからの呼び出し時） |
| 実行時刻 | 呼び出し元に依存 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | ビルドスクリプト/環境セットアップからの呼び出し |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| PowerShell実行環境 | PowerShell（バージョン問わず）が実行されていること |

### 実行可否判定

PowerShellセッションが存在すれば常に実行可能。バージョン不足の場合はエラーを返す。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | 本スクリプトはパラメータを受け取らない |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| $PSVersionTable | PowerShell自動変数 | 実行中のPowerShellバージョン情報 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準エラー | テキスト | バージョン不足時のエラーメッセージ |
| 終了コード | 整数 | 0（成功）または1（バージョン不足） |

### 出力ファイル仕様

ファイル出力はなし。

| 項目 | 内容 |
|-----|------|
| ファイル名 | 該当なし |
| 出力先 | 標準エラー出力 |
| 文字コード | UTF-8 |
| 区切り文字 | 該当なし |

## 処理フロー

### 処理シーケンス

```
1. PowerShellバージョン取得
   └─ $PSVersionTable.PSVersion.Major を参照
2. バージョン判定
   └─ メジャーバージョンが7未満かチェック
3. エラー処理（バージョン不足時）
   └─ Write-Error でメッセージ出力後、Exit 1 で終了
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[PSVersion.Majorを取得]
    B --> C{メジャーバージョン < 7 ?}
    C -->|Yes| D[Write-Error: バージョン不足メッセージ]
    D --> E[Exit 1]
    C -->|No| F[正常終了]
```

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

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

データベース操作は行わない。

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 該当なし | - | - | - |

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

該当なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| Exit 1 | バージョン不足 | PSVersion.Major < 7 | PowerShell Core 7.0.0以上をインストールする |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし（環境問題のため自動リトライ不可） |

### 障害時対応

PowerShell Core 7.0.0以上をインストールし、pwshコマンドで再実行する。

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回のバージョンチェック |
| 目標処理時間 | 即座（ミリ秒以内） |
| メモリ使用量上限 | 特に制限なし（極小） |

## 排他制御

排他制御は不要。読み取り専用のバージョン情報参照のみ。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| エラーログ | バージョン不足検出時 | `Incorrect version of PowerShell installed. Make sure you have at least PowerShell Core 7.0.0.` |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 終了コード | 1（異常終了） | 呼び出し元スクリプト |

## 備考

- スクリプトは4行のみの非常に小規模なガードスクリプトである
- エラーメッセージにはバッククォート改行（`n）を使用して2行メッセージを出力する
- WindowsCheckPSVersion.ps1（No.65）とは確認方法が異なる（本スクリプトは$PSVersionTableを参照、No.65はpwsh.exeの存在を確認）
- ソースファイル: `tools/CheckPSVersion.ps1`
