# 帳票設計書 23-Stats minimal プリセット

## 概要

本ドキュメントは、webpackのビルド統計情報を最小限に出力する「minimal」プリセットの設計仕様を定義する。DefaultStatsPresetPlugin.jsにおけるNAMED_PRESETS.minimalの定義に基づく。

### 本帳票の処理概要

minimalプリセットは、ビルドの基本的な結果のみを簡潔に出力するプリセットである。`all: false`によりデフォルトで全項目を無効化した上で、バージョン・タイミング・モジュール数・アセット数・エラー・警告のみを選択的に有効化する。各スペース制限は0に設定されており、件数のみが表示され個別の詳細は表示されない。

**業務上の目的・背景**：CI/CDパイプラインや自動化スクリプトにおいて、ビルドの成功/失敗を簡潔に確認するために使用される。出力量を最小限に抑えることで、ログの可読性を高め、ビルドの基本的な健全性を素早く把握できる。大量のログ出力が不要な本番ビルドや、ビルド結果の概要のみが必要なダッシュボード向けに適している。

**帳票の利用シーン**：CI/CDパイプラインでのビルド結果確認、自動化スクリプトでのビルド成功/失敗判定、ビルドダッシュボードへの概要情報提供、本番環境ビルドのログ出力抑制。

**主要な出力内容**：
1. webpackバージョン情報
2. ビルド所要時間（タイミング情報）
3. モジュール件数（詳細なし、件数のみ）
4. アセット件数（詳細なし、件数のみ）
5. エラー情報（件数表示、詳細なし）
6. 警告情報（件数表示、詳細なし）

**帳票の出力タイミング**：webpack設定の`stats`オプションに`"minimal"`を指定した場合、またはStats.toString("minimal")・Stats.toJson("minimal")を呼び出した場合に出力される。

**帳票の利用者**：CI/CDエンジニア、DevOpsエンジニア、フロントエンド開発者（本番ビルド時）

## 帳票種別

統計レポート（プリセット設定）

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| - | CLI | webpack --stats minimal | コマンドライン引数指定 |
| - | webpack設定ファイル | webpack.config.js | stats: "minimal" 設定 |
| - | Node.js API | - | Stats.toString("minimal") / Stats.toJson("minimal") |

## 出力形式

### 基本仕様

| 項目 | 内容 |
|-----|------|
| ファイル形式 | テキスト（toString）/ JSON（toJson） |
| 用紙サイズ | 該当なし（コンソール/ファイル出力） |
| 向き | 該当なし |
| ファイル名 | 標準出力またはユーザー指定 |
| 出力方法 | コンソール出力 / プログラマティック取得 |
| 文字コード | UTF-8 |

## 帳票レイアウト

### レイアウト概要

minimalプリセットは極めてコンパクトな出力を生成する。`all: false`により全セクションがデフォルトで無効化された上で、必要最低限の項目のみが選択的に有効化される。

```
┌─────────────────────────────────────┐
│    バージョン・ビルド時間             │
├─────────────────────────────────────┤
│    モジュール件数（スペース0）         │
├─────────────────────────────────────┤
│    アセット件数（スペース0）          │
├─────────────────────────────────────┤
│    エラー件数                        │
├─────────────────────────────────────┤
│    警告件数                          │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | version | webpackバージョン | - | 文字列 |
| 2 | timings | ビルド所要時間 | endTime - startTime | ミリ秒 |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | modules | モジュール情報（スペース0のため件数のみ） | compilation.modules | 件数表示 | - |
| 2 | assets | アセット情報（スペース0のため件数のみ） | compilation.getAssets() | 件数表示 | - |
| 3 | errors | エラー情報 | compilation.errors | 構造化データ | - |
| 4 | errorsCount | エラー件数 | compilation.errors.length | 数値 | - |
| 5 | warnings | 警告情報 | compilation.getWarnings() | 構造化データ | - |
| 6 | warningsCount | 警告件数 | compilation.getWarnings().length | 数値 | - |

### フッター部

該当なし（ヘッダー・明細部に含まれる）

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| statsオプション指定 | stats: "minimal" の指定 | Yes |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| - | - | スペース0のため個別項目のソートは表示されない |

### 改ページ条件

該当なし。スペース制限が0のため、個別のモジュール・アセット・エラー・警告の詳細は表示されない。

## データベース参照仕様

### 参照テーブル一覧

本帳票はデータベースを参照しない。webpack Compilationオブジェクトから直接データを取得する。

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| Compilation | ビルド結果全体 | - |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| ビルド時間 | endTime - startTime | なし | ミリ秒単位 |

## 処理フロー

### 出力フロー

```mermaid
flowchart TD
    A[Stats.toString/toJson呼出] --> B[createStatsOptions]
    B --> C{statsPresetフック}
    C -->|minimal| D[NAMED_PRESETS.minimal適用]
    D --> E[all:false で全項目無効化]
    E --> F[選択項目のみ有効化]
    F --> G[statsNormalizeフック]
    G --> H[StatsFactory.create]
    H --> I[最小限のデータ抽出]
    I --> J[出力]
```

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| 不正なプリセット名 | 存在しないプリセット名を指定 | - | NAMED_PRESETSに登録された名前を使用する |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | 件数のみ（個別データなし） |
| 目標出力時間 | 最小限のデータ処理のため高速 |
| 同時出力数上限 | 1（ビルドごとに1回） |

## セキュリティ考慮事項

minimalプリセットは出力情報が非常に限定的であるため、機密情報の漏洩リスクは極めて低い。パス情報やモジュール名等の詳細情報は出力されない。

## 備考

- `all: false`が設定されており、これによりDEFAULTSの各関数で`all === false`の場合にfalseを返す項目（NORMAL_ON関数の対象項目等）が全て無効化される
- `logging: "warn"`が設定されており、warnレベル以上のログのみ出力される
- errorsSpace: 0、warningsSpace: 0、modulesSpace: 0、assetsSpace: 0が設定されており、個別の詳細は表示されず件数のみが表示される
- errors: true、warnings: trueは有効だが、対応するSpace制限が0のためテキスト出力時には詳細が表示されない

---

## コードリーディングガイド

本帳票を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

minimalプリセットの設定構造と`all: false`の効果を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | 行101-116: NAMED_PRESETS.minimalの全プロパティ定義 |
| 1-2 | DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | 行150-155: NORMAL_ON/NORMAL_OFF関数 - `all: false`時の動作 |

**読解のコツ**: `all: false`が設定されると、DEFAULTSのNORMAL_ON関数（`all !== false`）がfalseを返し、多くの項目が無効化される。minimalではその上で必要な項目のみtrueに明示設定している。

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Stats.js | `lib/Stats.js` | 行57-86: toJson()/toString()メソッド |

**主要処理フロー**:
1. **行58**: `createStatsOptions("minimal", { forToString: false/true })` 呼出
2. **行62-64**: StatsFactoryによるデータ抽出（最小限の項目のみ）

#### Step 3: all: falseの影響範囲を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | 行186-285: DEFAULTSオブジェクト - 各項目がall値をどう参照するか |

**主要処理フロー**:
- **行150**: NORMAL_ON: `all !== false` -> false（無効）
- **行155**: NORMAL_OFF: `all === true` -> false（無効）
- minimalで明示的にtrueに設定された項目のみ出力される

### プログラム呼び出し階層図

```
Stats.toString("minimal") / Stats.toJson("minimal")
    |
    +-- Compilation.createStatsOptions("minimal", context)
    |       |
    |       +-- statsPreset.for("minimal").call(options)
    |       |       |
    |       |       +-- applyDefaults(options, {all:false, version:true, ...})
    |       |
    |       +-- statsNormalize.call(options, context)
    |               |
    |               +-- DEFAULTS: all=false により大部分が無効化
    |
    +-- StatsFactory.create("compilation", compilation, context)
    |       |
    |       +-- 最小限のextract（version, timings, modules件数, assets件数, errors, warnings）
    |
    +-- [toStringの場合] StatsPrinter.print("compilation", data)
```

### データフロー図

```
[入力]                          [処理]                              [出力]

webpack.config.js          DefaultStatsPresetPlugin            コンソール
  stats: "minimal"   --->    all: false                  ---> 簡潔なテキスト
                               |                               (数行程度)
                          version/timings/
                          modules/assets/
                          errors/warnings
                          のみ有効化
                               |
Compilation              StatsFactory.create()
  .modules.length   --->   件数のみ抽出              ---> バージョン
  .assets.length                                         ビルド時間
  .errors.length                                         モジュール数
  .warnings.length                                       アセット数
                                                         エラー数
                                                         警告数
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | ソース | プリセット定義（行101-116） |
| Stats.js | `lib/Stats.js` | ソース | Stats API のエントリーポイント |
| StatsFactory.js | `lib/stats/StatsFactory.js` | ソース | 統計データの抽出エンジン |
| StatsPrinter.js | `lib/stats/StatsPrinter.js` | ソース | 統計データのテキスト整形エンジン |
| DefaultStatsFactoryPlugin.js | `lib/stats/DefaultStatsFactoryPlugin.js` | ソース | extractフック実装 |
| DefaultStatsPrinterPlugin.js | `lib/stats/DefaultStatsPrinterPlugin.js` | ソース | printフック実装 |
