# バッチ設計書 14-CIBuild.cmd

## 概要

本ドキュメントは、Arcade共通CIビルドスクリプト（eng/common/CIBuild.cmd）の設計仕様を記述したものである。

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

CIBuild.cmdは、CI（継続的インテグレーション）環境でのフルビルドを実行するためのWindowsバッチファイルである。このスクリプトはbuild.ps1を呼び出し、リストア、ビルド、テスト、署名、パッケージング、公開のすべてのビルドステップを一括で実行する。

**業務上の目的・背景**：CI/CDパイプラインでは、コード変更のたびに自動ビルドとテストを実行する必要がある。CIBuild.cmdは、Azure DevOps、GitHub Actions等のCIシステムから呼び出されることを想定し、完全なビルドパイプラインを単一のコマンドで実行可能にする。これにより、ビルド設定の一貫性を保ち、人為的ミスを防止する。

**バッチの実行タイミング**：CI/CDパイプラインによる自動実行。プルリクエスト作成時、マージ時、スケジュールビルド時など。

**主要な処理内容**：
1. PowerShellの起動（ExecutionPolicy ByPass、NoProfile）
2. Build.ps1の呼び出し
3. 以下のオプションをすべて有効化：
   - `-restore`: 依存関係のリストア
   - `-build`: ソリューションのビルド
   - `-test`: ユニットテストの実行
   - `-sign`: ビルド成果物への署名
   - `-pack`: NuGetパッケージの作成
   - `-publish`: 成果物の公開
   - `-ci`: CI環境モードの有効化

**前後の処理との関連**：CIパイプラインのビルドステップとして実行される。前処理としてソースコードのチェックアウト、後処理としてテスト結果の公開や成果物のアップロードが行われる。

**影響範囲**：リポジトリ全体のビルド、テスト実行、パッケージ生成、署名、公開処理に影響。

## バッチ種別

CI/CD / フルビルド

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | イベント駆動（PR作成、マージ、スケジュール） |
| 実行時刻 | CI/CDパイプライン設定に依存 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | CI/CDシステム |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Windows OS | Windows環境（CI Agentホスト） |
| PowerShell | PowerShell 5.1以上 |
| ネットワーク接続 | NuGetフィード、SDKダウンロード用 |
| CI環境変数 | Azure DevOps等の環境変数が設定されていること |

### 実行可否判定

特段の実行可否判定は行わない。CI環境から呼び出されることを前提とする。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| %* | string | No | なし | 追加のコマンドライン引数 |

固定で有効化されるオプション：
- -restore
- -build
- -test
- -sign
- -pack
- -publish
- -ci

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| global.json | JSON | SDKバージョン、ツールセット定義 |
| *.sln | MSBuild | ソリューションファイル |
| NuGet.config | XML | パッケージソース設定 |
| CI環境変数 | 環境変数 | BUILD_BUILDNUMBER等 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| artifacts/bin/ | ディレクトリ | ビルド成果物 |
| artifacts/packages/ | ディレクトリ | NuGetパッケージ |
| artifacts/log/ | ディレクトリ | ビルドログ、バイナリログ |
| artifacts/TestResults/ | ディレクトリ | テスト結果 |
| artifacts/symbols/ | ディレクトリ | シンボルファイル |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | Build.binlog（自動有効化） |
| 出力先 | artifacts/log/{Configuration}/ |
| 文字コード | バイナリ |
| 区切り文字 | 該当なし |

## 処理フロー

### 処理シーケンス

```
1. バッチファイル起動
   └─ @echo off
2. PowerShell起動
   ├─ ExecutionPolicy ByPass
   └─ NoProfile
3. Build.ps1実行
   ├─ -restore: 依存関係リストア
   ├─ -build: ソリューションビルド
   ├─ -test: ユニットテスト実行
   ├─ -sign: 署名処理
   ├─ -pack: パッケージ作成
   ├─ -publish: 成果物公開
   └─ -ci: CI環境設定（バイナリログ有効化、ノード再利用無効化）
4. 追加引数の処理
   └─ %* で透過的に転送
```

### フローチャート

```mermaid
flowchart TD
    A[CIBuild.cmd開始] --> B[PowerShell起動]
    B --> C[Build.ps1実行]
    C --> D[Restore]
    D --> E[Build]
    E --> F[Test]
    F --> G{テスト成功?}
    G -->|Yes| H[Sign]
    G -->|No| X[エラー終了]
    H --> I[Pack]
    I --> J[Publish]
    J --> K[正常終了]
    K --> Z[終了]
    X --> Z
```

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

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 非ゼロ | ビルドエラー | コンパイル失敗 | ログ確認、コード修正 |
| 非ゼロ | テストエラー | テスト失敗 | テスト結果確認、コード修正 |
| 非ゼロ | 署名エラー | 署名証明書の問題 | 証明書設定確認 |
| 非ゼロ | パッケージエラー | パッケージ作成失敗 | NuSpec/プロジェクト設定確認 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0回（CI側で制御） |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

1. Build.binlogをダウンロードしてMSBuild Binary Log Viewerで分析
2. Azure DevOpsのログから失敗ステップを特定
3. ローカル環境で同じコマンドを実行して再現
4. 必要に応じてverbosityを上げて再実行

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | プロジェクト全体 |
| 目標処理時間 | CI SLA依存（通常30分以内） |
| メモリ使用量上限 | CI Agent依存 |

## 排他制御

- CI環境では`-ci`オプションにより自動的にノード再利用が無効化される
- 同一Agentでの並列ビルドはCI設定で制御

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | ビルド開始時 | ビルド設定情報 |
| 進捗ログ | 各ステップ | MSBuild出力、テスト結果 |
| 終了ログ | ビルド終了時 | 結果サマリー |
| バイナリログ | 自動 | Build.binlog（CI時必須） |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ビルド時間 | CI SLA | チーム通知 |
| テスト失敗 | 1件以上 | PR作成者、チーム |
| ビルド失敗 | 1件以上 | PR作成者、チーム |

## 備考

- `-ci`オプションにより、バイナリログが自動的に有効化される
- CI環境ではノード再利用が自動的に無効化され、ビルドの独立性が保証される
- 署名処理にはCI環境で適切な証明書設定が必要
- publish処理はCI環境のフィード設定に依存
