エンタープライズのエンジニアリングチームがAIコード補完ツールを導入する際、セキュリティおよびコンプライアンス担当者が最も懸念するのは、プライベートAPIキー、プロプライエタリな独自アルゴリズム、テストデータの意図しないインデックス化とクラウドへの送信です。Codeiumは高精度なコンテキスト認識エンジン(Context Awareness Engine)によりコードベースを解析して高度な補完を提供しますが、適切な境界設定を怠ると機密ファイルまでインデックスに取り込まれる恐れがあります。本ガイドでは、プロジェクトルートにおける .codeiumignore の記述方法、開発端末でのグローバル設定、およびエンタープライズ管理コンソールによるリポジトリ除外ポリシーを体系的に解説します。
Codeiumのインデックス作成の仕組みとセキュリティ上の懸念
除外設定を的確に行うには、Codeiumがどのようにソースコードを取り込んでいるかを把握する必要があります。
- ローカルコンテキスト認識(Local Context Awareness):開発者のIDE(VS Code、JetBrains、Windsurf / Devin Desktop)内で動作するCodeiumのローカルインデックスエンジンは、クラス、関数、インターフェースなどの構文・意味的境界に沿ってコードをチャンク化し、埋め込みベクトルを作成します。
- リモート・マルチリポジトリインデックス(Remote Indexing):Codeium Enterpriseでは、複数のマイクロサービスや共通ライブラリを横断してコンテキストを把握するため、サーバー側で集中インデックスを作成・保持する機能が提供されます。
- 機密情報の漏洩リスク:除外設定がない場合、
.envファイル内の認証情報、秘密鍵(.pem)、特許技術に関わるコアロジック、未完全なマスキングのテストデータなどがインデックス化され、推論クエリのコンテキストとしてLLMへ送信されるリスクが生じます。
適切な除外ルールを設定することで、これらのファイルが最初からインデックスパイプラインに入らないよう完全に遮断できます。
1. プロジェクトルートでの設定:.codeiumignore
リポジトリ単位でインデックス対象を制限する最も基本的かつ確実な手段が、リポジトリルートに配置する .codeiumignore ファイルです。
配置場所とツールの互換性
- 配置場所:プロジェクトのワークスペースルート(
<repo-root>/.codeiumignore)。 - 構文規則:標準的な
.gitignoreと全く同じGlobパターン構文を使用。 - ツールの互換性:Codeium、Windsurf、Devin Desktopの各環境で
.codeiumignoreはネイティブにサポートされています。同等の.windsurfignoreや.devinignoreも同一の構文であり、統合環境において相互に認識されます。 - デフォルトの動作:Codeiumはデフォルトで既存の
.gitignore、ドット.で始まる隠しディレクトリ、およびnode_modulesを無視します。しかし、Gitで追跡管理されている内部アルゴリズムやテスト用ダンプをAIからのみ隠蔽したい場合、.codeiumignoreによる明示的な指定が不可欠です。
本番環境向け .codeiumignore テンプレート
以下は、エンタープライズ開発でそのまま利用可能な実践的テンプレートです。
# ==============================================================================
# セキュリティ・認証情報・環境変数
# ==============================================================================
# 環境変数およびローカル設定
.env
.env.*
!.env.example
# 秘密鍵、証明書、クレデンシャル
*.pem
*.key
*.pkcs12
*.pfx
*.cert
*.crt
id_rsa
id_ecdsa
id_ed25519
credentials.json
service-account*.json
secrets/
config/secrets.yml
# クラウドプロバイダー認証トークン
.aws/
.gcp/
.azure/
*token*
*.secret
# ==============================================================================
# プロプライエタリなコア知的財産・独自アルゴリズム
# ==============================================================================
# 独自取引エンジン、特許暗号化ロジック、基幹計算モジュール
src/core/proprietary_engine/
src/crypto/internal_ciphers/
internal/patented_algorithms/
# 注:公開インターフェースのシグネチャ補全が必要な場合は例外指定
# !src/core/proprietary_engine/public_interfaces.ts
# ==============================================================================
# 機微データ・個人情報・大規模テストフィクスチャ
# ==============================================================================
# 本番レプリカのテストダンプ、データベーススナップショット
tests/fixtures/prod_dumps/
tests/data/sanitized_pii/
*.sqlite
*.sqlite3
*.db
*.dump
*.parquet
*.csv.gz
# ==============================================================================
# ビルド成果物・自動生成コード・サードパーティ依存関係
# ==============================================================================
dist/
build/
out/
target/
vendor/
node_modules/
*.min.js
*.min.css
*.wasm
パターン指定の重要ポイント
- 末尾のスラッシュ:ディレクトリを指定する場合は必ず末尾に
/を付けます(例:secrets/)。同名の通常ファイルとの誤一致を防ぎます。 - 階層ワイルドカード:任意の深さのサブディレクトリに一致させるには
**/を使用します(例:**/internal_keys/*.json)。 - ルートアンカー:先頭にスラッシュ
/を置くと、リポジトリの最上位のみに限定されます(例:/config/local.json)。 - 再包含ルール(
!):感嘆符を付けると除外を解除できます。ただし、親ディレクトリ全体が除外されている場合、子ファイルを!secrets/public.jsonとしても再包含できません。また、.gitignoreで既に無視されているパスは、.codeiumignoreの否定パターンで強制的に有効化できない場合があります。
2. 開発端末レベルの設定:グローバル無視ファイル
リポジトリ内に .codeiumignore がまだコミットされていない場合や、開発者が一時的なスクラッチ作業を行う場合に備え、端末単位で共通の除外基準を適用できます。
グローバル設定ファイルのパス
開発者のホームディレクトリ配下に作成します。
- macOS / Linux:
~/.codeium/.codeiumignore - Windows:
%USERPROFILE%\.codeium\.codeiumignore
適用挙動
- 該当マシン上で開かれるすべてのワークスペースに自動適用されます。
- プロジェクト固有の
.codeiumignoreや.gitignoreと合算して評価され、いずれかで指定されたパスはすべてインデックスから除外されます。 - 組織のIT管理チームは、Dotfilesや構成管理ツール(Ansible、Chef、MDM)を通じて、このグローバルファイルを一括配布することが推奨されます。
3. チームおよびエンタープライズ管理コンソールによるリポジトリ除外
ファイルベースの除外は現場の開発者による編集が可能なため、組織全体の統制にはインフラレベルでの集中管理が不可欠です。Codeium Enterprise(またはCognition Devin Enterprise)の管理ダッシュボードで設定します。
リポジトリのホワイトリスト登録(SCM連携)
GitHub Enterprise、GitLab Self-Managed、Bitbucket Data Center、Azure DevOpsと連携する場合の制御項目です。
- 明示的ホワイトリスト方式:SCMコネクタの設定において、AIインデックスを許可するリポジトリのみを明示的に選択します。未選択のリポジトリ(特許開発リポジトリや監査ログリポジトリなど)は、リモートインデックスの対象から完全に除外されます。
- ブランチ指定によるスコープ制限:リモートインデックスの対象を本番用ブランチ(例:
mainやrelease/*)のみに絞り込み、開発者の個人ブランチにある未検証なシークレットが取り込まれるのを防止します。
ロールベースアクセス制御(RBAC)とIdP連携
エンタープライズのコンテキスト検索は、個々のユーザーのアクセス権限を厳密に反映します。
- IdPグループ連携:OktaやMicrosoft Entra ID(旧Azure AD)とSAML/OIDC経由で連携し、組織のアクセス権をCodeiumに同期します。
- コンテキスト分離:ある開発者が特定のプライベートリポジトリに対する読み取り権限を持たない場合、マルチリポジトリインデックス機能はそのリポジトリのコードを当該開発者のIDE補全に一切提示しません。
端末レベルの強制アクセス制限ポリシー
管理対象のPCに対しては、集中設定(Team SettingsまたはMDMプロファイル)から、開発者が変更できない強力なパーミッションルールを配信可能です。
{
"deny": [
"Read(~/sensitive-data/**)",
"Read(/etc/security/**)",
"Write(.env*)"
],
"ask": [
"Exec(git push*)"
],
"allow": [
"Read(~/workspace/standard-repo/**)"
]
}
この deny ルールが適用されている場合、AIエージェントが該当パスを読み取ろうとしても、クライアントレイヤーで強制的にブロックされます。
除外制御レイヤーの比較
多層防御を構築する際の各レイヤーの特徴は以下の通りです。
| 制御レイヤー | 適用範囲 | 主な仕組み | 管理担当者 | 開発者による上書き |
|---|---|---|---|---|
| ワークスペース無視 | 単一リポジトリ | リポジトリルートの .codeiumignore | リポジトリ保守者 / 開発チーム | 可能(ローカルファイル編集) |
| 端末グローバル無視 | 端末上の全リポジトリ | ~/.codeium/.codeiumignore | 開発者 / IT管理スクリプト | 可能(ローカルファイル編集) |
| 管理ダッシュボード | 組織全体のリポジトリ | SCMリポジトリ登録制限・ブランチ制限 | エンタープライズ管理者 | 不可 |
| アクセス制御(RBAC) | 複数リポジトリ横断検索 | Git権限およびIdPグループ同期 | セキュリティ / IAM管理者 | 不可 |
| クライアント強制ポリシー | 開発端末の動作環境 | MDM / チーム単位の実行制御ルール | IT / セキュリティ運用チーム | 不可 |
設定の検証方法とトラブルシューティング
除外設定を実施した後は、意図通りに機能しているかを検証します。
1. ワークスペースのファイル数とメモリ消費量の確認
- Codeiumのローカルインデックスには上限ファイル数(10GBメモリ環境で通常10,000ファイル程度)が設けられています。
- 正しく除外されたファイルは、このインデックスファイル数にカウントされず、メモリ(5,000ファイルあたり約300MB)も消費しません。
- IDEのインデックスステータス表示で、ファイル数が意図した通り減少しているかを確認します。
2. 補全およびチャットのコンテキスト隔離テスト
- プロジェクト内で除外対象ディレクトリ内のファイルを開きます。
- そのファイル固有の内部関数名を外部の通常ファイルでタイピングし、自動補全候補が出ないことを確認します。また、チャットアシスタントにその関数の実装詳細を質問し、「コンテキストが存在しない」と回答することを確認します。
3. トラブルシューティングの注意点
- Gitignoreアクセス設定の確認:IDEの設定にある
Gitignore accessのトグルを確認してください。この設定が有効な場合、.gitignoreにのみ記載されたファイルをエージェントが読み取ってしまうケースがあります。機密ファイルは必ず.codeiumignoreにも明記してください。 - 直接の
@ファイル名メンション:受動的なインデックスから除外されていても、チャット内で明示的に@ファイル名を指定すると、権限がある限り直接読み込みが実行される場合があります。完全な遮断には前述のクライアントパーミッションdenyルールを併用します。 - インデックスキャッシュの再構築:設定追加前に一度インデックス化されたファイルがある場合、IDEの設定からインデックスの再構築(Re-index)を行うか、ワークスペースを再起動してキャッシュをフラッシュしてください。
多層防御(Defense-in-Depth)のベストプラクティス
除外ファイルの設定は不可欠ですが、これ単体を唯一のセキュリティ担保にしてはなりません。
- シークレットをコード内に置かない:HashiCorp Vault、AWS Secrets Manager、Dopplerなどの外部シークレットマネージャーを使用し、実行時に環境変数として注入します。
- Gitコミット前の自動スキャン:GitleaksやTruffleHogなどのツールをpre-commitフックやCIパイプラインに組み込み、鍵情報がリポジトリに入り込むのを未然に防ぎます。
.codeiumignoreをGitでバージョン管理する:除外設定ファイルをGitリポジトリにコミットし、リポジトリをクローンした全員に同じ除外境界が自動適用されるようにします。- ゼロデータ保持(ZDR)およびハイブリッド環境の採用:規制の厳しい環境では、プロンプトや補全コードをクラウド上に一切保持しないZero Data Retention契約を締結するか、顧客独自のVPC内にインデックスとデータを維持するハイブリッド構成を採用します。