# バッチ設計書 5-pre-publish-optimizations.mjs

## 概要

本ドキュメントは、Tailwind CSSプロジェクトにおけるビルドスクリプト `pre-publish-optimizations.mjs` のバッチ設計書である。`tailwindcss/index.css` のimportをインライン展開し、ランタイムでのimport処理を不要にする最適化を行う。

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

本バッチは、`packages/tailwindcss/index.css` ファイル内の `@import` 文をPostCSSの `postcss-import` プラグインで解決・インライン展開し、1つの自己完結したCSSファイルに変換する。

**業務上の目的・背景**：Tailwind CSSの `index.css` は開発時には複数のCSSファイルに分割されて `@import` で参照されている。しかし、npmパッケージとして公開される際には、ランタイムで `@import` を解決する処理がパフォーマンス上のオーバーヘッドとなる。本バッチにより、公開前に全てのimportをインライン展開し、ランタイムのCSS解決処理を最適化する。

**バッチの実行タイミング**：リリースワークフロー（release, release-insiders）でnpm公開前に実行される。

**主要な処理内容**：
1. `packages/tailwindcss/index.css` を読み込む
2. PostCSSの `postcss-import` プラグインで `@import` 文を解決し、参照先CSSの内容をインライン展開する
3. Prettierでフォーマットする
4. 展開後の内容で元のファイルを上書き保存する

**前後の処理との関連**：リリースワークフローでビルド完了後、npm公開前に実行される。`lock-pre-release-versions.mjs` と同時期に実行される前処理の一つ。

**影響範囲**：`packages/tailwindcss/index.css` ファイルが直接上書きされる。元の `@import` 構造は失われ、インライン展開された内容に置き換わる。

## バッチ種別

ビルド最適化 / ファイル変換

## 実行スケジュール

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

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| index.cssの存在 | `packages/tailwindcss/index.css` が存在すること |
| postcss/postcss-importの利用可能性 | 依存パッケージがインストールされていること |
| prettierの利用可能性 | フォーマットに必要なprettierがインストールされていること |
| Node.js実行環境 | ESModule対応のNode.jsバージョンがインストールされていること |

### 実行可否判定

明示的な実行可否判定ロジックは存在しない。リリースワークフローから呼び出された際に実行される。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | コマンドライン引数は受け取らない |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| packages/tailwindcss/index.css | CSS | @importを含むメインCSSファイル |
| @import参照先CSSファイル群 | CSS | index.cssが参照する各CSSファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| packages/tailwindcss/index.css | CSS | @importがインライン展開されたCSSファイル（上書き） |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | index.css（既存ファイルの上書き） |
| 出力先 | packages/tailwindcss/ |
| 文字コード | UTF-8 |
| フォーマット | Prettierによる整形済みCSS |

## 処理フロー

### 処理シーケンス

```
1. ファイルパス解決
   └─ スクリプトの位置から packages/tailwindcss/index.css のパスを解決
2. CSSファイル読み込み
   └─ index.css をUTF-8で読み込む
3. PostCSS処理
   └─ postcss-import プラグインで @import 文をインライン展開
4. Prettierフォーマット
   └─ 展開後のCSSをPrettierでフォーマット
5. ファイル書き込み
   └─ フォーマット済みCSSでindex.cssを上書き保存
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[index.css のパスを解決]
    B --> C[index.css を読み込み]
    C --> D[postcss-import で @import をインライン展開]
    D --> E[Prettier でフォーマット]
    E --> F[index.css を上書き保存]
    F --> G[バッチ終了]
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ファイル読み込み失敗 | index.cssが存在しない場合 | ファイルの存在を確認 |
| - | PostCSS処理失敗 | @import先のファイルが見つからない場合 | 参照先CSSファイルの存在を確認 |
| - | Prettierフォーマット失敗 | CSS構文エラーの場合 | CSSの構文を確認 |

### リトライ仕様

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

### 障害時対応

バッチ失敗時は、gitで `packages/tailwindcss/index.css` を元に戻し、原因を特定した上で再実行する。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | N/A（ファイルシステム操作のため） |
| コミットタイミング | N/A |
| ロールバック条件 | N/A（gitによるロールバックが可能） |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1ファイル（index.css） |
| 目標処理時間 | 数秒以内 |
| メモリ使用量上限 | 特に定めなし |

## 排他制御

リリースワークフロー内で順次実行されるため、同時実行の考慮は不要。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 特に定めなし | - | 明示的なログ出力は行わない |

## 監視・アラート

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

## 備考

- ファイルの上書きは破壊的な操作であるが、リリースワークフローではCI環境で実行されるため、ローカルの開発環境には影響しない
- PostCSSの `process` メソッドには `from` オプションとして元のファイルパスが指定され、import解決の基準パスとなる
- gzip圧縮レベルの設定等は行わず、CSSファイルそのものの最適化に特化している
