👏

機密情報がもれないようにVSCode+GitHub Copilotのサジェストを無効にする

に公開

はじめに

最近のVSCodeは次に書くべきコードをAIで提案してくれて うっとうしい 便利になりました。
ふと、気になったのが、APIキーなどをベタ書きしているコードで、サジェストが起動するとそのAPIキーが送信されてしまうのではないかという懸念に思い至りました。

GitHubのCopilotの公式ドキュメントを読んでいると以下のように記載されています。

combined with contextual information (such as code snippets from open tabs in the editor) and sent to a large language model in the form of a prompt.

https://docs.github.com/en/enterprise-cloud@latest/copilot/responsible-use/copilot-code-completion#input-processing

つまりコードの付近にAPIキーや個人情報を記載していた場合、予期せずLLMに送信され得るということになります。

この記事ではVSCodeでのこの問題への対応策を考えてみます

VS Codeの組み込みAI機能を停止

最近のVSCodeでは一部のバージョンではGitHub Copilotが既定でインストールされる構成になっているようです。
そのため、いくつかの不満の声があがっていました。

幸い、この機能を無効にできるオプションは提供されています。
VSCodeの設定でChat.Disable AI Featuresをチェックしてください。

これにより、チャットのウィンドウは消滅し、表示メニューからも姿を消します。

インラインのサジェストのみを無効にしたい

チャットにより、自分が明示的にファイルを指定してのLLMの使用は許容するが、ファイルを編集中に勝手にLLMが動くのは許容できないケースではサジェストのみを無効にできます。

設定画面で、github.copilot.enableを設定します。

この項目ではファイルの種類を指定して、インラインによるサジェストを有効にするかどうかを指定できます。
*falseにして、機密情報が入らないファイルのみをtrueにするといいでしょう。

github.copilot.enable は言語ID単位で制御されるため、独自拡張子を扱う場合は files.associations で言語を指定できます。

なお、この方法ではユーザーが明示的にチャットにファイルを含めることまでは制限できないので留意してください。

プロジェクトで安全に使いたい

上記のVSCodeの設定はワークスペースごとに設定できます。
ワークスペース直下の.vscode/settings.jsonを以下のように設定しておき、GitHubにコミットしておけば、チーム全体が同じ設定になります。

{
  "github.copilot.enable": {
    "*": false,
    "markdown": true,
    "python": false,
    "typescript": true
  }
}

その他参考

Discussion