# 帳票設計書 26-Stats summary プリセット

## 概要

本ドキュメントは、webpackのビルド統計情報のうちバージョン・エラー数・警告数のみを出力する「summary」プリセットの設計仕様を定義する。DefaultStatsPresetPlugin.jsにおけるNAMED_PRESETS.summaryの定義に基づく。

### 本帳票の処理概要

summaryプリセットは、ビルド結果の最小サマリーのみを出力する極めてコンパクトなプリセットである。`all: false`で全項目を無効化した上で、version、errorsCount、warningsCountの3項目のみを有効化する。エラーや警告の詳細内容は出力されず、件数のみが表示される。

**業務上の目的・背景**：ビルドの成功/失敗を最もコンパクトに確認するために設計されている。ログ出力を最小限に抑えたい場合や、複数のビルドを並列実行してサマリーのみを監視する場合に有用である。ダッシュボードやモニタリングツールでビルド状態を一覧表示する際にも適している。

**帳票の利用シーン**：マルチプロジェクトビルドの概要モニタリング、ダッシュボードへのビルド状態表示、ログ容量を抑えたい環境でのビルド実行、自動化スクリプトでのビルド結果の最小チェック。

**主要な出力内容**：
1. webpackバージョン情報
2. エラー件数
3. 警告件数

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

**帳票の利用者**：DevOpsエンジニア、CI/CDシステム、モニタリングツール

## 帳票種別

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

## 利用画面

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

## 出力形式

### 基本仕様

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

## 帳票レイアウト

### レイアウト概要

summaryプリセットは1〜2行程度の極めてコンパクトな出力を生成する。

```
┌─────────────────────────────────────┐
│  バージョン・エラー数・警告数          │
│  (1〜2行の出力)                      │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | version | webpackバージョン | - | 文字列 |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | errorsCount | エラー件数 | compilation.errors.length | 数値 | - |
| 2 | warningsCount | 警告件数 | compilation.getWarnings().length | 数値 | - |

### フッター部

該当なし

## 出力条件

### 抽出条件

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

### ソート順

該当なし（件数のみの出力）

### 改ページ条件

該当なし

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

### 参照テーブル一覧

本帳票はデータベースを参照しない。

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| Compilation | エラー数・警告数 | - |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| errorsCount | compilation.errors.length | なし | 整数 |
| warningsCount | compilation.getWarnings().length | なし | 整数 |

## 処理フロー

### 出力フロー

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

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| - | - | - | summaryプリセット自体にエラーケースは想定されない |

## パフォーマンス要件

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

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

summaryプリセットはバージョン情報とエラー・警告の件数のみを出力するため、機密情報の漏洩リスクはほぼ皆無である。

## 備考

- 全プリセットの中で最もシンプルな設定（all: false + 3項目のみ有効化）
- noneプリセットとの違い：noneは全情報を出力しないが、summaryはバージョンとエラー・警告件数を出力する
- エラー・警告の詳細（メッセージ・スタックトレース等）は出力されない
- logging設定は含まれていないため、DEFAULTSにより`all: false`の場合のデフォルト値（false）が適用される

---

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

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

### 推奨読解順序

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

summaryプリセットの極めてシンプルな設定を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | 行135-140: NAMED_PRESETS.summaryの全プロパティ定義（4項目のみ） |

**読解のコツ**: summaryは`all: false`, `version: true`, `errorsCount: true`, `warningsCount: true`の4項目のみ。noneとの違いはversion/errorsCount/warningsCountの有無。

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

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

#### Step 3: DEFAULTSによる未設定項目の補完を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | 行186-285: DEFAULTSオブジェクト - all:falseの場合に各項目がどのように解決されるか |
| 3-2 | DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | 行272-273: logging のデフォルト値 - all:falseかつforToString時はfalseになる |

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

```
Stats.toString("summary") / Stats.toJson("summary")
    |
    +-- Compilation.createStatsOptions("summary", context)
    |       |
    |       +-- statsPreset.for("summary").call(options)
    |       |       |
    |       |       +-- applyDefaults(options, {all:false, version:true, errorsCount:true, warningsCount:true})
    |       |
    |       +-- statsNormalize.call(options, context)
    |
    +-- StatsFactory.create("compilation", compilation, context)
    |       |
    |       +-- version/errorsCount/warningsCountのextractのみ実行
    |
    +-- [toStringの場合] StatsPrinter.print("compilation", data)
```

### データフロー図

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

webpack.config.js          DefaultStatsPresetPlugin            コンソール
  stats: "summary"   --->    all: false                  ---> webpack x.y.z
                               |                               X errors
                          version/errorsCount/                  Y warnings
                          warningsCount のみ有効化
                               |
Compilation              StatsFactory.create()
  .errors.length    --->   最小データ抽出            ---> 1-2行の
  .warnings.length                                        サマリー出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| DefaultStatsPresetPlugin.js | `lib/stats/DefaultStatsPresetPlugin.js` | ソース | プリセット定義（行135-140） |
| 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` | ソース | compilation.summaryのprintフック実装 |
