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

エンジニアリングチームがSourcegraph Codyの複数リポジトリコンテキストを設定してレガシーコードを解読し組織のコードベースを検索する方法

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

あなたの AI で 365 Wiki を使う

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

完全版 Skill をダウンロード

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

大規模な開発組織において、ソフトウェアが単一のリポジトリだけで完結することは極めて稀です。マイクロサービスは分散RPCインターフェースを介して通信し、フロントエンドはバージョン管理されたAPIスキーマに依存し、中核となるビジネスロジックは何年も稼働し続けるレガシーモノリスの中に埋もれています。開発チームが一般的なAIコーディングアシスタントを使ってこれらのシステムを理解し、リファクタリングしようとすると、根本的な限界に直面します。従来のツールは、ローカルで開いているファイルや単一の作業フォルダしか参照できず、別リポジトリにある共有ライブラリ、下流サービス、過去の実装履歴を見通すことができないためです。

Sourcegraph Codyは、AIのコンテキスト取得をローカルエディタ環境から切り離すことでこの課題を解決します。Sourcegraphのコードインテリジェンス基盤を活用することで、CodyはGitHub、GitLab、Bitbucket、または社内Gitサーバーでホストされている数百〜数千のリポジトリから横断的にコンテキストを取得できます。

本記事では、エンジニアリングチームがSourcegraph Codyの複数リポジトリコンテキスト(Multi-Repository Context)を設定する手順、組織のコードベースをインデックス化・保護するための管理者アーキテクチャ、そして開発者がこれを利用してドキュメントのないレガシーコードを読み解き組織横断検索を行う実践手法を詳しく解説します。


1. アーキテクチャの基本:複数リポジトリコンテキストの仕組み

クライアント側のローカル抽出や単一プロジェクトのベクター検索だけに依存する一般的なツールとは異なり、Codyのマルチリポジトリコンテキストは集中型インフラストラクチャによって支えられています。

┌─────────────────────────────────────────────────────────────┐
│                       開発者 IDE                            │
│     (VS Code / JetBrains / Visual Studio / Cody Web)        │
│   - コンテキストチップ:現在のファイル + ピン留めリポジトリ (最大10)│
│   - 詳細な @ メンション (@repo, @dir, @file, @symbol)       │
└──────────────────────────────┬──────────────────────────────┘
                               │ HTTPS / アクセストークン
                               ▼
┌─────────────────────────────────────────────────────────────┐
│             Sourcegraph Enterprise インスタンス             │
│                 (Cloud またはセルフホスト)                  │
│                                                             │
│  ┌─────────────────────────┐   ┌─────────────────────────┐  │
│  │       検索エンジン      │   │       コードグラフ      │  │
│  │   (Zoekt Trigram 索引)  │   │  (SCIP セマンティック)  │  │
│  └─────────────────────────┘   └─────────────────────────┘  │
│  ┌─────────────────────────┐   ┌─────────────────────────┐  │
│  │   コンテキストフィルタ  │   │      権限・認証同期     │  │
│  │     (機密リポジトリ除外)│   │  (GitHub/GitLab RBAC)   │  │
│  └─────────────────────────┘   └─────────────────────────┘  │
└──────────────────────────────┬──────────────────────────────┘
                               │ プロンプト + 抽出された正確なコード片
                               ▼
┌─────────────────────────────────────────────────────────────┐
│                 LLM プロバイダー (Cody Gateway)             │
│         (Claude 3.7 / 3.5 Sonnet, GPT-4o など)              │
└─────────────────────────────────────────────────────────────┘
  1. 集中型リポジトリインデックス: Sourcegraphは、高速Trigram検索エンジンであるZoektとSCIP(Source Code Intelligence Protocol)インデクサーを用いて連携されたコードホスト全体をインデックス化します。これにより、定義、呼び出し箇所、継承関係を網羅した組織規模のシンボルグラフが構築されます。
  2. 権限制御に準拠した取得: Codyはコードホスト側で設定されたアクセス権限を厳密に尊重します。開発者が質問した際、本人のアカウントが閲覧権限を持つリポジトリからのみコンテキストを検索・取得するため、機密コードの不正閲覧を防ぎます。
  3. ピンポイントなコンテキスト注入: 遠隔リポジトリの全コードをLLMプロンプトに投入すると、トークン上限を超過し回答精度も低下します。CodyはSourcegraph Search APIを活用し、必要なシンボル定義、関連実装、インターフェース宣言のみを正確に抽出してモデルに渡します。

複数リポジトリコンテキストは、Cody Enterprise(Sourcegraph Cloudまたはセルフホスト版)で利用可能な機能です。Cody FreeおよびProプランは主にローカルの単一リポジトリを対象としています。


2. インフラストラクチャと管理者設定

複数リポジトリコンテキストの利用開始には、まずSourcegraphインスタンス側での管理者設定が必要です。コードホストの同期、インデックス作成の稼働、およびCody Enterpriseの有効化を行います。

ステップ 1: コードホストの接続とリポジトリ同期

Sourcegraphの管理コンソールから Site Admin > Code Hosts (/site-admin/external-services) にアクセスし、バージョン管理システム(GitHub Enterprise、GitLab Self-Managed、Bitbucket Data Centerなど)への接続を設定します。

設定ルールを定義し、最新のマイクロサービス群と過去のモノリスリポジトリの両方が同期対象に含まれるように構成します。

{
  "url": "https://github.com",
  "token": "ghp_yourEnterpriseSyncToken",
  "orgs": ["engineering-core", "legacy-platforms", "shared-libraries"]
}

バックグラウンドクローンおよび定期同期ワーカーがエラーなく完了していることを確認します。

ステップ 2: コードグラフ(Code Graph)と自動インデックスの設定

クローン完了後すぐにZoektによるキーワード・正規表現検索は動作しますが、複雑なレガシーコードの依存関係を解き明かすには高精度なセマンティックナビゲーションが不可欠です。

  1. Site Admin > Code Navigation で自動インデックス(Auto-indexing)を有効にします。
  2. Go、TypeScript/JavaScript、Java、Python、C++などの主要言語については、CI/CDパイプライン(GitHub ActionsやGitLab CIなど)内で公式SCIPインデクサー(scip-typescript、scip-java、scip-pythonなど)を実行し、生成されたインデックスをSourcegraphにアップロードします。
  3. 正確なSCIPデータにより、Codyは推測ではなく正確な定義と呼び出し関係に基づいて別リポジトリのコードを分析できます。

ステップ 3: サイト設定でのCodyの有効化

Site Admin > Site Configuration (/site-admin/configuration) を開き、Codyを有効にします。

{
  "cody.enabled": true,
  "completions": {
    "provider": "sourcegraph"
  }
}

大規模コンテキストの推論に適したモデル(Cody Gateway経由のClaude 3.5 Sonnet、Claude 3.7 Sonnet、またはAzure OpenAI GPT-4o)を選択します。また、cody.restrictUsersFeatureFlag が意図せずユーザーを制限していないか確認してください。

ステップ 4: 機密リポジトリを除外するコンテキストフィルターの設定

PCI監査対象コード、シークレット保管庫、社外秘アルゴリズムなど、AIのコンテキストに含めてはならないリポジトリが存在する場合があります。

Codyの Context Filters (cody.contextFilters) を利用して、グローバルに特定リポジトリのコンテキスト取得を除外します。

{
  "cody.contextFilters": {
    "exclude": [
      { "repo": "github.com/company/pci-vault-service" },
      { "repo": "github.com/company/compliance-secrets-.*" }
    ]
  }
}

3. 開発者環境の設定(VS Code、JetBrains、Web)

インフラストラクチャが整ったら、開発者はローカルIDEを設定して複数リポジトリ機能を活用できます。

ステップ 1: IDE拡張機能の接続

  1. VS Code、JetBrains(IntelliJ IDEA、PyCharm、GoLand、WebStorm)、またはVisual Studioのマーケットプレイスから公式 Cody 拡張機能をインストールします。
  2. Codyサイドバーを開き、Sign In with Sourcegraph Enterprise を選択します。
  3. 組織のSourcegraphインスタンスURLを入力します。
    https://sourcegraph.internal.company.com
    
  4. ブラウザでのSSO認証を完了するか、個人アカウントで発行したアクセストークンを入力します。

ステップ 2: ローカルコードベース識別子のマッピング (cody.codebase)

通常、CodyはローカルGitリポジトリのremote originから自動的にSourcegraph上のリポジトリを判別します。

ディレクトリ名をローカルで変更している場合や特殊なサブモジュール構成の場合は、ワークスペース設定(.vscode/settings.json)で明示的に指定します。

{
  "cody.codebase": "github.com/organization/core-payment-service"
}

ステップ 3: チャット画面でのマルチリポジトリコンテキスト管理

Cody Chatウィンドウを開くと、入力欄の上にデフォルトのコンテキストチップが表示されます。

他の組織内リポジトリをコンテキストに追加するには、以下の操作を行います。

  1. コンテキスト管理バー(Context Chips): 入力欄上部のチップをクリックし、最大 10個のリモートリポジトリ を検索して現在のセッションにピン留めできます。ピン留めされたリポジトリは、そのセッション内でのすべての質問の検索対象になります。
  2. @ メンション構文によるピンポイント指定:
    • @repo/organization/legacy-billing-monolith: レガシー請求モノリス全体をコンテキストに追加。
    • @dir/organization/auth-service/pkg/middleware: 特定リポジトリ内の特定ディレクトリやモジュールに対象を絞り込み。
    • @file/organization/proto-contracts/v2/payment.proto: ローカルにcloneすることなく、外部リポジトリのスキーマ定義ファイルを直接参照。
    • @symbol: 組織内のコードですでにインデックスされている特定のクラス、構造体、関数を指定。
  3. Cody Web アプリケーション: ローカルIDEを起動することなく組織全体のアーキテクチャを調査したい場合は、SourcegraphのWebポータルにアクセスし、ナビゲーションバーの Cody アイコンをクリックすれば、全インデックス対象リポジトリに対して直接自然言語で質問できます。

4. 実践プレイブック:複数リポジトリコンテキストでレガシーコードを解読する

レガシーシステムには、当時の開発者が退職している、仕様書が存在しないか古い、ロジックが複数のサービスや古いバッチに分散しているといった難題がつきものです。Codyのマルチリポジトリコンテキストを活用した代表的な解決シナリオを紹介します。

シナリオ A: サービスをまたぐ分散リクエストの実行追跡

最新のチェックアウトマイクロサービスから送信された決済通知が、10年前のレガシー請求モノリス側で時折欠落する事象を調査する場合:

ローカルで checkout-service を開いた状態で、Cody Chatに問い合わせます。

質問プロンプト例: @checkout-service @legacy-billing-monolith @event-bus-contracts 「Checkoutサービスから送信される OrderSubmittedEvent がレガシー請求モノリス側でどのように受信・処理されるかを追跡してください。どのデータベーステーブルが更新され、どのような条件分岐でアカウント残高の引き落としがスキップされますか?」

Codyの内部処理:

  1. @event-bus-contracts 内で定義されたイベントスキーマを確認。
  2. @legacy-billing-monolith から該当トピックを購読するキューリスナーやワーカー処理を検索。
  3. トランザクション処理クラス内のSQL文やストアドプロシージャの呼び出しをトレース。
  4. 引き落としがスキップされる隠れたビジネスルール(例:ハードコードされた古いパートナーIDの除外条件や為替フォールバック処理)を特定して提示。

シナリオ B: ドキュメントのない複雑なビジネスアルゴリズムの復元

コメントのない複雑な計算ロジックや状態遷移を解明する場合:

質問プロンプト例: @core-monolith/src/main/resources/rules/pricing_engine_v1.rb @pricing-integration-tests 「calculate_tiered_rebate 関数の状態遷移とエッジケースを解説してください。@pricing-integration-tests リポジトリにある過去の統合テストケースと照合し、四半期の境界値をまたいだ際にマイナス調整が適用される理由を説明してください。」

Codyは、本番コードとテストスイートのアサーションパターンを照合し、複雑な条件分岐の意図をわかりやすい仕様説明へと変換します。

シナリオ C: API非推奨化と移行時の影響範囲調査

古いRPCエンドポイントを廃止する前の影響調査:

質問プロンプト例: @user-profile-service @notification-service @reporting-worker 「@user-profile-service 内の GetUserPreferencesV1 を非推奨化する予定です。ピン留めされた下流サービスの中でこのエンドポイントを呼び出している箇所、実際に使用されているフィールド、および GetUserPreferencesV2 への移行に必要な修正手順をまとめてください。」

Codyは呼び出し元クライアントのコードを横断検索し、不要なフィールドと必須フィールドを分類して、移行用コードの差分を具体的に提示します。


5. 組織全体のコードベースを自然言語で検索する

従来のコード検索では、正確な関数名や正規表現の知識が必要でした。Codyは自然言語理解とSourcegraphの検索エンジンを組み合わせることで、直感的な探索を可能にします。

社内の標準実装パターンの発見

組織が急拡大すると、異なるチームがRedisの分散レート制限やHTTPリトライ処理を独自に再実装してしまう「車輪の再発明」が起こりがちです。

質問プロンプト例: 「社内のGo言語マイクロサービスでは、Redisを使用した分散レートリミットを通常どのように実装していますか?組織内で最も広く使われている標準パッケージや参考実装を教えてください。」

Codyは社内リポジトリを横断検索し、依存関係を分析して、デファクトスタンダードとなっている内部共通ライブラリ(例:pkg/ratelimit)とそのベストプラクティスコードを提示します。

セキュリティポリシーと非推奨パターンの監査

システム全体のセキュリティ統制を行う場合:

質問プロンプト例: @payment-service @auth-service @mobile-api-gateway 「これらのリポジトリにおけるJWTトークン検証の実装状況はどうなっていますか?署名検証をスキップしている箇所や、キーローテーション非対応の非推奨アルゴリズム(古いRS256など)を使用している箇所はありますか?」

各リポジトリのミドルウェア構成を比較し、セキュリティ設定の不一致や脆弱性のリスクを迅速に洗い出します。


6. ベストプラクティス、注意点、運用指針

複数リポジトリコンテキストを活用する際、以下の運用指針を意識することで回答の精度と速度を最大化できます。

ベストプラクティス理由・効果
1セッションにつき関連性の高い2〜5リポジトリに絞るCodyは最大10リポジトリまで選択可能ですが、無関係なリポジトリを多く含めるとノイズが増加し、プロンプトのコンテキストが圧迫されて精度が低下します。
スキーマや契約ファイルには明示的な @file や @dir を使用する.proto やOpenAPI YAMLなどの定義ファイルを直接指定することで、モデルが曖昧な推測ではなく正確な契約情報に基づいて回答します。
SCIPコードグラフの定期更新を維持するテキスト検索はキーワード一致にとどまりますが、SCIPインデックスは正確なシンボルジャンプを保証します。主要ライブラリのCIにSCIP生成処理を組み込みましょう。
質問送信前にコンテキストチップを確認するチャット入力欄の上に無関係なローカルファイルが自動添付されていないか確認し、不要なチップは削除します。
CodyとBatch Changesの併用Cody Chatでレガシー構造を理解し移行計画を策定した後、Sourcegraph Batch Changesを使って数十リポジトリにわたるコード変更PR/MRを一括自動生成します。

まとめ

Sourcegraph Codyに複数リポジトリコンテキストを設定することで、AIアシスタントは単なるエディタ上の補完ツールから、組織全体のコード知識を結びつけるエンジニアリングパートナーへと進化します。集中同期、精密なセマンティックコードグラフ、確実なアクセス権限制御を組み合わせることで、開発チームはブラックボックス化したレガシーシステムを安全に解読し、自信を持って組織横断のモダナイゼーションを推進できます。


参考文献