# バッチ設計書 51-Makefile (example_sdl3_sdlrenderer3)

## 概要

本ドキュメントは、SDL3 + SDL Renderer3を使用したImGuiサンプルアプリケーションをビルドするためのMakefileバッチ処理について定義する設計書である。

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

このMakefileは、SDL3ライブラリとSDL Renderer3レンダリングバックエンドを組み合わせたImGuiサンプルアプリケーションをビルドするためのクロスプラットフォーム対応ビルドスクリプトである。

**業務上の目的・背景**：SDL3は次世代のSDLライブラリであり、SDL Renderer3はSDL3に対応した新しいレンダリングAPIである。開発者がImGuiをSDL3/SDL Renderer3環境で利用する際のリファレンス実装およびテスト環境を提供するために本バッチが必要である。GPU非依存のソフトウェアレンダリングを含むため、幅広い環境での動作確認が可能となる。

**バッチの実行タイミング**：手動トリガーによる随時実行。開発者がサンプルのビルド・テストを行う際に実行する。CI/CDパイプラインからも実行される可能性がある。

**主要な処理内容**：
1. プラットフォーム検出（Linux/macOS/Windows MinGW）
2. ImGuiコアソースファイル（imgui.cpp, imgui_demo.cpp, imgui_draw.cpp, imgui_tables.cpp, imgui_widgets.cpp）のコンパイル
3. SDL3およびSDL Renderer3バックエンド（imgui_impl_sdl3.cpp, imgui_impl_sdlrenderer3.cpp）のコンパイル
4. サンプルアプリケーションmain.cppのコンパイル
5. オブジェクトファイルのリンクと実行ファイル生成

**前後の処理との関連**：前提としてSDL3ライブラリがシステムにインストールされている必要がある。SDL3は現時点で未リリース/未パッケージ化のため、ソースからのビルドが必要な場合がある。

**影響範囲**：ローカルディレクトリ内に実行ファイル（example_sdl3_sdlrenderer3）とオブジェクトファイル（.o）が生成される。システム全体への影響はない。

## バッチ種別

ビルドスクリプト / コンパイル処理

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | - |
| 実行曜日 | - |
| 実行日 | - |
| トリガー | 手動（make コマンド） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| SDL3インストール | SDL3ライブラリがシステムにインストールされていること |
| pkg-config設定 | SDL3のpkg-config設定が有効であること |
| C++コンパイラ | g++またはclang++が利用可能であること |
| Make | GNU Makeが利用可能であること |

### 実行可否判定

- `pkg-config sdl3 --cflags`および`pkg-config sdl3 --libs`が正常に実行できること
- C++11対応コンパイラが存在すること

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| CXX | 環境変数 | No | システムデフォルト | C++コンパイラ（g++/clang++） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| main.cpp | ソースファイル | サンプルアプリケーションのエントリポイント |
| imgui.cpp | ソースファイル | ImGuiコアライブラリ |
| imgui_demo.cpp | ソースファイル | ImGuiデモウィンドウ |
| imgui_draw.cpp | ソースファイル | ImGui描画処理 |
| imgui_tables.cpp | ソースファイル | ImGuiテーブル機能 |
| imgui_widgets.cpp | ソースファイル | ImGuiウィジェット |
| imgui_impl_sdl3.cpp | ソースファイル | SDL3プラットフォームバックエンド |
| imgui_impl_sdlrenderer3.cpp | ソースファイル | SDL Renderer3レンダリングバックエンド |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| example_sdl3_sdlrenderer3 | 実行ファイル | ビルドされたサンプルアプリケーション |
| *.o | オブジェクトファイル | 中間コンパイル成果物 |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | example_sdl3_sdlrenderer3 |
| 出力先 | examples/example_sdl3_sdlrenderer3/ |
| 形式 | プラットフォーム固有の実行ファイル |

## 処理フロー

### 処理シーケンス

```
1. プラットフォーム検出
   └─ uname -s コマンドでOS判定（Linux/Darwin/Windows_NT）
2. コンパイルフラグ設定
   └─ プラットフォームに応じたCXXFLAGS/LIBSの設定
3. pkg-config呼び出し
   └─ SDL3のインクルードパスとライブラリパスを取得
4. ソースファイルコンパイル
   └─ 各.cppファイルを.oファイルにコンパイル
5. リンク処理
   └─ 全オブジェクトファイルをリンクして実行ファイル生成
6. ビルド完了メッセージ出力
   └─ "Build complete for [Platform]" を表示
```

### フローチャート

```mermaid
flowchart TD
    A[make 実行開始] --> B[プラットフォーム検出]
    B --> C{OS判定}
    C -->|Linux| D[Linux用フラグ設定]
    C -->|Darwin| E[macOS用フラグ設定]
    C -->|Windows_NT| F[MinGW用フラグ設定]
    D --> G[pkg-config実行]
    E --> G
    F --> G
    G --> H[ソースファイルコンパイル]
    H --> I[オブジェクトファイル生成]
    I --> J[リンク処理]
    J --> K[実行ファイル生成]
    K --> L[ビルド完了]
```

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

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

該当なし（本バッチはファイルシステム操作のみ）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | コンパイルエラー | ソースコードの構文エラー | ソースコードの修正 |
| - | リンクエラー | ライブラリが見つからない | SDL3のインストール確認 |
| - | pkg-config失敗 | SDL3の設定がない | SDL3のpkg-config設定を確認 |

### リトライ仕様

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

### 障害時対応

1. エラーメッセージを確認し、不足しているライブラリをインストール
2. pkg-configのパス設定を確認
3. コンパイラのバージョンを確認（C++11対応必須）

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

該当なし（ファイルシステム操作のみ）

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 8ソースファイル |
| 目標処理時間 | 数分以内 |
| メモリ使用量上限 | コンパイラ依存 |

## 排他制御

同一ディレクトリでの同時ビルドは推奨されない。オブジェクトファイルの競合が発生する可能性がある。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 進捗ログ | コンパイル時 | コンパイルコマンド（暗黙的） |
| 終了ログ | ビルド完了時 | "Build complete for [Platform]" |
| エラーログ | エラー発生時 | コンパイラ/リンカのエラーメッセージ |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| - | - | - |

手動実行のため、自動監視は設定されていない。

## 備考

- SDL3はまだ未リリースのため、pkg-config設定はソースからのビルド時に手動設定が必要な場合がある
- MSYS2/MinGW環境でのWindows対応
- `make clean`コマンドで生成ファイルの削除が可能
- コンパイラは`CXX`変数で切り替え可能（g++/clang++）
