VSCodeのファイル内検索(grep)で「除外設定を使用してファイルを無視」の対象を検証してみた

まえがき

VSCodeで左サイドバーにある虫眼鏡アイコンからファイル内検索(grep)を開くと「除外するファイル」の項目があります。
その右側に「除外設定を使用してファイルを無視」の歯車アイコンがありますが、こちらをONにした時にどのファイルが対象外となるか分かりにくかったので色々と検証してみました。

VSCodeのgrep

検証フォルダ構成

検証フォルダは下記の構成になっています。

.
├── .gitignore
├── test1
│   └── ignore.txt
├── test2
│   └── sample.txt
└── test3
    └── exclude.txt

3 directories, 4 files

それぞれのテキストファイルには共通の検索文字である「検証:」という文字列が入っています。
.gitignoreのファイルはtest1/が設定されています。

「除外設定を使用してファイルを無視」の仕様

「除外設定を使用してファイルを無視」をOFFにして検索

まずは「検証:」という文字列で「除外設定を使用してファイルを無視」をOFFで検索してみます。
これは3つすべてのファイルが表示されるはずです。

「除外設定を使用してファイルを無視」をOFFにして検索

想定通り3つのファイルが表示されました。特に問題ないですね。

「除外設定を使用してファイルを無視」をONにして検索

では次に「除外設定を使用してファイルを無視」をONにした状態で検索してみます。
どういう結果になるか確認してみましょう。

「除外設定を使用してファイルを無視」をONにして検索

画像の通り、表示されたのは2ファイルのみで、ignore.txt が検索結果から除外されています。

今回該当している設定は search.useIgnoreFiles です。
この設定は、.gitignore に記載されているファイルを「除外するファイル」に含めるかどうかを制御するものです。

設定内容は、Ctrl + , で設定画面を開き、「設定の検索」に useIgnoreFiles と入力することで確認できます。

「search.useIgnoreFiles」の設定を確認する

この search.useIgnoreFiles にチェックが入っている場合、.gitignore で指定したファイルやフォルダも検索時の「除外するファイル」に含まれるようになります。

「除外設定を使用してファイルを無視」に関連する設定について

「除外設定を使用してファイルを無視」には先に述べたsearch.useIgnoreFiles以外にも下記があります。
files.exclude
search.exclude
二つとも初期値が設定されていますので、現在の設定を確認しておきましょう。どちらもexcludeで検索すると出てきます。
私の環境では下記のように設定されていました。

「Files.Exclude」と「Search.Exclude」の設定を確認する

files.excludesearch.exclude は名前が似ていますが、役割が少し異なります。
files.exclude は主に エクスプローラー上で表示したくないファイルやフォルダを非表示にするための設定です。

一方で注意したいのが、files.exclude で指定したファイルは エクスプローラーだけでなく、検索(grep)の対象からも除外される仕様になっている点です。
そのため、「見た目だけ隠したつもり」のファイルが、検索結果にも出てこなくなることがあります。

検索だけを制御したい場合は search.exclude を使い、
表示と検索を同時に制御したい場合は files.exclude を使う、という使い分けを意識すると分かりやすくなります。

ではサンプルにexclude.txtというファイルを用意しているので、**/exclude.txtsearch.excludeに追加して検索から除外されるか試してみましょう。

search.excludeに追加して除外されることを確認

画像のようにsearch.excludeに追加すると検索から除外されていることが確認できます。

「除外するファイル」の対象なのに検索結果に表示される?

この「除外するファイル」ですが一つ罠がありまして、エディタで除外されたファイルを開いているとそのファイルは除外されないという仕様があります。
どういうことかというと、画像のようにignore.txtを開いた状態で検索すると、

エディタで除外されたファイルを開いているとそのファイルは検索から除外されない

このように除外しているにもかかわらず検索結果に表示されてしまいます。

これは「現在開いているエディタ(Open Editors)」が検索の対象として扱われ、
除外設定(search.exclude / files.exclude / search.useIgnoreFiles など)は無視されるためです。

大量のファイルを開いている状態で検索すると混乱しやすいので、
「除外したのに出てくる!」となった場合は、まず “そのファイルがエディタで開かれていないか” を確認すると切り分けが早いです。

注意点:.gitignore が効かないケース

.gitignore に除外設定を記述していても、そのフォルダが Git 管理されていない場合(.git ディレクトリが存在しない場合) は、除外設定は一切反映されません。
これは .gitignoreGit の管理対象に対してのみ意味を持つ仕組みであり、VSCode も「Git リポジトリとして認識できるかどうか」を前提に、この設定を参照しているためです。
そのため、まだ git init をしていないディレクトリや、Git 管理外のフォルダを開いている場合は、.gitignore に記述していても検索や表示から除外されないので注意してください。

あとがき

VSCodeの「除外設定を使用してファイルを無視」は、一見すると単純なチェック項目に見えますが、実際には.gitignoreや各種設定、さらには「開いているエディターが優先される」という仕様まで絡んでおり、初見では戸惑いやすい機能です。

今回の検証を通して、「なぜこのファイルが検索結果に出るのか/出ないのか」を仕組みとして理解できるようになると、VSCodeの検索結果に振り回されることがなくなります。
意図しないファイルがヒットしたときも、「これは設定か、仕様か」を切り分けられるようになるはずです。

少しクセはありますが、理解してしまえば非常に強力な機能なので、自分の環境に合わせて設定を見直しつつ、快適な検索環境を作っていきましょう。


スポンサーリンク

もふもふ

プロフィール

著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア。開発からテストまで一通り経験し、実際に詰まった点や検証結果を技術ブログとしてまとめています。