# 機能設計書 3-フォーマットチェック（check）

## 概要

本ドキュメントは、Prettierのフォーマットチェック機能である`check`関数の設計について記述する。

### 本機能の処理概要

ファイルがPrettierでフォーマット済みかどうかを確認し、結果をBoolean値で返す機能である。CI環境でのコードスタイル検証に主に使用される。

**業務上の目的・背景**：CI/CDパイプラインにおいて、コードスタイルの統一性を自動的に検証することで、コードレビューの効率化とコード品質の維持を実現する。フォーマットされていないコードのマージを防ぐことで、リポジトリ全体のコードスタイル一貫性を保証する。

**機能の利用シーン**：
- CI/CDパイプラインでのプルリクエスト検証
- pre-commitフックでのローカル検証
- リンターとの連携時のフォーマットチェック
- コードスタイルの一括検証スクリプト

**主要な処理内容**：
1. 入力テキストをformat関数でフォーマット
2. フォーマット結果と入力テキストを比較
3. 一致すればtrue、不一致ならfalseを返却

**関連システム・外部連携**：
- format関数への委譲
- CI/CDシステム（GitHub Actions、GitLab CI等）
- リンターツール（ESLint等）との連携

**権限による制御**：特になし。すべてのユーザーがAPIを利用可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 12 | Usage - Integrating with Linters | 補助機能 | ESLint等との連携時のフォーマットチェック機能を説明 |
| 16 | Usage - API | 補助機能 | APIでのcheck関数の使い方を説明 |
| 18 | Usage - CI | 主機能 | CI環境でのフォーマットチェック実行方法を説明 |

## 機能種別

計算処理 / 検証処理

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| text | string | Yes | チェック対象のソースコード | format関数に委譲 |
| options | object | No | フォーマットオプション | format関数に委譲 |

### 入力データソース

- API呼び出しからの直接入力（文字列）
- CLIからのファイル読み込み

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| result | boolean | フォーマット済みならtrue、未フォーマットならfalse |

### 出力先

- API戻り値としてboolean値を返却
- CLIの場合は終了コード（0: フォーマット済み、1: 未フォーマット）

## 処理フロー

### 処理シーケンス

```
1. check関数呼び出し
   └─ 入力テキストとオプションを受け取る

2. format関数呼び出し
   └─ 入力テキストをフォーマット

3. 比較処理
   └─ フォーマット結果と入力テキストを厳密比較（===）

4. 結果返却
   └─ 一致ならtrue、不一致ならfalse
```

### フローチャート

```mermaid
flowchart TD
    A[check呼び出し] --> B[format関数呼び出し]
    B --> C{フォーマット結果 === 入力テキスト?}
    C -->|Yes| D[true を返却]
    C -->|No| E[false を返却]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | 厳密比較 | フォーマット結果と入力を厳密等価演算子（===）で比較 | 常時 |
| BR-02 | 空白差異検出 | 空白やインデントの差異も不一致として検出 | 常時 |
| BR-03 | 改行コード差異検出 | 改行コードの差異も不一致として検出 | endOfLineオプションによる |

### 計算ロジック

```javascript
return (await format(text, options)) === text;
```

シンプルな文字列比較のみ。

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

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

本機能はデータベース操作を行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| UndefinedParserError | 入力エラー | パーサーが指定されず推論もできない | parserオプションまたはfilepathを指定 |
| ConfigError | 設定エラー | 指定されたパーサーが見つからない | 正しいパーサー名を指定またはプラグインを追加 |
| SyntaxError | パースエラー | ソースコードの構文エラー | 入力コードの構文を修正 |

### リトライ仕様

リトライは行わない。エラー発生時は即座に例外をスロー。

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

トランザクション管理は不要（ステートレスな処理）。

## パフォーマンス要件

- format関数と同等のパフォーマンス（フォーマット処理が主要コスト）
- 追加のオーバーヘッドは文字列比較のみ（ほぼゼロコスト）

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

- 入力コードの実行は行わない（静的解析のみ）
- 比較結果のみを返却し、フォーマット内容は返却しない

## 備考

- check関数は内部的にformat関数を呼び出し、結果を比較するだけのシンプルな実装
- CLIの`--check`オプションはこの関数を使用している

---

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

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

### 推奨読解順序

#### Step 1: check関数の実装を理解する

check関数は非常にシンプルな実装であり、format関数を呼び出して結果を比較するだけである。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | index.js | `src/index.js` | check関数の実装 |

**主要処理フロー**:
1. **76-78行目**: check関数の定義
   - `format(text, options)` を呼び出し
   - 結果を `text` と厳密比較
   - boolean値を返却

```javascript
async function check(text, options) {
  return (await format(text, options)) === text;
}
```

**読解のコツ**: check関数は2行のみの非常にシンプルな実装。format関数の理解が本質的に重要。

#### Step 2: format関数との関係を理解する

check関数はformat関数に完全に依存しているため、format関数の動作理解が必要。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | index.js | `src/index.js` | format関数の実装 |

**主要処理フロー**:
- **68-74行目**: format関数の定義（formatWithCursorのラッパー）

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

```
check (src/index.js:76-78)
    │
    └─ format (src/index.js:68-74)
           │
           └─ formatWithCursor (src/index.js:66)
                  │
                  └─ core.formatWithCursor (src/main/core.js)
                         │
                         └─ ... (format機能と同じ)
```

### データフロー図

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

ソースコード ───────────▶ format関数 ───────────────────────▶ フォーマット済み
    │                         │                               テキスト
    │                         │                                   │
    │                         └─────────────────────────────────┐ │
    │                                                           ▼ ▼
    └─────────────────────────────────────────────────────▶ 比較（===）
                                                                │
                                                                ▼
                                                          true / false
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| index.js | `src/index.js` | ソース | check関数の定義、公開APIのエクスポート |
| core.js | `src/main/core.js` | ソース | format処理の本体（check経由で呼び出し） |
