# 機能設計書 28-バージョン情報

## 概要

本ドキュメントは、mrubyランタイムにおけるバージョン情報管理機能の設計を記述する。MRUBY_VERSION, RUBY_VERSION等のバージョン定数をグローバル定数として定義する。

### 本機能の処理概要

バージョン情報機能は、mrubyランタイムの初期化時に各種バージョン関連のグローバル定数を定義する。Ruby互換のバージョン情報とmruby固有のバージョン情報の両方を提供する。

**業務上の目的・背景**：Rubyスクリプトが実行環境のバージョンを判別するためにRUBY_VERSION等の標準定数が必要である。また、mruby固有のバージョン情報により、組み込みシステムでのバージョン管理やデバッグが容易になる。

**機能の利用シーン**：スクリプトからのバージョン判定（RUBY_VERSION参照）、mrubyコマンドのバージョン表示（--version）、ビルド情報の確認。

**主要な処理内容**：
1. RUBY_VERSION定数の定義
2. RUBY_ENGINE定数の定義
3. RUBY_ENGINE_VERSION定数の定義
4. MRUBY_VERSION定数の定義
5. MRUBY_RELEASE_NO定数の定義
6. MRUBY_RELEASE_DATE定数の定義
7. MRUBY_DESCRIPTION定数の定義
8. MRUBY_COPYRIGHT定数の定義

**関連システム・外部連携**：出力機能（print.c）がMRUBY_DESCRIPTIONとMRUBY_COPYRIGHTを表示に使用する。

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

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | グローバル定数としてRubyスクリプトから参照される |

## 機能種別

データ管理（定数定義）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| mrb | mrb_state* | Yes | mrubyインタプリタ状態 | - |

### 入力データソース

- コンパイル時に決定されるマクロ定数（mruby.hまたはmrbconf.hで定義）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| RUBY_VERSION | String | Ruby互換バージョン文字列 |
| RUBY_ENGINE | String | エンジン名 "mruby" |
| RUBY_ENGINE_VERSION | String | mrubyバージョン文字列 |
| MRUBY_VERSION | String | mrubyバージョン文字列 |
| MRUBY_RELEASE_NO | Integer | リリース番号 |
| MRUBY_RELEASE_DATE | String | リリース日付文字列 |
| MRUBY_DESCRIPTION | String | mruby概要説明文字列 |
| MRUBY_COPYRIGHT | String | 著作権表示文字列 |

### 出力先

Objectクラスのグローバル定数として定義

## 処理フロー

### 処理シーケンス

```
1. mrb_init_version(mrb)が初期化時に呼ばれる
   ├─ mrb_define_global_const("RUBY_VERSION", MRUBY_RUBY_VERSION)
   ├─ mrb_define_global_const("RUBY_ENGINE", MRUBY_RUBY_ENGINE)
   ├─ mrb_define_global_const("RUBY_ENGINE_VERSION", mruby_version)
   ├─ mrb_define_global_const("MRUBY_VERSION", mruby_version)
   ├─ mrb_define_global_const("MRUBY_RELEASE_NO", MRUBY_RELEASE_NO)
   ├─ mrb_define_global_const("MRUBY_RELEASE_DATE", MRUBY_RELEASE_DATE)
   ├─ mrb_define_global_const("MRUBY_DESCRIPTION", MRUBY_DESCRIPTION)
   └─ mrb_define_global_const("MRUBY_COPYRIGHT", MRUBY_COPYRIGHT)
```

### フローチャート

```mermaid
flowchart TD
    A[mrb_init_version] --> B[RUBY_VERSION定義]
    B --> C[RUBY_ENGINE定義]
    C --> D[RUBY_ENGINE_VERSION定義]
    D --> E[MRUBY_VERSION定義]
    E --> F[MRUBY_RELEASE_NO定義]
    F --> G[MRUBY_RELEASE_DATE定義]
    G --> H[MRUBY_DESCRIPTION定義]
    H --> I[MRUBY_COPYRIGHT定義]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | 共有インスタンス | MRUBY_VERSIONとRUBY_ENGINE_VERSIONは同一の文字列オブジェクト | mrb_init_version |
| BR-02 | 定数不変性 | 定義後はグローバル定数として不変 | - |

### 計算ロジック

特になし。

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

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

## エラー処理

### エラーケース一覧

特にエラーケースはない。初期化時に一度だけ実行される。

### リトライ仕様

リトライは不要。

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

特になし。

## パフォーマンス要件

初期化時に一度だけ実行されるため、パフォーマンス要件は特にない。

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

- 特になし

## 備考

- バージョン情報のマクロはmruby.hまたはmrbconf.h、mruby/version.hで定義される
- MRUBY_VERSIONとRUBY_ENGINE_VERSIONは同一のmrb_value（mruby_version変数）を共有している

---

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

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

### 推奨読解順序

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

バージョン情報はコンパイル時マクロとして定義される。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | mruby.h | `include/mruby.h` | MRUBY_VERSION, MRUBY_RUBY_VERSION等のマクロ定義 |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | version.c | `src/version.c` | mrb_init_version（5-17行目）: 全8定数の定義 |

**主要処理フロー**:
1. **7行目**: mruby_versionローカル変数にMRUBY_VERSIONを格納
2. **9-16行目**: mrb_define_global_constで各定数を登録
3. **11行目**: RUBY_ENGINE_VERSIONとMRUBY_VERSIONが同一のmruby_valueを共有

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

```
mrb_init_version (init.cから呼ばれる)
    │
    └─ mrb_define_global_const (×8回)
           └─ mrb_define_const
                  └─ mrb_obj_iv_set (Objectクラスに定数設定)
```

### データフロー図

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

MRUBY_VERSION (マクロ) ──▶ mrb_str_new_lit     ───▶ グローバル定数
MRUBY_RUBY_VERSION     ──▶ mrb_str_new_lit     ───▶ RUBY_VERSION
MRUBY_RUBY_ENGINE      ──▶ mrb_str_new_lit     ───▶ RUBY_ENGINE
MRUBY_RELEASE_NO       ──▶ mrb_fixnum_value    ───▶ MRUBY_RELEASE_NO
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| version.c | `src/version.c` | ソース | バージョン定数定義の実装本体 |
| mruby.h | `include/mruby.h` | ヘッダ | バージョンマクロ定義 |
| variable.c | `src/variable.c` | ソース | mrb_define_global_const実装 |
| print.c | `src/print.c` | ソース | mrb_show_version/copyright（定数利用側） |
| init.c | `src/init.c` | ソース | mrb_init_versionの呼び出し元 |
