# バッチ設計書 9-aliases.js

## 概要

本ドキュメントは、Vue.jsプロジェクトのパッケージエイリアス定義スクリプト `scripts/aliases.js` の設計仕様を定義するバッチ設計書である。

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

本バッチは、vitestとRollupで共有するパッケージエイリアス（エントリポイント解決マッピング）を定義するユーティリティモジュールである。`packages/` ディレクトリを走査し、各パッケージの `src/index.ts` へのエイリアスを自動生成する。

**業務上の目的・背景**：Vue.jsモノレポは多数のパッケージで構成されており、テストランナー（vitest）やバンドラー（Rollup）がパッケージ間の依存関係を正しく解決するためには、npmパッケージ名（例: `@vue/compiler-core`）から実際のソースディレクトリ（例: `packages/compiler-core/src/index.ts`）へのマッピングが必要である。本バッチはこのマッピングを自動生成し、テストとビルドの両方で一貫したモジュール解決を実現する。

**バッチの実行タイミング**：モジュールとしてimport時に実行される。テストランナー（vitest）の設定ファイルやRollup設定ファイルからimportされた時点でエイリアスマップが生成される。

**主要な処理内容**：
1. `packages/` ディレクトリの走査
2. 事前定義済みエイリアス（vue, vue/compiler-sfc, vue/server-renderer, @vue/compat）の設定
3. 非ソースパッケージ（sfc-playground, template-explorer, dts-test）の除外
4. 各パッケージに対する `@vue/{dir}` → `packages/{dir}/src/index.ts` のマッピング生成

**前後の処理との関連**：生成されたエイリアスマップは、vitest.config.ts（テスト設定）およびrollup.config.js（ビルド設定）で使用される。テスト実行時およびビルド時のモジュール解決に影響する。

**影響範囲**：テストおよびビルド時のモジュール解決パスに影響する。ファイルシステムへの書き込みは行わない。

## バッチ種別

ユーティリティ（モジュール解決定義）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | import時（テスト・ビルド実行時） |
| 実行時刻 | - |
| 実行曜日 | - |
| 実行日 | - |
| トリガー | モジュールimport（vitest, Rollup等） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Node.js実行環境 | Node.jsがインストールされていること |
| packagesディレクトリ | `packages/` ディレクトリが存在すること |
| パッケージ構造 | 各パッケージに `src/index.ts` が存在すること |

### 実行可否判定

`packages/` ディレクトリが存在し読み取り可能であれば実行可能。特別な判定ロジックはない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| - | - | - | - | コマンドライン引数なし（モジュールとして使用） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| packages/ ディレクトリ | ファイルシステム | パッケージ一覧の走査元 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| entries（エクスポート） | Record<string, string> | パッケージ名 → src/index.tsパスのマッピング |

### 出力ファイル仕様

本バッチはファイル出力を行わない。モジュールエクスポートとしてデータを提供する。

## 処理フロー

### 処理シーケンス

```
1. 事前定義エイリアスの設定
   └─ vue → packages/vue/src/index.ts
   └─ vue/compiler-sfc → packages/compiler-sfc/src/index.ts
   └─ vue/server-renderer → packages/server-renderer/src/index.ts
   └─ @vue/compat → packages/vue-compat/src/index.ts
2. 除外パッケージリストの定義
   └─ sfc-playground, template-explorer, dts-test
3. packages/ディレクトリの走査
   └─ readdirSyncで全エントリを取得
4. 各ディレクトリに対するエイリアス生成
   └─ 条件チェック:
       - 'vue' ディレクトリはスキップ（事前定義済み）
       - nonSrcPackagesに含まれるディレクトリはスキップ
       - 既にentriesに登録済みのキーはスキップ
       - ディレクトリでないエントリはスキップ
   └─ @vue/{dir} → packages/{dir}/src/index.ts のマッピングを追加
5. entriesオブジェクトをエクスポート
```

### フローチャート

```mermaid
flowchart TD
    A[モジュール読み込み] --> B[事前定義エイリアス設定]
    B --> C[除外パッケージリスト定義]
    C --> D[packages/ディレクトリ走査]
    D --> E[各ディレクトリをループ]
    E --> F{vueディレクトリ?}
    F -->|Yes| G[スキップ]
    F -->|No| H{除外パッケージ?}
    H -->|Yes| G
    H -->|No| I{既に登録済み?}
    I -->|Yes| G
    I -->|No| J{ディレクトリ?}
    J -->|No| G
    J -->|Yes| K[エイリアス追加]
    K --> E
    G --> E
    E --> L[entriesエクスポート]
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ディレクトリ読み取りエラー | packages/ディレクトリが存在しない | プロジェクトの構成を確認 |
| - | statSyncエラー | ファイルシステムアクセスエラー | ファイルパーミッションを確認 |

### リトライ仕様

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

### 障害時対応

packages/ディレクトリの読み取りに失敗した場合、モジュールのimport自体がエラーとなる。プロジェクトのディレクトリ構成を確認する。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | - |
| コミットタイミング | - |
| ロールバック条件 | 読み取り専用のため不要 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | packages/ディレクトリ内のパッケージ数 |
| 目標処理時間 | ミリ秒単位（ディレクトリ走査のみ） |
| メモリ使用量上限 | 明示的な制限なし |

## 排他制御

読み取り専用の処理のため、排他制御は不要。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| - | - | ログ出力なし |

## 監視・アラート

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

## 備考

- `import.meta.url` を基準としたパス解決を使用（ESモジュール対応）
- `resolveEntryForPkg` 関数で各パッケージの `src/index.ts` への絶対パスを生成
- 事前定義済みの4つのエイリアスは特殊なマッピング（パッケージ名とディレクトリ名が異なるケース等）
- `nonSrcPackages` に含まれるパッケージ（sfc-playground, template-explorer, dts-test）は `src/index.ts` を持たないため除外
- `statSync` でディレクトリかどうかを確認し、ファイルは除外
- vitestとRollupの両方で同じエイリアスマップを共有することで、テストとビルドの整合性を保証
