Copilotの除外設定、CLIとAgent modeには効かない

|著者: QUASA編集チーム|2 分で読めます
Copilotの除外設定、CLIとAgent modeには効かない

GitHub Copilotでは、管理者がファイルやディレクトリのパスを指定し、対応する機能の参照対象から機密ファイルを除外できる。Copilot BusinessとCopilot Enterprise向けのCLIも、リポジトリ、組織、Enterpriseの除外設定を適用し、対象ファイルをコンテキストに使わないとGitHubはCLIへの対応告知で明示している。

一方、IDE内Copilot ChatのAgent modeには除外設定が適用されない。GitHubの設定手順はCLIも非対応と記しており、先の提供告知と記述が食い違う。機密ファイルを扱う際は、パスの指定方法と、実際に使う機能の適用範囲を分けて考える必要がある。

リポジトリで機密ファイルを指定する

特定のリポジトリだけにルールを設ける場合、リポジトリ管理者がGitHub上で対象リポジトリのSettingsを開き、サイドバーのCopilotからContent exclusionへ進む。「Paths to exclude in this repository」に、除外するパスを一行ずつ入力する。各行の形式は「- "/PATH/TO/DIRECTORY/OR/FILE"」で、行頭の「#」はコメントとして使える。

次は、機密情報の置き場所が決まっている場合の条件付きの設定例だ。実際の配置に合わせてパスを書き換える。先頭の「/」はリポジトリのルートからの位置を示し、ファイル名だけの指定は、リポジトリ内のどこに同名ファイルがあっても対象にする。

  • 「- "/config/customer-data.json"」は、ルート直下のconfigに置いた顧客データのファイルを指定する例。
  • 「- "secrets.json"」は、ディレクトリを問わず同じ名前のファイルを指定する例。
  • 「- "/generated/**"」は、ルート直下のgeneratedディレクトリとその配下の生成物を指定する例。

パスにはfnmatch形式のパターンを使え、照合では大文字と小文字が区別されない。たとえば生成物だけを外したいなら、出力先を特定したパターンのほうが、一般的なファイル名を広く除外する指定より対象を把握しやすい。親組織などから継承したルールはリポジトリの設定画面で確認できるが、その画面からは編集できない。

組織とEnterpriseで共通ルールを設ける

複数のリポジトリを管理する組織では、組織の所有者がSettings、Copilot、Content exclusionへ進む。入力欄にはリポジトリへの参照を見出しとして置き、その下に対象リポジトリ内のパスを並べる。たとえば架空の「https://github.com/example/customer-app.git:」の下に「- "/exports/**"」を置けば、そのリポジトリのexports以下を指定する形になる。

組織の設定では、Git管理下にないファイルも対象にできる。見出しを「"*":」とし、その下に「- "**/.env"」を置く形式は、ファイルシステム上の.envファイルを広く指定する例だ。リポジトリ参照を使うルールと、場所を横断する「*」のルールでは範囲が違うため、共通名のファイルを除外するときは意図した対象を確認したい。

Enterprise所有者はEnterpriseのAI controlsからCopilot、Content exclusionへ進み、組織と同じ形式でパスを指定する。EnterpriseのルールはそのEnterprise内のCopilot利用者全体に適用される。組織の所有者が設けたルールは、その組織からCopilotのシートを割り当てられた利用者に適用されるため、誰に効かせたいかによって設定階層を選ぶ。

補完、Chat、エージェントで適用範囲は異なる

同じ除外パスを設定しても、Copilotの機能ごとに動作は異なる。GitHubの機能別の説明では、インライン提案、Chat、コードレビューへの効果と、IDEのEdit mode・Agent modeの例外を区別している。

  • IDEのインライン補完:対応するIDEでは、除外ファイル内で提案を出さず、その内容を別のファイルの提案にも使わない。
  • 通常のCopilot Chat:対応するChatでは、除外ファイルの内容を回答の材料にしない。IDEのAgent modeとは区別する。
  • IDEのAgent mode:コンテンツ除外はサポートされない。Visual Studio CodeなどのEdit modeも同様の例外に含まれる。
  • Copilot CLI:Copilot BusinessとCopilot Enterprise向けの提供告知では除外設定に対応している。設定手順に残る非対応の記述だけで判断せず、利用するプランと環境を確認する。
  • Copilot cloud agent:IDEのAgent modeやCLIとは別の実行環境で動く。パス除外をファイルの閲覧権限そのものとみなさず、対象リポジトリとエージェントの権限を別に管理する。

Copilot code reviewでも、除外対象のファイルはレビューされない。ただし、IDEから型情報やシンボル定義、ビルド設定などが間接的に渡されると、除外ファイルに関する意味情報が使われる可能性がある。また、シンボリックリンクとリモートファイルシステム上のリポジトリには除外が適用されない。設定したパスが一致していても、それだけで機密情報へのあらゆる接触を防げるわけではない。

設定を反映し、対象ファイルで確かめる

リポジトリ、組織、Enterpriseのいずれで設定しても、既に開いているIDEに変更が反映されるまで時間がかかる場合がある。補完を確認するなら、まず除外していないファイルで通常どおり提案が出ることを見てから、除外対象のファイルで同様の編集を行う。後者で提案が出ないことが、インライン補完に関する確認点となる。

通常のCopilot Chatでは、除外対象のファイルだけをエディターで開き、コンテキストに添付して内容を尋ねる方法が案内されている。除外が反映されていれば、Chatはそのファイルを回答に利用できず、回答の参照にも表示しない。設定直後に予想と異なる結果が出た場合は、IDEの設定を再読み込みしてから確かめる。Agent modeの適用可否を、通常のChatの結果から推測してはいけない。

秘密鍵と顧客データは権限でも守る

コンテンツ除外は、対応するCopilot機能がファイルをコンテキストに使うかどうかを制御する設定だ。ファイルの保存場所、Gitリポジトリの閲覧権限、実行環境の認証情報を置き換えるものではない。秘密鍵はソースや生成物に残さず専用の管理手段に移し、露出した鍵は交換する。顧客データの複製も、開発に必要な範囲へ絞る。

IDEのAgent modeを使う環境では、エージェントが読める作業ディレクトリに機密ファイルを置いたまま、除外パスだけに頼ることはできない。CLIでも除外設定の適用と、コマンドやツールが持つファイルアクセス権限は別の問題だ。必要なコードとデータだけを作業環境に渡し、利用者とエージェントの権限を絞ったうえで、コンテンツ除外を追加の制御として使う。

関連記事:

共有:

ニュースレターを購読

Web3、AI、暗号資産の最新ニュースを受信箱にお届けします。

0