AIコーディングツールに読ませないファイルを決める:除外設定と運用ルールの分担
AIを使いこなすClaudeで執筆し、GPTで自動校閲・修正しています。

結論から言うと、除外設定だけで「読ませない」を完結させることはできません。設定で止められるのは、ツールが公式に対象としている機能(補完、チャット、@参照など)の範囲だけです。それ以外の経路は、ファイルを置かない・秘密を環境の外に出す・実行を人が承認するといった運用で守ります。 この記事では、Cursor と GitHub Copilot の公式ドキュメント(2026年10月29日に自動校閲で再確認)で確認できた範囲をもとに、①除外候補ファイルの洗い出し表、②設定の書き方、③設定後の確認手順を順に示します。
設定で止められる範囲を先に把握する
Cursor
Cursor の Ignore file のドキュメントによると、プロジェクトルートの .cursorignore は、Agent と Tab がアクセスできるコード、および @ メンションによる参照を制限します。一方で、ターミナルと MCP サーバーのツールは .cursorignore の制御対象外と書かれています。つまり Agent がターミナルコマンドで除外ファイルを読む経路は、この設定では塞げません。ドキュメントには、LLM の挙動は予測できないため完全な保護は保証されない、という趣旨の注意もあります。
記法は .gitignore 互換で、! による除外解除も使えます。ただし親ディレクトリを除外している場合、その配下だけを再び含めることはできません。設定で「Hierarchical Cursor Ignore」を有効にすると、親ディレクトリの .cursorignore も参照されます。
GitHub Copilot
GitHub Docs のコンテンツ除外の説明では、対象は Copilot Business と Copilot Enterprise のプランと書かれています。除外すると、そのファイルへのインライン提案が出なくなり、他のファイルの提案や Copilot の回答、Copilot コードレビューにも内容が使われなくなります。
注意点も明記されています。
- IDE が間接的に渡す型情報などの意味情報は、除外ファイル由来でも使われる可能性がある
- シンボリックリンクとリモートのファイルシステム上のリポジトリには適用されない
- VS Code や他のエディターの Copilot Chat の Edit モードと Agent モードは、同ページ閲覧時点では対応していない
- サードパーティーの MCP サーバーが除外設定を守ることは保証されない
また、設定方法のページには、Copilot CLI と IDE の Copilot Chat の Agent モードは対応しないと明記されています。これらの機能では除外設定による保護を前提にせず、使う機能ごとに最新の対応状況を確認してください。
設定できるのはリポジトリ管理者、Organization のオーナー、Enterprise のオーナーで、反映には IDE で最大30分かかる場合があるとされています。
除外候補ファイルの洗い出し表
次の表は、公式資料ではなく編集側の整理です。「設定で除外」は上記の除外機能に載せる候補、「運用で守る」は設定を信用せず人のルールで抑えるものです。
- 認証情報、例:.env, .env.*, *.pem, *.key, credentials.json、主な対策:設定で除外+そもそも作業ディレクトリに置かない、理由:読まれた時の影響が最大。ターミナル経由では設定をすり抜け得る
- クラウド設定・状態、例:terraform.tfstate, *.tfvars, kubeconfig、主な対策:設定で除外+リポジトリ外へ、理由:状態ファイルに秘密値が含まれやすい
- 顧客データ、例:dump.sql, export_*.csv, fixtures/prod_*、主な対策:運用で守る(置かない、匿名化)、理由:拡張子では判別できず、名前の付け方に依存する
- 契約・社内文書、例:docs/contracts/, notes/hr/、主な対策:設定で除外+保管場所を分ける、理由:コードと同じ場所にある理由がないことが多い
- 他社ライセンス物、例:vendor/, 購入した素材やSDK、主な対策:方針を決めて設定、理由:契約条件の確認は社内の担当者が行う
- 生成物・巨大ファイル、例:dist/, node_modules/, *.min.js、主な対策:設定で除外、理由:機密ではなくノイズ対策。精度と速度に影響する
迷ったら、次の順で判断します。
- 漏れたら取り返しがつかないか(認証情報、顧客データ) → 作業環境に置かない。置くなら設定でも除外する
- 読まれても被害は小さいが、参照されると邪魔か(生成物) → 設定で除外
- 扱いが契約や社内規程で決まるか → 人が判断し、結果を表に追記する
洗い出しをAIに手伝わせる場合
ファイルの中身は渡さず、パス一覧だけを渡します。次は依頼文の例です(未実行の説明用です)。
以下はリポジトリのファイルパス一覧です(中身は含みません)。
AIコーディングツールに読ませない方がよいファイルの候補を、
「認証情報」「顧客データ」「社内文書」「生成物」の区分で表にしてください。
判断できないものは「要確認」とし、理由を1行で添えてください。
確信が持てない推測は断定しないでください。
--- パス一覧 ---
(ここに git ls-files の出力を貼る)AIの出力は候補です。最終的に除外するかどうかは、リポジトリの持ち主が決めます。
設定例(説明用)
下は説明用の例で、実際の環境で動作確認したものではありません。
Cursor の .cursorignore の例です。
.env
.env.*
*.pem
*.key
terraform.tfstate*
*.tfvars
docs/contracts/GitHub Copilot のリポジトリ設定では、公式ページの形式に沿って、パスのリストを書きます。
- "**/.env"
- "*.pem"
- "*.key"
- "/docs/contracts/**"Organization や Enterprise の設定ではリポジトリ参照ごとにパスを書きます。"*": の下に書くと全リポジトリに適用されます。
設定後の確認手順
設定は書いただけでは効いているか分かりません。本物の秘密は使わず、ダミーで試します。
- 除外対象のパスに、ダミー値だけを入れたファイルを作ります。例:.env に DUMMY_TOKEN=abc-not-a-real-secret-0001
- 設定を保存し、Copilot の場合は反映を待つか IDE をリロードします(最大30分とされています)
- 除外設定に対応するチャットで、ダミーファイルを開いて他のファイルを閉じ、コンテキストとして指定して「このファイルを説明して」と依頼します。ダミー値が返らないことに加え、Copilot では回答の参照元にもファイルが載らないことを確認します
- 対応する機能の @ 参照や補完でも確認します。補完は、除外していないファイルで提案が出ることを先に確認し、除外したファイルでは同様の編集をしても提案が出ないことを確認します。値が返らない一度の結果だけで、すべての経路が保護されたとは判断しません
- ターミナル経路を確認します。Cursor では Agent にターミナルでそのファイルを表示させる依頼が通ってしまうかを、ダミーで試します。通るなら、設定の外側のルール(後述)が必要です
- 使っている機能(Agent、CLI、Edit など)ごとに、公式の対応表と照らして「対象外」を一覧にします
- 確認が終わったらダミーファイルを削除します
結果は「どの機能で止まったか」を表にして残しておくと、後から見直しやすくなります。
運用ルールで補う部分
設定が及ばない経路に対しては、次のようなルールを置きます。
- 本物の認証情報を開発用ディレクトリに置かない。シークレット管理の仕組みから実行時に渡す
- Agent にターミナル実行を許可する場合は、コマンドを自動実行にせず、人が内容を見て承認する
- 顧客データは匿名化したものだけをリポジトリに入れる
- 新しい種類のファイルを追加したら、洗い出し表に区分を追記する
- ツールのバージョンやプランを変えたら、上の確認手順をやり直す
「学習に使われない設定」と「ファイルを読ませない設定」は別のものです。前者を有効にしても、ファイルの内容が処理のためにツールへ送られること自体は変わりません。機密の扱いは、除外設定と社内規程の両方で決めてください。
参考にした資料
- Cursor Docs: Ignore file
- GitHub Docs: Content exclusion の概念ページ
- GitHub Docs: Copilot からコンテンツを除外する方法

