# バッチ設計書 3-make.lua

## 概要

本ドキュメントは、lua-language-serverプロジェクトのビルド設定を定義する「make.lua」の設計仕様を定義するものである。

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

make.luaは、luamakeビルドシステムの設定ファイルであり、lua-language-serverプロジェクト全体のビルド定義を記述する。実行可能ファイルの生成、依存関係の管理、テスト実行の定義などを行う。このファイル自体は直接実行されず、luamakeツールによって読み込まれてビルドプロセスを制御する。

**業務上の目的・背景**：複雑なビルドプロセスを宣言的に定義し、クロスプラットフォーム対応のビルドを実現するために必要である。luamakeはLuaベースのビルドシステムであり、MakefileやCMakeに相当する機能を提供する。このファイルにより、開発者はビルド設定を一元管理できる。

**バッチの実行タイミング**：make.shまたはmake.batの実行時にluamakeによって読み込まれる。ビルド設定を変更した場合は、再度ビルドを実行する必要がある。

**主要な処理内容**：
1. コンパイラ設定（C標準、C++標準、Lua互換性レベル）の定義
2. サニタイザオプションの設定（オプション）
3. 依存ライブラリ（bee.lua、lpeglabel、code_format）のビルド定義
4. lua-language-server実行可能ファイルのビルド定義
5. ビルド成果物のコピー処理定義
6. テスト実行ルールの定義

**前後の処理との関連**：make.shまたはmake.batから呼び出されるluamakeがこのファイルを読み込む。ビルド完了後、bin/ディレクトリに成果物が出力される。

**影響範囲**：ビルドプロセス全体に影響。コンパイラフラグ、リンカフラグ、出力パス、依存関係すべてがこのファイルで制御される。

## バッチ種別

ビルド設定

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（luamake実行時） |
| 実行時刻 | 任意 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | luamake実行時に読み込み |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| luamake | luamakeビルドツールがビルド済みであること |
| 依存サブモジュール | 3rd/bee.lua等のサブモジュールが初期化済みであること |
| コンパイラ | C/C++コンパイラがインストールされていること |

### 実行可否判定

luamakeコマンドによって自動的に読み込まれるため、特別な判定は不要。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| lm.sanitize | boolean | No | nil | アドレスサニタイザを有効化 |
| lm.notest | boolean | No | nil | テスト実行をスキップ |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| 3rd/bee.lua/make.lua | Lua | bee.luaライブラリのビルド定義 |
| make/code_format.lua | Lua | コードフォーマッタのビルド定義 |
| make/detect_platform.lua | Lua | プラットフォーム検出ロジック |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| $bin/lua-language-server | 実行可能ファイル | ビルド中間成果物 |
| bin/lua-language-server | 実行可能ファイル | 最終成果物（コピー後） |
| bin/main.lua | Luaファイル | ブートストラップスクリプト |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | lua-language-server（Windowsでは.exe付き） |
| 出力先 | bin/ |
| 文字コード | バイナリ |
| 区切り文字 | 該当なし |

## 処理フロー

### 処理シーケンス

```
1. コンパイラ設定
   └─ C標準（MSVC: c89、その他: c11）、C++17、Lua 5.5
2. サニタイザ設定（オプション）
   └─ デバッグモード有効化、-fsanitize=addressフラグ追加
3. プラットフォーム検出
   └─ make/detect_platform.luaを読み込み
4. 依存ライブラリインポート
   └─ bee.lua、code_formatのビルド定義を読み込み
5. lpeglabelソースセット定義
   └─ 3rd/lpeglabel/*.cをビルド
6. lua-language-server実行ファイル定義
   └─ 依存関係、インクルードパス、ソースファイルを指定
7. コピータスク定義
   └─ ビルド成果物をbin/にコピー
8. テストルール定義（notestでない場合）
   └─ bee-test、unit-testの実行ルール
```

### フローチャート

```mermaid
flowchart TD
    A[make.lua読み込み開始] --> B[コンパイラ設定]
    B --> C{sanitizeオプション?}
    C -->|Yes| D[デバッグモード・サニタイザ設定]
    C -->|No| E[通常モード]
    D --> F[プラットフォーム検出]
    E --> F
    F --> G[依存ライブラリインポート]
    G --> H[lpeglabelビルド定義]
    H --> I[lua-language-serverビルド定義]
    I --> J[コピータスク定義]
    J --> K{notestオプション?}
    K -->|Yes| L[allをデフォルトに設定]
    K -->|No| M[テストルール定義]
    M --> N[unit-testをデフォルトに設定]
    L --> O[完了]
    N --> O
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 1 | 構文エラー | Lua構文エラー | make.luaの構文を確認 |
| 1 | 依存関係エラー | インポートファイル不在 | サブモジュールを初期化 |
| 1 | コンパイルエラー | ソースコードエラー | エラーメッセージに従い修正 |

### リトライ仕様

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

### 障害時対応

設定ファイルのエラーはluamakeが詳細なエラーメッセージを出力する。構文エラーの場合は行番号が表示される。

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | ビルド設定読み込み1回 |
| 目標処理時間 | 即時（設定読み込みのみ） |
| メモリ使用量上限 | luamakeプロセス依存 |

## 排他制御

luamakeプロセス単位で排他制御される。同一ディレクトリでの並列ビルドは非推奨。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 標準出力 | ビルド中 | コンパイル対象ファイル、進捗 |
| 標準エラー | エラー発生時 | コンパイルエラー詳細 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 該当なし | 該当なし | 該当なし |

## 備考

- CODE_FORMATマクロが定義される場合、コードフォーマット機能が有効化される
- Linuxでは静的CRTリンク（-rdynamic）が適用される
- Lua 5.5互換モード（lm.lua = '55'）で動作
- MAXRECLEVELは1000に設定（lpeglabelの再帰制限）
