# バッチ設計書 14-test.yml

## 概要

本ドキュメントは、GitHub Actionsによるテストワークフロー `.github/workflows/test.yml` のバッチ設計書である。ユニットテスト（Linux/Windows）、E2Eテスト、lint、型宣言テストを実行する再利用可能ワークフローである。

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

Vueプロジェクトの品質検証を包括的に実行する再利用可能ワークフロー（reusable workflow）である。`workflow_call` トリガーにより他のワークフロー（ci.yml, release.yml等）から呼び出され、4つの並行ジョブでテスト・検証を実行する。

**業務上の目的・背景**：Vueプロジェクトのコード品質を複数の観点から自動検証する。ユニットテストによる機能検証、E2Eテストによる統合検証、lintによるコード品質チェック、型宣言テストによる型定義の正確性検証を一括で行うことで、リグレッションの早期検出と品質担保を実現する。再利用可能ワークフローとして設計することで、CI・リリースなど複数のシナリオで同一のテストスイートを使用できる。

**バッチの実行タイミング**：`workflow_call` により他のワークフローから呼び出される際に実行される。直接的なトリガー（push/PR等）は持たない。

**主要な処理内容**：
1. unit-test（Linux）：ubuntu-latest上で全ユニットテストを実行する
2. unit-test-windows：windows-latest上でcompilerとserver-rendererのユニットテストを実行する
3. e2e-test：Puppeteerを使用したE2Eテストとtree-shaking検証を実行する
4. lint-and-test-dts：eslint、prettier、tsc、型宣言テストを実行する

**前後の処理との関連**：ci.ymlおよびrelease.ymlから再利用可能ワークフローとして呼び出される。E2EテストジョブではPuppeteerのChromiumバイナリキャッシュを使用し、tree-shaking検証スクリプト（`scripts/verify-treeshaking.js`）も実行する。

**影響範囲**：呼び出し元ワークフロー全体のステータス（成功/失敗）に影響する。テスト失敗時は呼び出し元のワークフローも失敗となる。

## バッチ種別

CI/CD（テスト自動化・品質検証）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | イベント駆動（workflow_call） |
| 実行時刻 | 指定なし（呼び出し元に依存） |
| 実行曜日 | 指定なし |
| 実行日 | 指定なし |
| トリガー | workflow_call（再利用可能ワークフロー） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| GitHub Actionsランナー | ubuntu-latest および windows-latest が利用可能であること |
| permissions | contents: read が設定されていること |
| Puppeteerキャッシュ | E2Eテスト用のChromiumバイナリがキャッシュまたはダウンロード可能であること |

### 実行可否判定

`workflow_call` で呼び出された場合に無条件で実行される。個別ジョブレベルでの実行可否判定はない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | workflow_callの入力パラメータ定義なし |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| ソースコード | Git | リポジトリの全ソースコード |
| .node-version | テキスト | Node.jsバージョン指定ファイル |
| pnpm-lock.yaml | YAML | 依存関係ロックファイル（Chromiumキャッシュキー生成にも使用） |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| GitHub Actions実行結果 | ステータス | 各ジョブの成功/失敗ステータス |

### 出力ファイル仕様

直接的なファイル出力はなし。

## 処理フロー

### 処理シーケンス

```
1. unit-test ジョブ（ubuntu-latest）
   ├─ チェックアウト
   ├─ pnpm / Node.js セットアップ
   ├─ pnpm install
   └─ pnpm run test-unit
2. unit-test-windows ジョブ（windows-latest）※ジョブ1と並行
   ├─ チェックアウト
   ├─ pnpm / Node.js セットアップ
   ├─ pnpm install
   ├─ pnpm run test-unit compiler
   └─ pnpm run test-unit server-renderer
3. e2e-test ジョブ（ubuntu-latest）※ジョブ1,2と並行
   ├─ チェックアウト
   ├─ Chromiumバイナリキャッシュ設定
   ├─ pnpm / Node.js セットアップ
   ├─ pnpm install
   ├─ Puppeteer Chromiumインストール
   ├─ pnpm run test-e2e
   └─ node scripts/verify-treeshaking.js
4. lint-and-test-dts ジョブ（ubuntu-latest）※ジョブ1,2,3と並行
   ├─ チェックアウト
   ├─ pnpm / Node.js セットアップ
   ├─ pnpm install
   ├─ pnpm run lint（eslint）
   ├─ pnpm run format-check（prettier）
   ├─ pnpm run check（tsc）
   └─ pnpm run test-dts（型宣言テスト）
```

### フローチャート

```mermaid
flowchart TD
    A[workflow_call] --> B[unit-test]
    A --> C[unit-test-windows]
    A --> D[e2e-test]
    A --> E[lint-and-test-dts]
    B --> B1[pnpm run test-unit]
    C --> C1[test-unit compiler]
    C --> C2[test-unit server-renderer]
    D --> D1[Chromiumキャッシュ/インストール]
    D1 --> D2[pnpm run test-e2e]
    D2 --> D3[verify-treeshaking.js]
    E --> E1[pnpm run lint]
    E1 --> E2[pnpm run format-check]
    E2 --> E3[pnpm run check]
    E3 --> E4[pnpm run test-dts]
    B1 --> F[全ジョブ完了]
    C2 --> F
    D3 --> F
    E4 --> F
```

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

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

データベース操作なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ユニットテスト失敗 | test-unitのテストケースが失敗した場合 | テスト失敗の原因を調査し修正する |
| - | E2Eテスト失敗 | test-e2eのテストケースが失敗した場合 | ブラウザテストの失敗原因を調査する |
| - | lint失敗 | eslintまたはprettierのチェックが失敗した場合 | コードフォーマットを修正する |
| - | 型チェック失敗 | tscまたはtest-dtsが失敗した場合 | 型定義を修正する |
| - | tree-shaking検証失敗 | verify-treeshaking.jsが失敗した場合 | ビルド出力のtree-shaking問題を修正する |

### リトライ仕様

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

### 障害時対応

GitHub Actionsのジョブログを確認し、失敗したテストケースを特定して修正する。各ジョブは独立して実行されるため、失敗したジョブのログのみを確認すればよい。

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 4ジョブ並行実行 |
| 目標処理時間 | GitHub Actionsの実行時間制限内 |
| メモリ使用量上限 | GitHub Actionsランナーのデフォルトリソースに依存 |

## 排他制御

4つのジョブは全て並行実行され、相互に依存関係がない。各ジョブは独立したランナー上で実行される。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| テスト結果 | 各テストジョブ完了時 | vitest/puppeteerのテスト実行結果 |
| lint結果 | lint実行時 | eslint/prettier/tscの検査結果 |
| tree-shaking検証結果 | 検証実行時 | verify-treeshaking.jsの出力 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ジョブ実行結果 | 失敗時 | 呼び出し元ワークフロー経由で通知 |

## 備考

- `PUPPETEER_SKIP_DOWNLOAD: 'true'` がunit-test、unit-test-windows、lint-and-test-dtsジョブで設定されており、不要なChromiumダウンロードをスキップしている
- e2e-testジョブでのみ `node node_modules/puppeteer/install.mjs` でChromiumを明示的にインストールしている
- Chromiumバイナリのキャッシュキーは `chromium-${{ hashFiles('pnpm-lock.yaml') }}` で管理される
- Windowsでのテストはcompilerとserver-rendererに限定されており、プラットフォーム固有の問題を検出する
- pnpm/action-setup は全ジョブで v4.2.0 を使用している
