# バッチ設計書 43-gulp build-dev

## 概要

本ドキュメントは、Babelプロジェクトにおける開発用ビルドバッチ `gulp build-dev` の設計について記載する。このバッチはRollupによるバンドルを省略し、開発中のイテレーションを高速化するためのビルドを実行する。

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

**業務上の目的・背景**：開発者が日常的なコード変更を素早くビルドし、テスト実行できるようにするためのバッチである。フルビルド（gulp build）と比較してRollupバンドル処理を省略することで、ビルド時間を大幅に短縮している。これにより開発サイクルが高速化され、開発者の生産性が向上する。開発環境でのデバッグやテストに最適化されている。

**バッチの実行タイミング**：開発者がローカル環境で手動実行。コード変更後の確認、テスト実行前の準備、開発中の頻繁なビルドに使用される。`gulp watch` の初回ビルドとしても使用される。

**主要な処理内容**：
1. build-no-bundle: ワーカープロセスを使用したBabelによるソースコンパイル（バンドルなし）
2. 並列実行される処理群：
   - generate-standalone: @babel/standaloneプラグインリスト生成
   - generate-runtime-helpers: @babel/helpersランタイムヘルパー生成
   - generate-helper-globals-data: グローバルヘルパーデータ生成
   - generate-type-helpers → build-no-bundle: 型ヘルパー生成後に再ビルド
   - bundle-babel-parser-dts: babel-parser型定義バンドル

**前後の処理との関連**：`gulp watch` タスクでは、初回ビルドとして `build-dev` が実行され、その後ファイル変更の監視が開始される。テスト実行前のビルドとして `make build-no-bundle-ci` から参照される。

**影響範囲**：packages、codemods、eslintディレクトリ配下の全パッケージのlib/ディレクトリにビルド成果物が生成される。ただしESMバンドルは生成されないため、一部の動作確認には不十分な場合がある。

## バッチ種別

ビルド処理（開発用）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（開発者の手動実行） |
| 実行時刻 | N/A |
| 実行曜日 | N/A |
| 実行日 | N/A |
| トリガー | 手動（yarn gulp build-dev）またはgulp watch経由 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Node.js環境 | Node.js 20以上が必要 |
| 依存関係インストール済み | `yarn install` によりnode_modulesが構築済みであること |
| ディスク容量 | ビルド成果物のための十分なディスク容量 |

### 実行可否判定

package.jsonとyarn.lockが存在し、node_modulesが正しく構築されていればビルドは実行可能。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| WATCH_SKIP_BUILD | 環境変数 | No | false | trueでビルドエラーを例外として投げず、ログ出力のみ |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| packages/*/src/**/*.ts | TypeScript | 各パッケージのソースコード |
| codemods/*/src/**/*.ts | TypeScript | codemodのソースコード |
| eslint/*/src/**/*.ts | TypeScript | ESLintプラグインのソースコード |
| packages/babel-types/lib/definitions/**/*.js | JavaScript | 型定義生成の入力 |
| packages/babel-helpers/src/helpers/* | TypeScript/JavaScript | ヘルパーソース |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| packages/*/lib/ | JavaScript | コンパイル済みのJSファイル（バンドルなし） |
| packages/babel-types/src/*/generated/ | TypeScript | 生成された型ヘルパー |
| packages/babel-helpers/src/helpers-generated.ts | TypeScript | 生成されたランタイムヘルパー |
| packages/babel-standalone/src/generated/plugins.ts | TypeScript | 生成されたプラグインリスト |
| packages/babel-parser/typings/babel-parser.d.ts | TypeScript | バンドルされた型定義 |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | 元ファイル名の拡張子を.ts→.js等に変換 |
| 出力先 | src/をlib/に置換したパス |
| 文字コード | UTF-8 |
| 区切り文字 | N/A |

## 処理フロー

### 処理シーケンス

```
1. build-no-bundle
   └─ ワーカープロセスでBabelコンパイル実行

2. 並列実行フェーズ
   ├─ generate-standalone
   │   └─ pluginConfig.jsonからplugins.ts生成
   ├─ generate-runtime-helpers
   │   └─ helpers/配下からhelpers-generated.ts生成
   ├─ generate-helper-globals-data
   │   └─ グローバルヘルパーデータJSON生成
   ├─ generate-type-helpers → build-no-bundle（直列）
   │   └─ 型ヘルパー生成後、@babel/types再ビルド
   └─ bundle-babel-parser-dts
       └─ babel-parser型定義をバンドル
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[build-no-bundle<br>Babelコンパイル]
    B --> C{並列実行}
    C --> D[generate-standalone]
    C --> E[generate-runtime-helpers]
    C --> F[generate-helper-globals-data]
    C --> G[generate-type-helpers]
    C --> H[bundle-babel-parser-dts]
    G --> I[build-no-bundle<br>再ビルド]
    D --> J[バッチ終了]
    E --> J
    F --> J
    I --> J
    H --> J
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | TypeScriptコンパイルエラー | 型エラーがある場合 | ソースコードの型エラーを修正 |
| - | ヘルパー生成エラー | テンプレートファイル不正時 | 定義ファイルの内容を確認 |
| - | ファイルシステムエラー | 権限不足またはディスク容量不足 | 権限確認、ディスク容量確保 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0（リトライなし） |
| リトライ間隔 | N/A |
| リトライ対象エラー | N/A |

### 障害時対応

ビルド失敗時は `make clean-lib` でビルド成果物をクリーンアップし、再度ビルドを試行する。WATCH_SKIP_BUILDを設定している場合は、エラーが発生してもプロセスは継続する。

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

本バッチはデータベーストランザクションを使用しない。

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 約150パッケージ |
| 目標処理時間 | 1〜3分（フルビルドより高速） |
| メモリ使用量上限 | 2GB〜4GB |

## 排他制御

同一ディレクトリでの同時ビルドは推奨されない。jest-workerによる並列コンパイル時は、CPUコア数の半分をワーカーに割り当てる。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | 各ヘルパー生成開始時 | Generating @babel/xxx ... |
| 完了ログ | 各ヘルパー生成完了時 | Generated @babel/types -> xxx |
| エラーログ | エラー発生時 | エラーメッセージ（WATCH_SKIP_BUILD時はログのみ） |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| N/A | N/A | ローカル開発用のため監視対象外 |

## 備考

- build-devはbuild-no-bundleを使用するため、Rollupバンドルは生成されない
- 開発中は個別ファイルのトランスパイルで十分であり、パフォーマンスが向上する
- babel-parser.d.tsの生成はbundle-babel-parser-dtsタスクで行われる
- WATCH_SKIP_BUILD環境変数により、watchモードでのエラー処理が柔軟になる
