# バッチ設計書 11-pre-dev-sfc.js

## 概要

本ドキュメントは、SFC Playground開発サーバ起動前に必要なCJSビルド成果物の存在を確認するスクリプト `scripts/pre-dev-sfc.js` のバッチ設計書である。

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

SFC（Single File Component）Playgroundの開発サーバを起動する前に、必要なコンパイラパッケージのCJSビルド成果物（distファイル）が存在するかどうかを検証する。不足している場合はプロセスを終了コード1で終了し、開発サーバの起動を中止する。

**業務上の目的・背景**：SFC Playgroundの開発サーバは、compiler-sfc、compiler-core、compiler-dom、compiler-ssr、sharedの5つのパッケージのCJSビルド成果物に依存している。これらのビルド成果物が存在しない状態で開発サーバを起動すると、実行時エラーが発生し開発効率が低下する。本バッチは、開発サーバ起動前の事前チェックとしてこの問題を未然に防止する。

**バッチの実行タイミング**：SFC Playground開発サーバ起動前に手動で実行される。package.jsonのスクリプト定義により、dev-sfc系コマンドの前処理として自動的に呼び出される。

**主要な処理内容**：
1. チェック対象パッケージリスト（compiler-sfc, compiler-core, compiler-dom, compiler-ssr, shared）を定義
2. 各パッケージの `packages/{pkg}/dist/{pkg}.cjs.js` ファイルの存在を `fs.existsSync` で確認
3. いずれかのファイルが存在しない場合、即座にループを中断しプロセスを終了コード1で終了
4. 全ファイルが存在する場合、正常終了（終了コード0）

**前後の処理との関連**：本バッチはSFC Playground開発サーバ起動コマンド（dev-sfc）の前処理として実行される。本バッチが失敗した場合、開発者はまず `pnpm build` を実行してビルド成果物を生成する必要がある。

**影響範囲**：SFC Playground開発環境の起動可否に影響する。プロダクションビルドやCI/CDには影響しない。

## バッチ種別

検証処理（前提条件チェック）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | 指定なし |
| 実行曜日 | 指定なし |
| 実行日 | 指定なし |
| トリガー | 手動（dev-sfcコマンドの前処理として自動呼出し） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Node.js実行環境 | ESM対応のNode.jsランタイムが利用可能であること |
| packagesディレクトリ | プロジェクトルート配下にpackagesディレクトリが存在すること |

### 実行可否判定

特別な実行可否判定は行わない。dev-sfcコマンドのpre処理として無条件に実行される。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | コマンドライン引数は受け取らない |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| packages/compiler-sfc/dist/compiler-sfc.cjs.js | ファイル | compiler-sfcのCJSビルド成果物 |
| packages/compiler-core/dist/compiler-core.cjs.js | ファイル | compiler-coreのCJSビルド成果物 |
| packages/compiler-dom/dist/compiler-dom.cjs.js | ファイル | compiler-domのCJSビルド成果物 |
| packages/compiler-ssr/dist/compiler-ssr.cjs.js | ファイル | compiler-ssrのCJSビルド成果物 |
| packages/shared/dist/shared.cjs.js | ファイル | sharedのCJSビルド成果物 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| プロセス終了コード | 終了コード | 0: 全ファイル存在、1: 不足ファイルあり |

### 出力ファイル仕様

ファイル出力はなし。プロセスの終了コードのみで結果を通知する。

## 処理フロー

### 処理シーケンス

```
1. チェック対象パッケージリスト定義
   └─ compiler-sfc, compiler-core, compiler-dom, compiler-ssr, shared の5パッケージ
2. allFilesPresent フラグを true に初期化
3. 各パッケージのdistファイル存在チェック（ループ）
   └─ packages/{pkg}/dist/{pkg}.cjs.js の存在を fs.existsSync で確認
   └─ 存在しない場合: allFilesPresent を false に設定し break
4. allFilesPresent が false の場合
   └─ process.exit(1) で異常終了
5. allFilesPresent が true の場合
   └─ 正常終了（暗黙的に終了コード0）
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[チェック対象パッケージリスト定義]
    B --> C[allFilesPresent = true]
    C --> D{次のパッケージあり?}
    D -->|あり| E{dist/{pkg}.cjs.js 存在?}
    E -->|存在する| D
    E -->|存在しない| F[allFilesPresent = false]
    F --> G[process.exit 1 で異常終了]
    D -->|なし| H[正常終了 exit 0]
```

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

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

データベース操作なし。本バッチはファイルシステムの存在確認のみを行う。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| exit(1) | ファイル不在エラー | チェック対象パッケージのdistファイルが1つでも存在しない場合 | `pnpm build` を実行してビルド成果物を生成する |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（リトライ機構なし） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

### 障害時対応

ビルド成果物が不足している場合は、`pnpm build` コマンドを実行して必要なパッケージのビルドを行った後、再度dev-sfcコマンドを実行する。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし（読み取り専用処理） |
| コミットタイミング | - |
| ロールバック条件 | - |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 5ファイル（固定） |
| 目標処理時間 | 1秒未満 |
| メモリ使用量上限 | 最小限（ファイル存在確認のみ） |

## 排他制御

排他制御は不要。読み取り専用のファイル存在確認のみのため、同時実行しても問題ない。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| なし | - | 本バッチはログ出力を行わない。終了コードのみで結果を通知する |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| なし | - | 開発者向けスクリプトのため監視対象外 |

## 備考

- 本スクリプトはESM形式（`import`文使用）で記述されている
- `import.meta.url` を基点としたファイルパス解決を行っている
- `@ts-check` によるJSDoc型チェックが有効化されている
- チェック対象の5パッケージはSFC Playgroundの動作に必要最低限のコンパイラコンポーネントである
