# Glob / .gitignore テスター

パスの一覧に対して glob パターンと .gitignore ルールを試し、どのパスがどのルールで一致するかを確認します。

https://codeknife.dev/ja/glob-tester/

## できること

パスの一覧に対して glob パターンと `.gitignore` ルールを試します。各パスに一致・不一致の印と、その原因のパターンが並んで表示されるので、`src/lib/util.test.ts` が対象になる理由、ならない理由が分かります。

## 使い方

1. **パス**に1行1パスで貼り付けるか、テキストファイルをドロップします。
2. **パターン**に1行1パターンで書きます。`#` で始まる行はコメントです。
3. **Glob**、**Bash**、**Gitignore** を選び、すべてのパス、一致のみ、不一致のみを表示します。
4. 結果をコピーします。

## 例

パターン `src/**/*.ts` と `!**/*.test.ts` では、パス `src/lib/util.ts` は一致し、`src/lib/util.test.ts` は除外が優先されて一致しません。`.gitignore` ルール `*.log` と `!keep.log` では、`app.log` は無視され、`keep.log` は無視されません。

## 知っておくと便利なこと

- `*` は1つのディレクトリ内、`**` はディレクトリをまたぎ、`?`、`[ab]`、`{a,b}` は picomatch と同じように動きます。
- `.env` のようなドットファイルは、**ドットファイルを含める**をオンにするか、パターンがドットを明示したときだけ一致します。
- Glob と Bash では、`!` で始まるパターンが他のパターンの一致を除外します。Gitignore では Git と同じく最後に一致したルールが優先されます。
- Bash は `globstar` のないシェルのように `**` を通常の `*` として読みます。
- パスはテキストとして照合されます。ディスクからは何も読み込みません。

## 3つの構文の違いは？

Glob は多くのビルドツールが使う picomatch 構文です。* は1つのディレクトリ内、** はディレクトリをまたぎ、{a,b} のような波括弧、[ab] のような文字クラス、? も使えます。Bash は globstar なしのシェルのように ** を通常の * として読みます。Gitignore は .gitignore のルールに従い、末尾の / はディレクトリ、先頭の / はルートへの固定、後の ! ルールは前のルールで除外されたものを再び含めます。

## よくある質問

### パスの横に表示されるルールは？

最初に一致したパターンです。glob と bash では、除外（! で始まるパターン）で外れたパスにはその除外が表示されます。gitignore では、そのパスを無視したルールが表示されます。

### * がドットで始まるファイルに一致しないのはなぜ？

パターンがドットを明示しない限り、glob はドットファイルを飛ばします。「ドットファイルを含める」をオンにすると、bash の dotglob のように * と ? が一致します。.gitignore にこの切り替えはありません。

### このツールはパスをどこかに送信しますか？

いいえ。すべてブラウザ内で行われます。入力した内容が当社のサーバーに送信されることはありません。