# バッチ設計書 22-build_win64.bat (example_sdl3_opengl3)

## 概要

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

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

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

**業務上の目的・背景**：Dear ImGuiは、ゲームエンジンやツール開発で広く使用される即時モードGUIライブラリです。SDL3は最新のマルチメディアライブラリであり、OpenGL3と組み合わせることで、クロスプラットフォームな高性能GUIアプリケーションの開発が可能になります。64bit版は、より大きなメモリ空間を活用でき、現代の64bitシステムに最適化されたバイナリを生成します。このバッチは、開発者がコマンドラインから簡単にサンプルをビルドできるようにし、開発効率を向上させることを目的としています。

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

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

**前後の処理との関連**：vcvars64.bat または vcvarsall.bat を事前に実行して、Visual Studioのコマンドライン環境を設定する必要があります。ビルド成功後は実行可能ファイルが生成され、テストや配布に使用できます。

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

## バッチ種別

ビルドスクリプト

## 実行スケジュール

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

## 実行条件

### 前提条件

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

### 実行可否判定

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

## 入力仕様

### 入力パラメータ

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

### 入力データソース

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

## 出力仕様

### 出力データ

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

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | example_sdl3_opengl3.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_opengl3]
    C --> D[INCLUDES設定]
    D --> E[SOURCES設定]
    E --> F[LIBS設定 x64]
    F --> G[OUT_DIR=Debug]
    G --> H[mkdir Debug]
    H --> I[cl.exe コンパイル実行]
    I --> J{コンパイル成功?}
    J -->|成功| K[バッチ終了]
    J -->|失敗| L[エラー表示]
    L --> K
```

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

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

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

## エラー処理

### エラーケース一覧

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

### リトライ仕様

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

### 障害時対応

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

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

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

## パフォーマンス要件

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

## 排他制御

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

## ログ出力

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

## 監視・アラート

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

## 備考

- 32bit版（build_win32.bat）との違いはライブラリパス（lib\x64）とvcvars64.batの使用です。
- Releaseビルド用のコマンドはコメントアウトされています。必要に応じてコメントを解除して使用してください。
- 最適化オプション（/Ox /Oi）はReleaseビルドでのみ有効です。
