# 帳票設計書 20-バージョン番号

## 概要

本ドキュメントは、libuvライブラリが提供するバージョン番号取得機能（uv_version）の帳票設計書である。

### 本帳票の処理概要

uv_version() APIは、libuvのバージョン番号を16進数エンコードされた整数値（unsigned int）として返却する関数である。

**業務上の目的・背景**：ライブラリの互換性確認やバージョン依存の機能制御において、バージョン番号をプログラム的に取得できることは重要である。ヘッダーファイルのバージョン定数と実行時のバージョンを比較することで、ヘッダーとバイナリの不一致を検出できる。Node.jsでは process.versions.uv でlibuvバージョンが公開されるが、その取得にはuv_version_string()が主に使用される。

**帳票の利用シーン**：ライブラリバージョンの互換性チェック、ビルド環境と実行環境のバージョン整合性確認、バージョン依存の機能分岐、デバッグ情報の出力。

**主要な出力内容**：
1. バージョン番号（unsigned int型、16進数エンコード）
   - 上位16ビット: メジャーバージョン
   - 中位8ビット: マイナーバージョン
   - 下位8ビット: パッチバージョン

**帳票の出力タイミング**：アプリケーションコードからuv_version()を呼び出した時点で即座にコンパイル時定数を返却する。

**帳票の利用者**：libuvを利用するアプリケーション開発者、パッケージ管理ツール、互換性チェックユーティリティ

## 帳票種別

数値レポート（スカラー値返却型）

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| N/A | C API呼び出し | N/A | uv_version() 関数呼び出し |

## 出力形式

### 基本仕様

| 項目 | 内容 |
|-----|------|
| ファイル形式 | メモリ上の数値（unsigned int） |
| 用紙サイズ | N/A |
| 向き | N/A |
| ファイル名 | N/A（関数戻り値） |
| 出力方法 | 関数戻り値 |
| 文字コード | N/A |

## 帳票レイアウト

### レイアウト概要

```
┌─────────────────────────────────────┐
│  バージョン番号（16進数エンコード）    │
│  型: unsigned int                   │
│  ビットレイアウト:                    │
│  ┌───────────┬────────┬────────┐    │
│  │ Major(16) │Minor(8)│Patch(8)│    │
│  └───────────┴────────┴────────┘    │
│  例: 1.52.1 → 0x013401              │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| N/A | N/A | ヘッダー部は存在しない | N/A | N/A |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | バージョン番号 | 16進エンコードされたバージョン | UV_VERSION_HEXマクロ | unsigned int | 4バイト |

### フッター部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| N/A | N/A | フッター部は存在しない | N/A | N/A |

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| なし | 引数不要。コンパイル時定数を返却 | N/A |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| N/A | N/A | N/A |

### 改ページ条件

改ページは発生しない。

## データベース参照仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| N/A | データベースは参照しない | N/A |

### テーブル別参照項目詳細

#### バージョン定数の定義元

| 定数名 | 値 | 定義ファイル |
|--------|---|------------|
| UV_VERSION_MAJOR | 1 | include/uv/version.h |
| UV_VERSION_MINOR | 52 | include/uv/version.h |
| UV_VERSION_PATCH | 1 | include/uv/version.h |
| UV_VERSION_IS_RELEASE | 0 | include/uv/version.h |
| UV_VERSION_SUFFIX | "dev" | include/uv/version.h |
| UV_VERSION_HEX | (MAJOR << 16) \| (MINOR << 8) \| PATCH | include/uv/version.h |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| UV_VERSION_HEX | (UV_VERSION_MAJOR << 16) \| (UV_VERSION_MINOR << 8) \| UV_VERSION_PATCH | なし | コンパイル時定数。ビットシフトとOR |
| メジャー抽出 | version >> 16 | なし | 呼び出し側での逆変換 |
| マイナー抽出 | (version >> 8) & 0xFF | なし | 呼び出し側での逆変換 |
| パッチ抽出 | version & 0xFF | なし | 呼び出し側での逆変換 |

## 処理フロー

### 出力フロー

```mermaid
flowchart TD
    A[uv_version 呼び出し] --> B[UV_VERSION_HEX を返却]
    B --> C[呼び出し元で値を使用]
```

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| N/A | エラーは発生しない | N/A | N/A |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | 1件（スカラー値） |
| 目標出力時間 | ナノ秒オーダー（コンパイル時定数の返却） |
| 同時出力数上限 | 制限なし（純粋関数、スレッドセーフ） |

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

バージョン情報はセキュリティ上の機密情報ではない。ただし、バージョン情報の公開により既知の脆弱性の有無が推測される可能性がある。

## 備考

- uv_version()はコンパイル時に決定される定数を返却するため、実行時オーバーヘッドは実質的にゼロである。
- ヘッダーファイルのUV_VERSION_HEXマクロとuv_version()の返却値を比較することで、ヘッダーとバイナリのバージョン不一致を検出できる。
- 同じメジャーバージョンであればABI互換が保証される。
- 現在のバージョン（1.52.1-dev）ではUV_VERSION_IS_RELEASEが0であり、開発版を示す。

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | version.h | `include/uv/version.h` | 33-41行目: バージョン定数の定義。MAJOR=1, MINOR=52, PATCH=1, UV_VERSION_HEXの計算式 |

**読解のコツ**: UV_VERSION_HEXは3つのバージョン要素をビットシフトで1つの整数にエンコードする。Major=16ビット左シフト、Minor=8ビット左シフト、Patchはそのまま。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | uv.h | `include/uv.h` | 275行目: uv_version()の宣言。unsigned int返却 |
| 2-2 | version.c | `src/version.c` | 38行目: uv_version()の実装。UV_VERSION_HEXをそのまま返却 |

**主要処理フロー**:
1. **38行目**: uv_version関数定義
2. **39行目**: return UV_VERSION_HEX; - コンパイル時定数をそのまま返却

#### Step 3: バージョン文字列との関連を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | version.c | `src/version.c` | 24-35行目: UV_VERSION_STRING_BASE/UV_VERSION_STRINGマクロの定義 |
| 3-2 | version.c | `src/version.c` | 43行目: uv_version_string()の実装。UV_VERSION_STRINGを返却 |

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

```
uv_version()
    │
    └─ return UV_VERSION_HEX
           │
           └─ (UV_VERSION_MAJOR << 16) | (UV_VERSION_MINOR << 8) | UV_VERSION_PATCH
                  │                        │                        │
                  └─ version.h:33          └─ version.h:34          └─ version.h:35
```

### データフロー図

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

(引数なし)   ───▶  UV_VERSION_HEX定数   ───▶  unsigned int
                   (コンパイル時解決)            (例: 0x013401)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| version.h | `include/uv/version.h` | ヘッダー | バージョン定数定義（33-41行目） |
| uv.h | `include/uv.h` | ヘッダー | API宣言（275行目） |
| version.c | `src/version.c` | ソース | uv_version()実装（38行目） |
