Closed4

cursorでignorefilesを設定する

Ryuichi UmeharaRyuichi Umehara

cursor公式ドキュメントにはcursorに与えるコードベースのコンテキストを制御する方法が書いている。

cursorではコードベースのファイルはembeddingされておりindex化されることでcursorは必要なファイルを見つけ出すことができる。

Ryuichi UmeharaRyuichi Umehara

Codeベースのindexingについては[cmd shift p] > [Cursor Settings] > [Features] > [Codebase Indexing] に設定項目がある。

この設定項目のignorefilesからIndexingして欲しくない(= cursorに見て欲しくない、考慮して欲しくない)ファイルを.gitignoreと同じような形式で書くことができる。

以下は公式のサンプル

# Ignore specific file `config.json`
config.json

# Ignore `dist` directory and all files inside
dist/

# Ignore all files with a `.log` extension
*.log
Ryuichi UmeharaRyuichi Umehara

2種類のignore

公式ドキュメントによるとcursorには.cursorindexingignore.cursorignoreの2種類のignoreの方法がある。

.cursorignoreに指定されたファイルはcursorからは本当に見えなくなっている。
.cursorindexingignoreに指定されたファイルはcursorのcodebaseのindexingからは除外されるだけなので探そうと思えばcursorから見つけることができる。

検証してみた。

筆者はzennの記事や本をzenn cliを使って執筆している。ディレクトリ構成は以下の通り。

.
├── Dockerfile
├── README.md
├── articles
│   ├── ai_tool_articles.md
│   └── isucon14_how_to_implement_correctly.md
├── books
│   └── understand-git-completely
│       ├── a-introduction.md
│       ├── b-git-concepts.md
│       ├── c-git-blob-cat-file.md
│       ├── config.yaml
│       ├── cover.jpg
│       ├── d-git-tree-cat-file.md
│       ├── e-git-commit-cat-file.md
│       ├── f-git-add.md
│       ├── g-git-commit1.md
│       ├── h-git-new-branch.md
│       ├── k-git-checkout.md
│       └── l-git-merge.md
├── compose.yaml
├── images
│   ├── articles
│   │   └── isucon14_how_to_implement_correctly
│   │       └── editor.png
│   └── books
│       └── understand-git-completely
│           ├── git-add-explanation1.jpeg
│           ├── git-add-explanation2.jpeg
│           ├── git-add-explanation3.jpeg
│           ├── git-add-explanation4.jpeg
│           ├── git-add-flow.jpeg
│           ├── git-commit-flow.jpeg
│           ├── git-commit-ref-moving.jpeg
│           ├── git-index-file-structure.jpeg
│           ├── git-new-branch-flow.jpeg
│           ├── git-object-structure.png
│           ├── git-overview.png
│           ├── git-ref-head-branch-relationship.jpeg
│           ├── git-sample-tree-structure.png
│           ├── git-sample-tree.png
│           ├── git-tree-add-entry1.jpeg
│           ├── git-tree-add-entry2.jpeg
│           ├── git-tree-add-entry3.jpeg
│           ├── git-tree-contents-structure-example.png
│           ├── git-tree-contents-structure.png
│           ├── merge-concept.png
│           ├── real-file-blob-relationship.png
│           └── serializer.png
├── package-lock.json
└── package.json

以下のプロンプトをチャットで聞いてみる。

git checkoutについて説明されているマークダウンファイルはどれ?

結果は以下の通り。

「git checkout」について説明されているマークダウンファイルは
books/understand-git-completely/k-git-checkout.md
です。
このファイルは「git checkoutでtree間を移動する」というタイトルで、git checkoutコマンドの仕組みや処理内容について詳しく解説しています

.cursorignoreに以下の内容を記載する。

books/

新しくチャットを開いて同じプロンプトを投げた時の回答は以下の通り。(新しくチャットを開かない場合cursorignoreは反映されない。)

「git checkout」について説明されているマークダウンファイルは、このプロジェクト内には見つかりませんでした。
(すべてのマークダウンファイルを正確に検索しましたが、「git checkout」という記述はありませんでした。)
もし他の表現(例: 「ブランチを切り替える」や「checkoutコマンド」など)で説明されている可能性がある場合は、追加で検索できますのでご指示ください
Ryuichi UmeharaRyuichi Umehara

Fileをignoreする意味

Cursor公式ドキュメントには2つの意味があると書かれている。

セキュリティ

  • cursorはデフォルトの挙動としてサーバー上にユーザーのコードを保存しない設計になっている。
  • しかし保険としてAPIキーなどのシークレット情報をcursorに読んで欲しくない場合は.cursorignoreに記載すると良い。
  • ただしLLMは予期しない挙動をすることがあるためignoreしたファイルは絶対にcursorによって読まれないとは書かれていない。

パフォーマンス

  • cursorは大規模コードベースでもindexingのパフォーマンスが落ちないように設計されている。
  • しかし、明示的にignoreすることでよりcursorが開発に重要ではないファイルを無視することでパフォーマンスの向上に寄与できる。
  • cursorではなくLSPでもモノレポで大きなコードベースに対してはindexingに時間がかかることも多いのでこれは一般的なプラクティスと同じでありそう。
  • ちなみにcursorはデフォルトで以下のファイル形式をignoreしているのでtypescriptなどで開発している場合は、デフォルトで使用していても問題ないかもしれない。
package-lock.json
pnpm-lock.yaml
yarn.lock
composer.lock
Gemfile.lock
bun.lockb
.env*
.git/
.svn/
.hg/
*.lock
*.bak
*.tmp
*.bin
*.exe
*.dll
*.so
*.lockb
*.qwoff
*.isl
*.csv
*.pdf
*.doc
*.doc
*.xls
*.xlsx
*.ppt
*.pptx
*.odt
*.ods
*.odp
*.odg
*.odf
*.sxw
*.sxc
*.sxi
*.sxd
*.sdc
*.jpg
*.jpeg
*.png
*.gif
*.bmp
*.tif
*.mp3
*.wav
*.wma
*.ogg
*.flac
*.aac
*.mp4
*.mov
*.wmv
*.flv
*.avi
*.zip
*.tar
*.gz
*.7z
*.rar
*.tgz
*.dmg
*.iso
*.cue
*.mdf
*.mds
*.vcd
*.toast
*.img
*.apk
*.msi
*.cab
*.tar.gz
*.tar.xz
*.tar.bz2
*.tar.lzma
*.tar.Z
*.tar.sz
*.lzma
*.ttf
*.otf
*.pak
*.woff
*.woff2
*.eot
*.webp
*.vsix
*.rmeta
*.rlib
*.parquet
*.svg
.egg-info/
.venv/
node_modules/
__pycache__/
.next/
.nuxt/
.cache/
.sass-cache/
.gradle/
.DS_Store/
.ipynb_checkpoints/
.pytest_cache/
.mypy_cache/
.tox/
.git/
.hg/
.svn/
.bzr/
.lock-wscript/
.Python/
.jupyter/
.history/
.yarn/
.yarn-cache/
.eslintcache/
.parcel-cache/
.cache-loader/
.nyc_output/
.node_repl_history/
.pnp.js/
.pnp/
このスクラップは4ヶ月前にクローズされました