# バッチ設計書 12-reggaefile

## 概要

本ドキュメントは、serve-dプロジェクトにおけるreggaeビルドシステム用のビルド定義ファイル `reggaefile.d` のバッチ設計書である。dubのデフォルトビルドターゲットとテストターゲットを定義し、Ninja/make向けの便利なエイリアスを提供する。

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

本ファイルは、reggaeビルドシステムにおけるserve-dプロジェクトのビルド構成を定義するD言語ファイルである。

**業務上の目的・背景**：serve-dプロジェクトはdubパッケージマネージャによるビルドを基本とするが、reggaeビルドシステムを併用することで、NinjaやMakeなどの高速なビルドツールからもプロジェクトをビルドできるようにする。これにより、開発者は好みのビルドツールを使い分けることができ、特にNinjaを使用する場合はビルドターゲットとテストターゲットを並列実行できるメリットがある。

**バッチの実行タイミング**：開発者がreggaeビルドシステムを使用してプロジェクトをビルドまたはテストする際に、reggaeコマンドによって自動的に読み込まれる。手動実行されるバッチではなく、ビルドシステムの構成定義ファイルとして機能する。

**主要な処理内容**：
1. `dubDefaultTarget` テンプレートを使用してdubのデフォルトビルドターゲット（`dub build` 相当）を定義する
2. `dubTestTarget` テンプレートを使用してdubのテストターゲット（`dub test` 相当、ut[.exe]生成）を定義する
3. `aliasTarget` テンプレート関数により、ビルドターゲットに `default` という便利なエイリアスを付与する
4. Windows環境では、テストターゲットに `ut` という追加エイリアスを定義する（`ut.exe` へのマッピング）
5. `mixin build!` により、定義したターゲットをreggaeビルドシステムに登録する

**前後の処理との関連**：本ファイルはreggaeビルドシステムのエントリポイントとなる構成ファイルであり、他のバッチスクリプト（ci/build.sh等）とは独立したビルドパスを提供する。dubの設定（dub.json/dub.sdl）が実際のビルド依存関係やコンパイルオプションを定義し、本ファイルはそれをreggaeターゲットとして公開する役割を担う。

**影響範囲**：reggaeビルドシステムを使用する開発者のビルド環境に影響する。NinjaやMakeを使ったローカル開発ビルドに関わる。

## バッチ種別

ビルド構成定義

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（開発者がreggaeコマンドを実行する際） |
| 実行時刻 | 指定なし |
| 実行曜日 | 指定なし |
| 実行日 | 指定なし |
| トリガー | 手動（reggaeコマンドの実行時に自動読み込み） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| reggaeビルドシステムのインストール | reggaeがPATH上に利用可能であること |
| D言語コンパイラ | reggaefileをコンパイルするためのD言語コンパイラ（dmd/ldc2）が利用可能であること |
| dubパッケージマネージャ | dubが利用可能であり、プロジェクトのdub設定ファイルが存在すること |

### 実行可否判定

reggaeコマンドの実行時に自動的にこのファイルが読み込まれ、ビルドターゲットが生成される。特別な実行可否判定ロジックは存在しない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | 本ファイルは入力パラメータを取らない。ビルドターゲット定義はコード内にハードコードされている |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| dub.json / dub.sdl | JSON / SDL | dubパッケージマネージャのビルド設定。reggaeが内部的に参照する |
| reggaeライブラリ | D言語モジュール | `import reggae;` でインポートされるreggaeビルドシステムのライブラリ |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| ビルドファイル | Ninja/Makefile | reggaeが生成するビルドシステム固有のファイル（build.ninja / Makefile） |

### 出力ファイル仕様

本ファイル自体は直接ファイルを出力しない。reggaeコマンドの実行結果として、ビルドシステム固有のファイルが生成される。

| 項目 | 内容 |
|-----|------|
| ファイル名 | build.ninja（Ninja使用時） / Makefile（Make使用時） |
| 出力先 | プロジェクトルートまたは指定されたビルドディレクトリ |
| 文字コード | UTF-8 |
| 区切り文字 | ビルドシステム固有の形式 |

## 処理フロー

### 処理シーケンス

```
1. reggaeライブラリのインポート
   └─ reggaeモジュールから必要なテンプレートと関数をインポート
2. ビルドターゲットの定義
   └─ dubDefaultTarget!() により dub build 相当のターゲットを定義
3. テストターゲットの定義
   └─ dubTestTarget!() により dub test 相当のターゲット（ut[.exe]）を定義
4. エイリアスターゲットの定義
   └─ aliasTarget テンプレートで "default" エイリアスを生成
5. プラットフォーム固有処理
   └─ Windows環境では "ut" エイリアスを追加で定義
6. ビルドシステムへの登録
   └─ mixin build! でターゲットをreggaeに登録
```

### フローチャート

```mermaid
flowchart TD
    A[reggaefile.d 読み込み] --> B[reggaeライブラリインポート]
    B --> C[buildTarget = dubDefaultTarget定義]
    C --> D[testTarget = dubTestTarget定義]
    D --> E[defaultTarget = aliasTarget default 定義]
    E --> F{Windows環境か}
    F -->|Yes| G[utTarget = aliasTarget ut 定義]
    G --> H[mixin build! buildTarget, testTarget, defaultTarget, utTarget]
    F -->|No| I[mixin build! buildTarget, testTarget, defaultTarget]
    H --> J[ビルド定義完了]
    I --> J
```

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

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

本バッチはデータベース操作を行わない。

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| なし | なし | なし | データベース操作なし |

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

該当なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| コンパイルエラー | ビルド定義エラー | reggaeライブラリが見つからない場合 | reggaeのインストール状態を確認する |
| コンパイルエラー | ターゲット定義エラー | dubの設定ファイルが不正な場合 | dub.json/dub.sdlの内容を確認する |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | なし |
| リトライ対象エラー | なし（ビルド構成定義のため、リトライの概念は適用されない） |

### 障害時対応

- reggaefileのコンパイルエラーが発生した場合は、reggaeライブラリのバージョンとD言語コンパイラの互換性を確認する
- dub設定ファイルとの整合性エラーの場合は、dub.json/dub.sdlの設定を確認する

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし（データベース操作なし） |
| コミットタイミング | なし |
| ロールバック条件 | なし |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1件（ビルド定義の生成） |
| 目標処理時間 | 数秒以内（reggae初期化時のみ） |
| メモリ使用量上限 | 特になし |

## 排他制御

排他制御は不要。ビルド構成定義ファイルは読み取り専用で使用される。ただし、生成されるビルドファイル（build.ninja等）への同時書き込みを避けるため、reggaeコマンドの同時実行は推奨しない。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| ビルド定義ログ | reggae初期化時 | reggaeが内部的に出力するターゲット定義情報 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| なし | なし | 開発者のローカル環境で使用されるため、監視・アラート設定は不要 |

## 備考

- 本ファイルはreggaeビルドシステム固有の構成ファイルであり、CI/CDパイプラインでは直接使用されていない（CI/CDではdubコマンドが直接使用される）
- `aliasTarget` テンプレート関数は、`$builddir/<raw output>` 形式の出力パスを使用することで、Ninja/makeにおいて期待される相対パスのターゲット名を生成する
- `optional!` テンプレートは、testTarget/defaultTarget/utTargetをオプショナルなターゲットとして登録し、明示的に指定された場合のみビルドされるようにする
- Ninjaを使用する場合、`ninja default ut` のように複数ターゲットを並列ビルドできることがコメントに記載されている
