# バッチ設計書 24-build_win64.bat (example_sdl3_vulkan)

## 概要

本ドキュメントは、SDL3 + Vulkanサンプルアプリケーションをwindows 64bit環境でビルドするためのバッチスクリプト `build_win64.bat` の設計書です。

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

このバッチは、Dear ImGuiライブラリのSDL3 + Vulkanバックエンドを使用したサンプルアプリケーションを、Microsoft Visual Studio C++コンパイラ（cl.exe）を用いてWindows 64bit向けにビルドします。

**業務上の目的・背景**：Dear ImGuiは、ゲームエンジンやツール開発で広く使用される即時モードGUIライブラリです。Vulkanは次世代のグラフィックスAPIであり、OpenGLよりも低レベルで効率的なGPU制御を提供します。SDL3とVulkanの組み合わせにより、高性能でクロスプラットフォームなGUIアプリケーションの開発が可能になります。64bit版は、より大きなメモリ空間を活用でき、現代の64bitシステムに最適化されたバイナリを生成します。

**バッチの実行タイミング**：開発者が手動でビルドを実行する際、または継続的インテグレーション（CI）パイプラインの一部として随時実行されます。GitHub Actionsワークフローからも呼び出されます。

**主要な処理内容**：
1. 環境変数の設定（出力ファイル名、インクルードパス、ソースファイル、ライブラリパス）
2. Debugディレクトリの作成
3. Visual Studio C++コンパイラ（cl.exe）によるコンパイルとリンク

**前後の処理との関連**：vcvars64.bat または vcvarsall.bat を事前に実行して、Visual Studioのコマンドライン環境を設定する必要があります。また、Vulkan SDKがインストールされていて、VULKAN_SDK環境変数が設定されている必要があります。

**影響範囲**：Debugディレクトリ配下に実行ファイル（.exe）とオブジェクトファイル（.obj）が生成されます。

## バッチ種別

ビルドスクリプト

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | 任意 |
| 実行曜日 | 任意 |
| 実行日 | 任意 |
| トリガー | 手動 / CI |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Visual Studio環境 | vcvars64.bat または vcvarsall.bat を実行済みであること |
| SDL3_DIR環境変数 | SDL3のインストールディレクトリを指す環境変数が設定されていること |
| VULKAN_SDK環境変数 | Vulkan SDKのインストールディレクトリを指す環境変数が設定されていること |
| SDL3ライブラリ | SDL3の64bit用ライブラリ（SDL3.lib）が利用可能であること |
| Vulkanライブラリ | Vulkanの64bit用ライブラリ（vulkan-1.lib）が利用可能であること |

### 実行可否判定

Visual Studioのコマンドライン環境が設定されており、SDL3_DIR環境変数とVULKAN_SDK環境変数が正しく設定されていることを確認後、実行可能。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| OUT_EXE | 環境変数 | No | example_sdl3_vulkan | 出力実行ファイル名 |
| OUT_DIR | 環境変数 | No | Debug | 出力ディレクトリ名 |
| SDL3_DIR | 環境変数 | Yes | なし | SDL3のインストールディレクトリ |
| VULKAN_SDK | 環境変数 | Yes | なし | Vulkan SDKのインストールディレクトリ |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| main.cpp | C++ソースファイル | サンプルアプリケーションのメインエントリポイント |
| imgui_impl_sdl3.cpp | C++ソースファイル | SDL3バックエンド実装 |
| imgui_impl_vulkan.cpp | C++ソースファイル | Vulkanバックエンド実装 |
| imgui*.cpp | C++ソースファイル | ImGuiコアライブラリ |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| Debug/example_sdl3_vulkan.exe | 実行ファイル | ビルドされたサンプルアプリケーション（64bit） |
| Debug/*.obj | オブジェクトファイル | 中間コンパイル成果物 |
| Debug/*.pdb | デバッグシンボル | デバッグ用シンボルファイル |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | example_sdl3_vulkan.exe |
| 出力先 | Debug/ |
| 文字コード | バイナリ（実行ファイル） |
| 区切り文字 | 該当なし |

## 処理フロー

### 処理シーケンス

```
1. 環境変数設定
   └─ OUT_EXE、INCLUDES、SOURCES、LIBS、OUT_DIRを設定
2. 出力ディレクトリ作成
   └─ mkdir %OUT_DIR%でDebugディレクトリを作成
3. コンパイル・リンク実行
   └─ cl.exeでソースをコンパイルし実行ファイルを生成
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[環境変数設定]
    B --> C[OUT_EXE=example_sdl3_vulkan]
    C --> D[INCLUDES設定 SDL3+Vulkan]
    D --> E[SOURCES設定]
    E --> F[LIBS設定 x64+Vulkan]
    F --> G[OUT_DIR=Debug]
    G --> H[mkdir Debug]
    H --> I[cl.exe コンパイル実行]
    I --> J{コンパイル成功?}
    J -->|成功| K[バッチ終了]
    J -->|失敗| L[エラー表示]
    L --> K
```

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

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

本バッチはデータベース操作を行いません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| コンパイルエラー | ビルドエラー | ソースコードに構文エラーがある | ソースコードを修正 |
| リンクエラー | ビルドエラー | ライブラリが見つからない | SDL3_DIRまたはVULKAN_SDKを正しく設定 |
| 環境設定エラー | 実行時エラー | vcvarsが未実行 | vcvars64.batを先に実行 |
| Vulkanヘッダエラー | コンパイルエラー | Vulkanヘッダが見つからない | VULKAN_SDKを正しく設定 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（手動再実行） |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

1. エラーメッセージを確認
2. 環境変数（SDL3_DIR、VULKAN_SDK）が正しく設定されているか確認
3. Visual Studio環境が正しく設定されているか確認
4. 必要なライブラリがインストールされているか確認
5. Vulkan SDKが正しくインストールされているか確認

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回のビルド |
| 目標処理時間 | 数秒〜数分 |
| メモリ使用量上限 | Visual Studioコンパイラ依存 |

## 排他制御

同一ディレクトリでの同時ビルドは推奨されません。出力ファイルの競合が発生する可能性があります。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| コンパイルログ | コンパイル中 | コンパイラからの標準出力 |
| エラーログ | エラー発生時 | コンパイラからのエラーメッセージ |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ビルド失敗 | 1回 | CI通知（GitHub Actions使用時） |

## 備考

- 32bit版（build_win32.bat）との違いはライブラリパス（lib\x64とlib）とvcvars64.batの使用です。
- Vulkan SDKは別途インストールが必要です（https://vulkan.lunarg.com/）。
- 64bit用のVulkanライブラリはlibディレクトリにあります（32bit版はlib32）。
- Releaseビルド用のコマンドはコメントアウトされています。必要に応じてコメントを解除して使用してください。
