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

## 概要

本ドキュメントは、Tailwind CSSプロジェクトにおけるリリーススクリプト `release-channel.js` のバッチ設計書である。バージョン番号からリリースチャネル（latest/insiders/alphaなど）を判定する処理の仕様を定義する。

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

本バッチは、npmパッケージのバージョン番号を解析し、対応するnpmリリースチャネル（dist-tag）を判定して標準出力に出力する。

**業務上の目的・背景**：npmでは複数のリリースチャネル（dist-tag）を使い分けてパッケージを公開できる。Tailwind CSSでは `latest`（安定版）、`insiders`（開発版）、`alpha`（アルファ版）などのチャネルがあり、バージョン番号のフォーマットからチャネルを自動判定する必要がある。本バッチにより、リリースワークフローで環境変数 `RELEASE_CHANNEL` を正しく設定できる。

**バッチの実行タイミング**：GitHub Actionsのreleaseワークフローで、npm公開前にリリースチャネルを判定するために実行される。

**主要な処理内容**：
1. バージョン番号を取得する（コマンドライン引数 > `npm_package_version` 環境変数 > `packages/tailwindcss/package.json` のversion）
2. 正規表現 `\d+\.\d+\.\d+-(.*)\.\d+` でプレリリースサフィックスを抽出する
3. マッチした場合、プレリリース識別子（insiders, alphaなど）を出力する
4. マッチしない場合、`latest` を出力する

**前後の処理との関連**：releaseワークフローで `npm publish --tag {channel}` の `{channel}` を決定するために使用される。このバッチの出力が環境変数 `RELEASE_CHANNEL` に設定される。

**影響範囲**：読み取り専用の処理であり、ファイルの変更は行わない。標準出力へのテキスト出力のみ。

## バッチ種別

データ判定 / リリースチャネル分類

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時（リリース時） |
| 実行時刻 | N/A |
| 実行曜日 | N/A |
| 実行日 | N/A |
| トリガー | releaseワークフローからの呼び出し |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| バージョン情報の取得可能性 | 引数、環境変数、またはpackage.jsonからバージョンが取得できること |
| Node.js実行環境 | CommonJS対応のNode.jsがインストールされていること |

### 実行可否判定

明示的な実行可否判定ロジックは存在しない。バージョン番号が取得できれば常に実行可能。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| version | string | No | `npm_package_version` 環境変数 またはpackage.jsonのversion | 判定対象のバージョン番号 |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| packages/tailwindcss/package.json | JSON | バージョン番号のフォールバック取得元（requireで読み込み） |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | リリースチャネル名（latest, insiders, alpha等） |

### 出力ファイル仕様

ファイル出力は行わない。標準出力のみ。

## 処理フロー

### 処理シーケンス

```
1. バージョン番号取得
   └─ process.argv[2] > process.env.npm_package_version > require('../packages/tailwindcss/package.json').version の優先順で取得
2. プレリリースサフィックス判定
   └─ 正規表現 \d+\.\d+\.\d+-(.*)\.\d+ でバージョン番号を解析
3. 結果出力
   └─ マッチした場合：プレリリース識別子を出力（例：insiders, alpha）
   └─ マッチしない場合："latest" を出力
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[バージョン番号を取得]
    B --> C{プレリリースサフィックスあり?}
    C -->|あり| D[プレリリース識別子を出力]
    C -->|なし| E[latest を出力]
    D --> F[バッチ終了]
    E --> F
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | require失敗 | package.jsonが見つからない場合 | 引数または環境変数でバージョンを明示的に指定 |

### リトライ仕様

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

### 障害時対応

読み取り専用処理のため、障害時の影響は限定的。バージョン番号を引数で明示指定して再実行する。

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

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1件（単一バージョンの判定） |
| 目標処理時間 | 即座（ミリ秒単位） |
| メモリ使用量上限 | 最小限 |

## 排他制御

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

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 結果出力 | 処理完了時 | リリースチャネル名 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 特に定めなし | - | - |

## 備考

- CommonJS形式のスクリプト（.js拡張子、`require` 使用）
- バージョン判定の例：
  - `1.2.3` -> `latest`（デフォルト）
  - `0.0.0-insiders.ffaa88` -> `insiders`
  - `4.1.0-alpha.4` -> `alpha`
- プレリリースサフィックスの抽出は正規表現のキャプチャグループ `(.*)` で行われ、最後の `.{数値}` はビルド番号として無視される
