企業において AI コーディングアシスタント「Sourcegraph Cody」を全社展開する際、エンジニアリング責任者やセキュリティ・コンプライアンスチームが直面する重大な課題があります。それは、特許アルゴリズム、金融決済などの規制対象コード(PCI-DSS、HIPAA など)、あるいはセキュリティ診断ツールを含む機密リポジトリが、AI のコンテキストとして外部の大規模言語モデル(LLM)へ意図せず送信されてしまう懸念です。
Sourcegraph Cody は、こうした課題に対処するエンタープライズ向けの集中管理機能としてコンテキストフィルター(cody.contextFilters)を提供しています。サイト管理者が Sourcegraph のサイト設定(Site Configuration)で一元的にルールを定義することで、Cody がコンテキストとして参照可能なリポジトリを RE2 正規表現を用いて厳格に制御できます。
本記事では、管理者が cody.contextFilters を設定する具体的な手順、正規表現構文と評価ルールの優先順位、および開発現場における多層防御のベストプラクティスを解説します。
前提条件とクライアント互換性
コンテキストフィルターを有効化する前に、インフラ環境と開発者のクライアントが以下の要件を満たしていることを確認してください。
- Sourcegraph インスタンスバージョン: 有効な Cody Enterprise ライセンスを適用した Sourcegraph Enterprise
5.4.0以上。 - 機能フラグ(Feature Flag):
cody-context-filters-enabledをtrueに設定。 - サポートされるクライアントバージョン:
- VS Code 拡張機能:
>= 1.20.0 - JetBrains プラグイン:
>= 6.0.0 - Sourcegraph Web クライアント
- VS Code 拡張機能:
クライアント互換性とポリシーの強制適用
古い IDE 拡張機能を使用してセキュリティ制限を回避される事態を防ぐため、Sourcegraph サーバー側でクライアントバージョンに応じた厳格なポリシー適用を行っています。
| クライアント | 拡張機能バージョン | Sourcegraph v5.4.0 の挙動 | Sourcegraph v5.4.12303+ の挙動 |
|---|---|---|---|
| VS Code | < 1.16.x | Cody 互換性なし | ポリシーを強制遵守;アップデートを要求 |
| VS Code | 1.18.0 〜 < 1.20.0 | Cody 互換性なし | ポリシーを強制遵守;アップデートを要求 |
| VS Code | >= 1.20.0 | ポリシーを完全遵守 | ポリシーを完全遵守 |
| JetBrains | <= 5.5.9 | Cody 互換性なし | ポリシーを強制遵守;アップデートを要求 |
| JetBrains | 5.5.10 〜 < 6.0.0 | Cody 互換性なし | ポリシーを強制遵守;アップデートを要求 |
| 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.contextFiltersを定義する場合、includeまたはexcludeのいずれか少なくとも 1 つのブロックを設定する必要があります。- 各ブロック内のオブジェクトには、必須キー
repoNamePatternを含めます。 repoNamePatternは RE2 正規表現構文(Go 言語の標準正規表現ライブラリ)に準拠している必要があります。- JSON 文字列内で記述するため、バックスラッシュは二重エスケープ(
\\)が必要です。例えばピリオドを文字として扱う場合は\\.、スラッシュは\\/または直接/と記述します。 - マッチ対象は、Sourcegraph 上に登録された正規のリポジトリ名(例:
github.com/example-corp/repo-nameやgitlab.internal.domain/team/project)です。
評価ロジックとルールの優先順位
Cody は、include と exclude の設定状況に応じて以下のルールでコンテキスト利用の可否を判定します。
1. フィルター未設定(デフォルト動作)
サイト設定に cody.contextFilters が定義されていない場合、ユーザーが Sourcegraph 上で読み取り権限を持つすべてのリポジトリがコンテキストとして自由に利用可能です。
2. include のみ設定(厳格なホワイトリスト運用)
リポジトリ名が include 内のいずれかの正規表現に一致する場合のみ、Cody はそのコードをコンテキストとして取得できます。指定外のリポジトリはすべて暗黙的に除外されます。
- 高いセキュリティ水準を求める企業で、法務審査を通過した特定の公開リポジトリや共通コンポーネントのみを AI 対象とする「ゼロトラスト展開」に最適です。
include内のルールに 1 つでも一致すれば許可されます。
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/frontend-.*"
},
{
"repoNamePattern": "^github\\.com\\/example-corp\\/public-docs$"
}
]
}
}
3. exclude のみ設定(ブラックリスト除外運用)
exclude 内のいずれかの正規表現に一致するリポジトリを除き、その他すべてのリポジトリがコンテキストとして利用可能です。
- 一般的な業務リポジトリでの AI 活用を促進しつつ、特定のリスクの高いリポジトリ(暗号鍵管理、給与システム、決済基盤など)をピンポイントでブロックする場合に適しています。
excludeにワイルドカード.*を指定すると、全リポジトリのコンテキスト取得を即座に停止する緊急キルスイッチとして機能します。
{
"cody.contextFilters": {
"exclude": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/crypto-vault$"
},
{
"repoNamePattern": ".*payment-processing.*"
},
{
"repoNamePattern": ".*-restricted$"
}
]
}
}
4. include と exclude の両方を設定(詳細なスコープ制御)
両方が定義されている場合、リポジトリは以下の 2 つの条件を同時に満たす必要があります。
include内のパターンの少なくとも 1 つに一致すること。exclude内のどのパターンにも一致しないこと。
除外ルールが常に優先されます。以下の例では、example-corp 傘下の全リポジトリを原則許可しつつ、compliance を含むリポジトリや -secret で終わるリポジトリを確実に除外します。
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/.+"
}
],
"exclude": [
{
"repoNamePattern": ".*compliance.*"
},
{
"repoNamePattern": ".*-secret$"
}
]
}
}
管理者向け設定手順
以下の手順に沿って、Sourcegraph インスタンス上でコンテキストフィルターを設定および検証します。
ステップ 1: リポジトリ名の命名規則を確認する
Cody は Sourcegraph にインデックスされている完全なリポジトリ名を参照します。
- Sourcegraph Web 画面で Site Admin > Repositories を開きます。
- コードホストや組織名を含むプレフィックス(例:
github.com/my-org/...)を確認し、除外対象とする機密リポジトリのリストを整理します。
ステップ 2: サイト設定エディタを開く
- サイト管理者(Site Admin)権限を持つアカウントでログインします。
- 画面右上のユーザーアイコンをクリックし、Site Admin を選択します。
- 左側のナビゲーションメニューから 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: 開発環境での動作確認
設定が正しく適用されているか、開発者環境でテストを実施します。
- VS Code または JetBrains IDE で、除外対象に設定したリポジトリのファイルを開きます。
- インライン編集(Edit)やコード生成コマンドを実行します。クライアント上に以下のメッセージが表示され、実行が拒否されることを確認します。
Edit failed to run: file is ignored (due to cody.contextFilters Enterprise configuration setting) - Cody Chat パネルで、除外リポジトリ内のファイルやシンボルを
@-mentionしようとしても、サジェスト一覧に表示されず、プロンプトへの注入が遮断されることを確認します。
開発者の利用体験と制限事項
除外されたリポジトリで作業する開発者の挙動を把握しておくことで、社内展開時の問い合わせにスムーズに対応できます。
- 一般的な質問への応答は継続: 機密リポジトリを開いている場合でも、言語の構文や汎用アルゴリズムに関する質問には通常通り Cody Chat で回答が得られます。ただし、ローカルの機密コードがプロンプトに添付されることはありません。
- 全社コンテキスト機能の制限: リポジトリ全体の広域コンテキストを必要とする定義済みプロンプト(Prompts)などは、除外リポジトリ内では無効化されるかエラーを返します。
- オートコンプリート(Autocomplete)の遮断: 除外リポジトリのコード編集中は、周囲のコードスニペットが LLM 側へアップロードされることはありません。
多層防御アーキテクチャの比較
企業のコードガバナンスを確実にするには、単一の機能に依存せず多層的な防御策を組み合わせることが推奨されます。
| ガバナンス階層 | 設定方法 | 適用単位と粒度 | 管理主体 | 開発者による回避 |
|---|---|---|---|---|
| 企業コンテキストフィルター | サイト設定(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 のエンタープライズ契約を組み合わせることで、開発者の生産性を最大限に高めながら、機密資産を強固に保護できます。