# 機能設計書 26-バージョン表示（--version）

## 概要

本ドキュメントは、Prettier CLIにおける`--version`オプションの機能設計を記述する。このオプションは、Prettierのバージョン番号を表示する。

### 本機能の処理概要

**業務上の目的・背景**：ユーザーやスクリプトがPrettierのバージョンを確認する必要がある場面は多い。互換性確認、デバッグ、ドキュメント参照など、バージョン情報は基本的かつ重要な情報である。本機能は、この情報をシンプルに取得する手段を提供する。

**機能の利用シーン**：
- インストール確認
- バージョン互換性の確認
- デバッグ・問題報告時のバージョン確認
- スクリプトでのバージョンチェック

**主要な処理内容**：
1. package.jsonからバージョン情報を取得
2. 標準出力にバージョン番号を表示

**関連システム・外部連携**：
- package.jsonからのバージョン読み込み

**権限による制御**：特になし。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 10 | Usage - Install | 補助機能 | インストール後のバージョン確認方法を説明 |
| 15 | Usage - CLI | 補助機能 | CLIでのバージョン表示を説明 |

## 機能種別

情報表示

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| --version, -v | boolean | No | バージョン表示の有効化 | - |

### 入力データソース

- CLIコマンドライン引数
- package.json（バージョン情報）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| version | string | セマンティックバージョン番号 |

### 出力先

- 標準出力

**出力例**：
```
3.5.0
```

## 処理フロー

### 処理シーケンス

```
1. --versionオプションの検出
   └─ context.argv.versionがtrueか確認

2. バージョン取得
   └─ prettier.versionから取得

3. 出力
   └─ printToScreen()で標準出力に表示
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{--version?}
    B -->|Yes| C[prettier.version取得]
    C --> D[printToScreen]
    D --> E[終了]
    B -->|No| F[他の処理へ]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-26-1 | 優先処理 | --versionは他のオプションより優先して処理される | --version指定時 |
| BR-26-2 | 単純出力 | バージョン番号のみを出力（改行含む） | 常時 |

### 計算ロジック

特になし。

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

本機能はデータベースを使用しない。

## エラー処理

### エラーケース一覧

エラーケースは想定されていない。

### リトライ仕様

リトライは行わない。

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

トランザクション管理は不要。

## パフォーマンス要件

- 即座に表示されること（package.jsonは既にバンドル済み）

## セキュリティ考慮事項

- バージョン番号のみを出力
- 機密情報の漏洩リスクはない

## 備考

- `-v`ショートエイリアスが利用可能
- バージョン番号はpackage.jsonから読み込まれる

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

バージョン情報の取得方法を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | version.evaluate.js | `src/main/version.evaluate.js` | package.jsonからのバージョン読み込み |

**読解のコツ**: ES2022のimport assertionsを使用してJSONをインポートしている。

#### Step 2: エントリーポイントを理解する

CLIオプションの定義と処理の流れを把握する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | cli-options.evaluate.js | `src/cli/cli-options.evaluate.js` | versionオプションの定義 |
| 2-2 | index.js | `src/cli/index.js` | --versionの処理分岐 |

**主要処理フロー**:
- **227-231行目（cli-options）**: versionオプション定義
- **69-72行目（index.js）**: version判定と出力

#### Step 3: バージョンの公開方法を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | index.js | `src/index.js` | versionのエクスポート |

**主要処理フロー**:
- **141行目**: versionのエクスポート

### プログラム呼び出し階層図

```
src/cli/index.js::main()
    │
    ├─ --version検出
    │
    └─ context.argv.version判定
           │
           └─ printToScreen(prettier.version)
                  │
                  └─ src/index.js::version
                         │
                         └─ src/main/version.evaluate.js
                                │
                                └─ package.json::version
```

### データフロー図

```
[入力]                    [処理]                         [出力]

--version ────────────▶ フラグ検出 ─────────────────────▶ true
                               │
                               ▼
package.json ──────────▶ version.evaluate.js ───────────▶ "3.5.0"
                               │
                               ▼
                         printToScreen ─────────────────▶ 標準出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| version.evaluate.js | `src/main/version.evaluate.js` | ソース | バージョン読み込み |
| cli-options.evaluate.js | `src/cli/cli-options.evaluate.js` | ソース | オプション定義 |
| index.js | `src/cli/index.js` | ソース | CLIエントリーポイント |
| index.js | `src/index.js` | ソース | API公開エントリーポイント |
| package.json | `package.json` | 設定 | バージョン情報の元データ |
