広告枠を募集中 ご相談ください

Sourcegraph Cody のコンテキストフィルターを設定して機密リポジトリを AI から除外する方法

365Finds Editorial
Wiki 記事 11,430 本収録

あなたの AI で 365 Wiki を使う

下のプロンプトをコピーして、普段使っている AI に貼り付け、そのまま質問してください。

完全版 Skill をダウンロード

まずはプロンプトでお試しください。よく使う場合は完全版 365Wiki Skill をインストールすると、毎回貼り付ける必要がありません。普段使う AI がなければ、Gemini や Microsoft Copilot のウェブ版でも使えます。

企業において AI コーディングアシスタント「Sourcegraph Cody」を全社展開する際、エンジニアリング責任者やセキュリティ・コンプライアンスチームが直面する重大な課題があります。それは、特許アルゴリズム、金融決済などの規制対象コード(PCI-DSS、HIPAA など)、あるいはセキュリティ診断ツールを含む機密リポジトリが、AI のコンテキストとして外部の大規模言語モデル(LLM)へ意図せず送信されてしまう懸念です。

Sourcegraph Cody は、こうした課題に対処するエンタープライズ向けの集中管理機能としてコンテキストフィルター(cody.contextFilters)を提供しています。サイト管理者が Sourcegraph のサイト設定(Site Configuration)で一元的にルールを定義することで、Cody がコンテキストとして参照可能なリポジトリを RE2 正規表現を用いて厳格に制御できます。

本記事では、管理者が cody.contextFilters を設定する具体的な手順、正規表現構文と評価ルールの優先順位、および開発現場における多層防御のベストプラクティスを解説します。


前提条件とクライアント互換性

コンテキストフィルターを有効化する前に、インフラ環境と開発者のクライアントが以下の要件を満たしていることを確認してください。

クライアント互換性とポリシーの強制適用

古い IDE 拡張機能を使用してセキュリティ制限を回避される事態を防ぐため、Sourcegraph サーバー側でクライアントバージョンに応じた厳格なポリシー適用を行っています。

クライアント拡張機能バージョンSourcegraph v5.4.0 の挙動Sourcegraph v5.4.12303+ の挙動
VS Code< 1.16.xCody 互換性なしポリシーを強制遵守;アップデートを要求
VS Code1.18.0 〜 < 1.20.0Cody 互換性なしポリシーを強制遵守;アップデートを要求
VS Code>= 1.20.0ポリシーを完全遵守ポリシーを完全遵守
JetBrains<= 5.5.9Cody 互換性なしポリシーを強制遵守;アップデートを要求
JetBrains5.5.10 〜 < 6.0.0Cody 互換性なしポリシーを強制遵守;アップデートを要求
JetBrains>= 6.0.0ポリシーを完全遵守ポリシーを完全遵守

現行バージョンの Sourcegraph では、コンテキストフィルターに対応していない旧バージョンのクライアントからのコンテキスト取得を遮断し、拡張機能の更新を求めるため、セキュリティの抜け穴が生じません。


設定スキーマと RE2 正規表現構文

コンテキストフィルターは、Sourcegraph サイト設定の JSON オブジェクト内に cody.contextFilters というキー名で記述します。スキーマには include(許可リスト)と exclude(除外リスト)の 2 つの配列を指定できます。

{
  "cody.contextFilters": {
    "include": [
      {
        "repoNamePattern": "^github\\.com\\/example-corp\\/.*"
      }
    ],
    "exclude": [
      {
        "repoNamePattern": ".*-sensitive$"
      },
      {
        "repoNamePattern": "^github\\.com\\/example-corp\\/core-payments.*"
      }
    ]
  }
}

スキーマと構文の重要ポイント:


評価ロジックとルールの優先順位

Cody は、include と exclude の設定状況に応じて以下のルールでコンテキスト利用の可否を判定します。

1. フィルター未設定(デフォルト動作)

サイト設定に cody.contextFilters が定義されていない場合、ユーザーが Sourcegraph 上で読み取り権限を持つすべてのリポジトリがコンテキストとして自由に利用可能です。

2. include のみ設定(厳格なホワイトリスト運用)

リポジトリ名が include 内のいずれかの正規表現に一致する場合のみ、Cody はそのコードをコンテキストとして取得できます。指定外のリポジトリはすべて暗黙的に除外されます。

{
  "cody.contextFilters": {
    "include": [
      {
        "repoNamePattern": "^github\\.com\\/example-corp\\/frontend-.*"
      },
      {
        "repoNamePattern": "^github\\.com\\/example-corp\\/public-docs$"
      }
    ]
  }
}

3. exclude のみ設定(ブラックリスト除外運用)

exclude 内のいずれかの正規表現に一致するリポジトリを除き、その他すべてのリポジトリがコンテキストとして利用可能です。

{
  "cody.contextFilters": {
    "exclude": [
      {
        "repoNamePattern": "^github\\.com\\/example-corp\\/crypto-vault$"
      },
      {
        "repoNamePattern": ".*payment-processing.*"
      },
      {
        "repoNamePattern": ".*-restricted$"
      }
    ]
  }
}

4. include と exclude の両方を設定(詳細なスコープ制御)

両方が定義されている場合、リポジトリは以下の 2 つの条件を同時に満たす必要があります。

  1. include 内のパターンの少なくとも 1 つに一致すること。
  2. exclude 内のどのパターンにも一致しないこと。

除外ルールが常に優先されます。以下の例では、example-corp 傘下の全リポジトリを原則許可しつつ、compliance を含むリポジトリや -secret で終わるリポジトリを確実に除外します。

{
  "cody.contextFilters": {
    "include": [
      {
        "repoNamePattern": "^github\\.com\\/example-corp\\/.+"
      }
    ],
    "exclude": [
      {
        "repoNamePattern": ".*compliance.*"
      },
      {
        "repoNamePattern": ".*-secret$"
      }
    ]
  }
}

管理者向け設定手順

以下の手順に沿って、Sourcegraph インスタンス上でコンテキストフィルターを設定および検証します。

ステップ 1: リポジトリ名の命名規則を確認する

Cody は Sourcegraph にインデックスされている完全なリポジトリ名を参照します。

ステップ 2: サイト設定エディタを開く

  1. サイト管理者(Site Admin)権限を持つアカウントでログインします。
  2. 画面右上のユーザーアイコンをクリックし、Site Admin を選択します。
  3. 左側のナビゲーションメニューから Configuration(URL: /site-admin/configuration)をクリックします。

ステップ 3: cody.contextFilters を追加する

ルート JSON オブジェクト内に機能フラグとフィルター設定を追加します。

{
  // ... 既存の設定 ...
  "cody-context-filters-enabled": true,
  "cody.contextFilters": {
    "include": [
      {
        "repoNamePattern": "^github\\.com\\/my-org\\/.*"
      }
    ],
    "exclude": [
      {
        "repoNamePattern": "^github\\.com\\/my-org\\/hft-core$"
      },
      {
        "repoNamePattern": ".*proprietary.*"
      },
      {
        "repoNamePattern": ".*sec-tools.*"
      }
    ]
  }
}

ステップ 4: 変更を保存して適用する

画面下部の Save changes をクリックします。Sourcegraph は設定を即座に動的反映するため、クラスターやサーバーの再起動は通常不要です。

ステップ 5: 開発環境での動作確認

設定が正しく適用されているか、開発者環境でテストを実施します。

  1. VS Code または JetBrains IDE で、除外対象に設定したリポジトリのファイルを開きます。
  2. インライン編集(Edit)やコード生成コマンドを実行します。クライアント上に以下のメッセージが表示され、実行が拒否されることを確認します。
    Edit failed to run: file is ignored (due to cody.contextFilters Enterprise configuration setting)
    
  3. Cody Chat パネルで、除外リポジトリ内のファイルやシンボルを @-mention しようとしても、サジェスト一覧に表示されず、プロンプトへの注入が遮断されることを確認します。

開発者の利用体験と制限事項

除外されたリポジトリで作業する開発者の挙動を把握しておくことで、社内展開時の問い合わせにスムーズに対応できます。


多層防御アーキテクチャの比較

企業のコードガバナンスを確実にするには、単一の機能に依存せず多層的な防御策を組み合わせることが推奨されます。

ガバナンス階層設定方法適用単位と粒度管理主体開発者による回避
企業コンテキストフィルターサイト設定(cody.contextFilters)RE2 正規表現によるリポジトリ全体サイト管理者 / セキュリティ責任者不可(サーバー側で強制適用)
リポジトリ無視ルールリポジトリ直下の .cody/ignore特定のファイル、サブフォルダ、拡張子リポジトリ管理者 / 開発チームGit 管理;全共同作業者に適用
ローカルワークスペース除外IDE 拡張機能設定(settings.json)ローカルファイルパスや一時ファイル個々の開発者可能(クライアントローカルのみ)
コードアクセス権限基盤Sourcegraph RBAC、OAuth 連携リポジトリの読み取り権限IAM / 社内権限管理システム不可(アクセス権のないコードは取得不能)
上流 LLM データ保護契約Cody Gateway ゼロ保持契約(Zero-Retention)全 API リクエスト伝送路クラウドベンダー契約不可(データ非保存・学習への不使用保証)

全社的なリポジトリ境界を cody.contextFilters で守り、リポジトリ内のローカル認証情報や環境変数ファイルを .cody/ignore で除外し、さらに Cody Gateway のエンタープライズ契約を組み合わせることで、開発者の生産性を最大限に高めながら、機密資産を強固に保護できます。


参考文献