# バッチ設計書 4-release.js

## 概要

本ドキュメントは、Prettierのリリースプロセスを開始するエントリーポイントスクリプト `scripts/release/release.js` の設計仕様を記載したものです。

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

本バッチは、Prettierの新バージョンをリリースする際の準備処理を行い、実際のリリースステップを実行するrun.jsスクリプトを呼び出します。依存関係のない初期状態からリリースを開始できるよう、git fetchとyarn installを事前に実行します。

**業務上の目的・背景**：Prettierのリリースプロセスは、バージョン管理、変更履歴の更新、npm公開など多くのステップを含む複雑な作業です。本バッチはリリース作業の起点として、必要な前提条件（gitタグの取得、依存パッケージのインストール）を整え、一貫性のあるリリースフローを保証します。

**バッチの実行タイミング**：新バージョンのリリース時に、リリース担当者が手動で実行します。通常はメジャー、マイナー、パッチリリースの際に使用されます。

**主要な処理内容**：
1. git fetch --tagsの実行（前バージョン番号取得のため）
2. yarn installの実行（リリーススクリプトの依存パッケージインストール）
3. run.jsのdynamic import（実際のリリースステップ実行）

**前後の処理との関連**：本バッチはリリースプロセスの最初のステップです。実行後、run.jsが各種リリースステップ（バージョン更新、ビルド、npm公開等）を順次実行します。

**影響範囲**：gitリポジトリ（タグ情報の取得）、node_modules（依存パッケージのインストール）、およびrun.jsが実行する全てのリリース処理。

## バッチ種別

リリース処理 / プロセス起動

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（リリース時） |
| 実行時刻 | 任意 |
| 実行曜日 | 任意 |
| 実行日 | 任意 |
| トリガー | 手動 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Node.js環境 | Node.jsがインストールされていること |
| Git環境 | Gitがインストールされ、リポジトリがクローン済みであること |
| Yarn | Yarnパッケージマネージャがインストールされていること |
| ネットワーク接続 | git fetchとyarn installのためにネットワーク接続が必要 |

### 実行可否判定

特になし。ただし、git fetchやyarn installが失敗した場合は処理が中断されます。

## 入力仕様

### 入力パラメータ

本バッチは直接的なコマンドライン引数を処理しませんが、run.jsに引数が渡されます。

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| （run.jsに委譲） | - | - | - | run.jsのparseArguments参照 |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| リモートGitリポジトリ | Git | タグ情報の取得元 |
| package.json | JSON | 依存パッケージの定義 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| node_modules/ | ディレクトリ | インストールされた依存パッケージ |
| .git/ | ディレクトリ | 取得したタグ情報 |

### 出力ファイル仕様

本バッチ自体はファイル出力を行いません。run.jsが各種ファイルを生成・更新します。

## 処理フロー

### 処理シーケンス

```
1. スクリプトディレクトリの特定
   └─ import.meta.urlからディレクトリパスを取得
2. git fetch --tagsの実行
   └─ リモートからタグ情報を取得
   └─ 前バージョン番号の特定に使用
3. yarn installの実行
   └─ scripts/release/ディレクトリで依存パッケージをインストール
4. run.jsのimport
   └─ dynamic importでリリースステップを開始
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[ディレクトリパス取得]
    B --> C[git fetch --tags実行]
    C --> D{fetch成功?}
    D -->|Yes| E[yarn install実行]
    D -->|No| F[エラーでreject]
    E --> G{install成功?}
    G -->|Yes| H[run.jsをimport]
    G -->|No| F
    H --> I[run.jsの処理を実行]
    I --> J[バッチ終了]
    F --> K[処理中断]
```

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

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

本バッチはデータベースを使用しません。

### テーブル別操作詳細

N/A

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | Git error | git fetch失敗（ネットワークエラー等） | ネットワーク接続を確認し再実行 |
| - | Yarn error | yarn install失敗 | エラーメッセージを確認し依存関係を修正 |
| - | Import error | run.jsの読み込み失敗 | run.jsの構文エラーを確認 |

### リトライ仕様

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

### 障害時対応

エラー発生時はPromiseがrejectされ、エラーが伝播します。stdoutとstderrはprocess.stdout/stderrにパイプされているため、エラー内容がコンソールに出力されます。

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回のリリース処理 |
| 目標処理時間 | git fetch: 数秒、yarn install: 数十秒〜数分 |
| メモリ使用量上限 | Node.jsデフォルト制限に依存 |

## 排他制御

同時実行は推奨されません。リリースプロセスは一度に一つのみ実行すべきです。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| コマンド出力 | git fetch実行時 | gitコマンドの標準出力 |
| コマンド出力 | yarn install実行時 | yarnコマンドの標準出力 |
| エラー出力 | エラー発生時 | 子プロセスの標準エラー出力 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| なし | - | エラー時はコンソール出力 |

## 備考

- 本スクリプトは依存パッケージがインストールされていない状態でも実行可能（/* This file can't use any dependency since the dependencies may not installed yet */）
- child_processのexecを使用してシェルコマンドを実行
- runCommand関数はPromiseを返し、コマンドの完了を待機
- stdout/stderrはリアルタイムでprocess.stdout/stderrにパイプ
- ES Modules形式で記述（import.meta.url使用）
