# バッチ設計書 12-ci.yml

## 概要

本ドキュメントは、GitHub Actionsによる継続的インテグレーション（CI）ワークフロー `.github/workflows/ci.yml` のバッチ設計書である。push/PR時にテストワークフローを実行し、継続的リリース（pkg-pr-new）によるプレビューパッケージを公開する。

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

Vueリポジトリへのpushおよびプルリクエスト時にCIパイプラインを実行する。テストジョブと継続的リリースジョブの2つの主要ジョブで構成される。テストジョブは再利用可能なtest.ymlワークフローを呼び出し、継続的リリースジョブはpkg-pr-newを使用してプレビュー用のnpmパッケージを公開する。

**業務上の目的・背景**：Vueプロジェクトのコード品質を継続的に担保するため、全てのブランチへのpushおよびmain/minorブランチへのPR時に自動テストを実行する。また、PRごとにプレビューパッケージを公開することで、変更内容を本番リリース前にエコシステムで検証可能にする。

**バッチの実行タイミング**：全ブランチへのpush時（タグを除く）、およびmain/minorブランチへのプルリクエスト時に自動実行される。ただし、`release:` で始まるコミットメッセージの場合はテストジョブをスキップする。

**主要な処理内容**：
1. テストジョブ（test）：再利用可能なtest.ymlワークフローを呼び出し、ユニットテスト・E2Eテスト・lint・型宣言テストを実行する
2. 継続的リリースジョブ（continuous-release）：pnpmでビルド（--withTypes付き）を実行後、pkg-pr-newでプレビューパッケージを公開する

**前後の処理との関連**：テストジョブは `.github/workflows/test.yml` を再利用可能ワークフローとして呼び出す。継続的リリースジョブはビルドスクリプト（`pnpm build --withTypes`）に依存する。

**影響範囲**：全パッケージのテスト結果の検証、およびpkg-pr-newによるプレビューパッケージの公開に影響する。vuejs/coreリポジトリでのみ継続的リリースが実行される。

## バッチ種別

CI/CD（継続的インテグレーション・継続的リリース）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | イベント駆動（push/PR時） |
| 実行時刻 | 指定なし（イベント発生時） |
| 実行曜日 | 指定なし |
| 実行日 | 指定なし |
| トリガー | push（全ブランチ、タグ除外）、pull_request（main, minorブランチ） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| GitHub Actionsランナー | ubuntu-latestが利用可能であること |
| pnpmパッケージマネージャ | pnpm/action-setup@v4でインストール |
| Node.jsバージョン | .node-versionファイルで指定されたバージョン |
| npmレジストリ | https://registry.npmjs.org にアクセス可能であること |

### 実行可否判定

- **テストジョブ**：コミットメッセージが `release:` で始まる場合はスキップ。また、PRの場合はforkからのPRのみ実行される（同一リポジトリからのPRは重複実行を避けるためスキップ）
- **継続的リリースジョブ**：`github.repository == 'vuejs/core'` の場合のみ実行（fork上では実行されない）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | ワークフロー入力パラメータなし |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| ソースコード | Git | リポジトリの全ソースコード |
| .node-version | テキスト | Node.jsバージョン指定ファイル |
| pnpm-lock.yaml | YAML | pnpm依存関係ロックファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| GitHub Actions実行結果 | ステータス | テスト結果（成功/失敗） |
| pkg-pr-new プレビューパッケージ | npmパッケージ | packages配下の全パッケージのプレビュー版 |

### 出力ファイル仕様

直接的なファイル出力はなし。pkg-pr-newによりnpmレジストリ上にプレビューパッケージが公開される。

## 処理フロー

### 処理シーケンス

```
1. テストジョブ（test）
   └─ test.ymlワークフローを呼び出し（ユニットテスト、E2Eテスト、lint、型宣言テスト）
2. 継続的リリースジョブ（continuous-release）※テストジョブとは独立して並行実行
   ├─ 2.1 チェックアウト（actions/checkout@v6）
   ├─ 2.2 pnpmインストール（pnpm/action-setup@v4）
   ├─ 2.3 Node.jsセットアップ（actions/setup-node@v6）
   ├─ 2.4 依存関係インストール（pnpm install）
   ├─ 2.5 ビルド（pnpm build --withTypes）
   └─ 2.6 プレビューリリース（pnpx pkg-pr-new publish --compact --pnpm './packages/*'）
```

### フローチャート

```mermaid
flowchart TD
    A[ワークフロー開始] --> B{トリガーイベント判定}
    B --> C[テストジョブ]
    B --> D{vuejs/core リポジトリ?}
    C --> E[test.yml 呼び出し]
    D -->|Yes| F[継続的リリースジョブ]
    D -->|No| G[スキップ]
    F --> H[チェックアウト]
    H --> I[pnpm / Node.js セットアップ]
    I --> J[依存関係インストール]
    J --> K[pnpm build --withTypes]
    K --> L[pkg-pr-new publish]
    E --> M[ワークフロー終了]
    L --> M
    G --> M
```

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

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

データベース操作なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | テスト失敗 | ユニットテスト、E2Eテスト、lint、型宣言テストのいずれかが失敗した場合 | テスト失敗の原因を調査し、コードを修正する |
| - | ビルド失敗 | pnpm build --withTypes が失敗した場合 | ビルドエラーの原因を調査する |
| - | パブリッシュ失敗 | pkg-pr-new publishが失敗した場合 | npmレジストリへの接続状態を確認する |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（GitHub Actionsのデフォルト動作に依存） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

### 障害時対応

GitHub ActionsのUI上で失敗したジョブのログを確認し、原因を特定して修正を行う。テストジョブと継続的リリースジョブは独立しているため、一方の失敗がもう一方に影響しない。

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1ワークフロー実行あたり2ジョブ |
| 目標処理時間 | GitHub Actionsの実行時間制限内（6時間） |
| メモリ使用量上限 | GitHub Actionsランナーのデフォルトリソースに依存 |

## 排他制御

テストジョブと継続的リリースジョブは並行実行される。同一ブランチへの連続pushの場合、GitHub Actionsの concurrency 設定は本ワークフローでは明示的に設定されていない。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| ジョブログ | 各ステップ実行時 | GitHub Actions標準のステップ実行ログ |
| テスト結果 | テスト完了時 | test.ymlワークフローの各テストジョブの結果 |
| ビルドログ | ビルド実行時 | pnpm build --withTypesの出力 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ワークフロー実行結果 | 失敗時 | GitHubリポジトリの通知設定に依存 |

## 備考

- テストジョブの条件式 `github.event.pull_request.head.repo.full_name != github.repository` により、同一リポジトリからのPRではpush時のCI実行と重複しないようになっている
- 継続的リリースでは `--compact` オプションにより簡潔な出力が行われ、`--pnpm` オプションでpnpmワークスペースのパッケージが対象となる
- `--packageManager=pnpm,npm,yarn` により、pnpm/npm/yarnの3つのパッケージマネージャでのインストールコマンドが出力される
