---
title: Globパターンフィルターの動作原理
description: Code2Promptがインクルード（-i）とエクスクルード（-e）のglobを使用して、どのファイルを保持または破棄するかを決定する方法。
---

Code2Prompt は glob パターンを使用してファイルとディレクトリを含めたり除外したりし、tree や grep などのツールと同様に動作します。2 つの独立した*リスト*の glob パターンを渡すことができます：

- **インクルードリスト** (`--include` または `-i`) - "これらのパターンはファイルを許可する"
- **エクスクルードリスト** (`--exclude` または `-e`) - "これらのパターンはファイルを禁止する"

Code2prompt は、プロジェクト内のすべてのファイルについて、それを保持するか破棄するかを決定する必要があります。このページでは、ルールとその背後にある設計選択について説明します。

---

## 1. 集合と記号

説明全体を通して、通常の集合記法を使用します

| 記号                              | 意味                                                                |
| --------------------------------- | ------------------------------------------------------------------- |
| $A$                               | **少なくとも 1 つの**インクルードパターンに一致するファイルの集合   |
| $B$                               | **少なくとも 1 つの**エクスクルードパターンに一致するファイルの集合 |
| $\Omega$                          | プロジェクトツリー全体（_宇宙_）                                    |
| $C = A \cap B$                    | 両方のリストに一致するファイル（_重複_）                            |
| $D = \Omega \setminus (A \cup B)$ | どちらのリストにも一致しないファイル                                |

---

## 2. 4 つの状況

### 4 つの状況の概要

| インクルードリスト | エクスクルードリスト | 保持されるファイル |
| ------------------ | -------------------- | ------------------ |
| A = ∅              | B = ∅                | Ω                  |
| A = ∅              | B ≠ ∅                | ¬B                 |
| A ≠ ∅              | B = ∅                | A                  |
| A ≠ ∅              | B ≠ ∅                | A \ B              |

1. **インクルードリストなし、エクスクルードリストなし**

   パターンが指定されていない場合、すべてのファイルが保持されます（`Ω`）。

2. **エクスクルードリストのみ**

   この場合、Code2Prompt はブラックリストとして機能し、除外されたパターンに一致するファイルを削除します（` Ω \ B = ¬B`）。

3. **インクルードリストのみ**

   インクルードリストのみが指定されている場合、Code2Prompt はホワイトリストとして機能し、含まれるパターンに一致するファイルのみを保持します（`A`）。

4. **インクルード*および*エクスクルードリスト**

   両方のリストが指定されている場合、Code2Prompt はインクルードパターンに一致するファイルを保持しますが、エクスクルードパターンに一致するものは削除します（`A \ B`）。

---

## 3. 重複についてさらに詳しく

両方のリストが存在する場合（`A ≠ ∅`、`B ≠ ∅`）、重複`C`と残り`D`について
4 つの論理的可能性があります。

| `C`が欲しい？ | `D`が欲しい？ | 合理的？                                                    |
| ------------- | ------------- | ----------------------------------------------------------- |
| いいえ        | いいえ        | デフォルトの動作（`A \ B`）                                 |
| はい          | いいえ        | ケース 3 と同じ動作（`A`）                                  |
| いいえ        | はい          | 驚き（"要求した`C`を破棄し、要求しなかったものを保持する"） |
| はい          | はい          | ケース 1 と同じ動作（`Ω`）                                  |

このため、`--include-priority`オプションが削除されました。なぜなら、インクルードリストのみを持つ場合（ケース 3）と同じ結果になるからです。

## 4. クイックリファレンステーブル

| 保持したいもの…                                | 使用する           |
| ---------------------------------------------- | ------------------ |
| すべて                                         | `-i`なし、`-e`なし |
| いくつかのパターン*以外の*すべて               | `-e`のみ           |
| パターンに一致するもの*のみ*                   | `-i`のみ           |
| `-i`に一致するもの、マイナス`-e`に一致するもの | `-i`**および**`-e` |

---

この設計はメンタルモデルをシンプルに保ちます：

- インクルードリストは存在するとすぐにホワイトリストになります。
- エクスクルードリストはその上に重ねられたブラックリストです。
- 重複はデフォルトで破棄されます
