# 機能設計書 16-設定キャッシュクリア（clearConfigCache）

## 概要

本ドキュメントは、Prettierにおける設定キャッシュクリア機能（clearConfigCache）について記述する。

### 本機能の処理概要

**業務上の目的・背景**：Prettierは設定ファイルの読み込みパフォーマンスを向上させるため、設定ファイルとEditorConfig設定をキャッシュしている。しかし、設定ファイルが変更された場合、キャッシュをクリアしないと古い設定が使用され続ける。clearConfigCache関数は、エディタ統合やウォッチモードで設定ファイルの変更を検出した際に、キャッシュをクリアして最新の設定を反映させるために使用される。

**機能の利用シーン**：
- エディタ統合で設定ファイルの変更を検出した際
- ファイルウォッチャーが設定ファイルの変更を検知した際
- CLIのウォッチモードで設定ファイルが更新された際
- プログラマティックにキャッシュリセットが必要な際

**主要な処理内容**：
1. Prettier設定ファイルのキャッシュクリア（loadCache, searchCache）
2. EditorConfigのキャッシュクリア（editorconfigCache）
3. プロジェクトルート検出のキャッシュクリア（findProjectRootCache）
4. プラグインキャッシュのクリア

**関連システム・外部連携**：
- Prettier設定キャッシュシステム（prettier-config/index.js）
- EditorConfigキャッシュシステム（editorconfig/index.js）
- プラグインキャッシュシステム（plugins/index.js）

**権限による制御**：なし（全ユーザーが利用可能）

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 16 | Usage - API | 補助機能 | APIでの設定キャッシュクリアの使い方を説明 |
| 22 | Editors - Editor Integration | 補助機能 | エディタでの設定キャッシュクリアを説明 |

## 機能種別

キャッシュ管理処理

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| なし | - | - | パラメータなし | - |

### 入力データソース

なし（内部状態の操作）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| なし | void | 戻り値なし |

### 出力先

なし（内部状態の変更のみ）

## 処理フロー

### 処理シーケンス

```
1. clearConfigCache関数が呼び出される
2. clearPrettierConfigCache()を呼び出し
   └─ loadCache.clear() - 読み込み済み設定のキャッシュクリア
   └─ searchCache.clear() - 検索結果のキャッシュクリア
3. clearEditorconfigCache()を呼び出し
   └─ clearFindProjectRootCache() - プロジェクトルートキャッシュクリア
   └─ editorconfigCache.clear() - EditorConfigキャッシュクリア
4. clearPluginCache()を呼び出し（API公開版のclearCache）
   └─ プラグインキャッシュのクリア
```

### フローチャート

```mermaid
flowchart TD
    A[開始: clearConfigCache] --> B[clearPrettierConfigCache]
    B --> C[loadCache.clear]
    C --> D[searchCache.clear]
    D --> E[clearEditorconfigCache]
    E --> F[clearFindProjectRootCache]
    F --> G[editorconfigCache.clear]
    G --> H[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-016-01 | 全キャッシュクリア | 設定関連の全キャッシュを一括クリア | 常時 |
| BR-016-02 | 同期処理 | 非同期ではなく同期的にキャッシュクリア | 常時 |
| BR-016-03 | API版追加処理 | API公開版ではプラグインキャッシュもクリア | API経由の場合 |

### 計算ロジック

特になし

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

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

データベース操作なし（インメモリキャッシュの操作）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | なし | エラーは発生しない | - |

### リトライ仕様

エラーが発生しないためリトライ不要

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

トランザクション管理なし（インメモリ操作）

## パフォーマンス要件

- キャッシュクリア処理: 1ms以下

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

- 特になし（内部状態のクリアのみ）

## 備考

- src/config/resolve-config.jsのclearCache関数とsrc/index.jsのclearConfigCache関数は異なる
- API公開版（src/index.js）では追加でclearPluginCacheも呼び出される
- キャッシュクリア後は次回のresolveConfig呼び出しで設定ファイルが再読み込みされる

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | index.js | `src/index.js` | clearConfigCache関数のエクスポート |
| 1-2 | resolve-config.js | `src/config/resolve-config.js` | clearCache関数の内部実装 |

**主要処理フロー**:
1. **81-84行目（index.js）**: clearCache関数（API公開版）
2. **15-18行目（resolve-config.js）**: clearCache関数（内部版）

#### Step 2: 各キャッシュクリア処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | prettier-config/index.js | `src/config/prettier-config/index.js` | Prettier設定キャッシュ |
| 2-2 | editorconfig/index.js | `src/config/editorconfig/index.js` | EditorConfigキャッシュ |

**主要処理フロー**:
- **10-11行目（prettier-config/index.js）**: loadCache, searchCacheの定義
- **12-15行目**: clearPrettierConfigCache関数
- **16-17行目（editorconfig/index.js）**: editorconfigCacheの定義
- **18-21行目**: clearEditorconfigCache関数

#### Step 3: プラグインキャッシュを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | plugins/index.js | `src/main/plugins/index.js` | プラグインキャッシュ |

**主要処理フロー**:
- clearPluginCache関数の実装

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

```
prettier.clearConfigCache() [API公開版 - src/index.js]
    │
    ├─ clearConfigCache() [内部版 - resolve-config.js]
    │      │
    │      ├─ clearPrettierConfigCache()
    │      │      ├─ loadCache.clear()
    │      │      └─ searchCache.clear()
    │      │
    │      └─ clearEditorconfigCache()
    │             ├─ clearFindProjectRootCache()
    │             └─ editorconfigCache.clear()
    │
    └─ clearPluginCache()
```

### データフロー図

```
[処理]                                [状態変更]

clearConfigCache()
       │
       ├─ clearPrettierConfigCache()
       │       ├─ loadCache ───▶ [空Map]
       │       └─ searchCache ───▶ [空Map]
       │
       ├─ clearEditorconfigCache()
       │       ├─ findProjectRootCache ───▶ [空Map]
       │       └─ editorconfigCache ───▶ [空Map]
       │
       └─ clearPluginCache()
               └─ pluginCache ───▶ [空Map]
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| index.js | `src/index.js` | ソース | API公開版clearConfigCache |
| resolve-config.js | `src/config/resolve-config.js` | ソース | 内部版clearCache |
| index.js | `src/config/prettier-config/index.js` | ソース | clearPrettierConfigCache |
| index.js | `src/config/editorconfig/index.js` | ソース | clearEditorconfigCache |
| find-project-root.js | `src/config/find-project-root.js` | ソース | clearFindProjectRootCache |
| index.js | `src/main/plugins/index.js` | ソース | clearPluginCache |
