Code Searchは、Googleの巨大な内部コードベースを検索するためにGoogle開発者によって使用される。現在、Googleは、TensorFlow、Go、Angular、その他多くのGoogleのオープンソースプロジェクトを探索し、より理解するために、誰もがアクセスできるようになっている。
CodeSearchは、開発者が簡単にコードベース内を移動したり、強力な検索言語を使用して関数や変数を見つけたり、それらが使用されている場所をすぐに見つけたりできるようにすることを目的としている。
Code Searchはタイプ時に提案するタイプのヘルプをサポートする高度なUIを提供する。ヘルプには、オブジェクトのタイプ、ファイルのパス、およびオブジェクトが属するリポジトリに関する情報が含まれる。この種の動作は、カスタム検索言語を使用する、コードに強いテキスト検索によってサポートされる。たとえば、Goファイルで関数foo
を検索するには、lang:go:function:foo
を使用できる。
相互参照情報を含むリポジトリの場合、Code Searchでは、特定のシンボルが参照されている場所のリストなど、より豊富な情報を表示することもできる。相互参照情報を提供するCode Searchリポジトリには、Angular、Bazel、Goなどがある。
相互参照検索はKytheが活用されている。Kytheは、言語に依存しない交換メカニズムの標準を提供することを目的とした別のGoogleオープンソースプロジェクトである。これは、エディター、コンパイラー、コードレビューツールなどのさまざまな開発ツール間で情報を共有するために使用できる。最初のステップとして、Code SearchはKytheを使用して、コンパイルされたコードからグラフを作成する。
次に、Googleは内部パイプラインを実行する。このパイプラインは、さまざまな言語向けにこれらのグラフを組み合わせ、不要な部分を削除し、相互参照を提供するために最適化される。データを最新の状態に保つために、プロセス全体が1日に数回実行される。
GoogleのエンジニアがHacker Newsで説明したように、Code SearchではGoogleで使用されている実際のリポジトリにアクセスできない。これらのリポジトリのインデックス付きバージョンを公開して、コンテンツを検索で利用できるようにするものである。さらに、パブリックCode SearchインターフェースにはGoogleのエンジニアに提供されるすべての機能が含まれているわけではない。自動コード分析とリンティング、コードカバレッジ、ファジング統合などは含まれていない。Hacker Newsの別のコメント投稿者が指摘したように、これらの機能の一部はBazelに依存しているため、簡単にエクスポートすることはできない。
この種のインフラストラクチャを独自のリポジトリに複製したい開発者や組織は、TreeTide underhoodと共にKytheを調べてください。underhoodは、Kytheの上に高度なコードブラウジングエクスペリエンスを提供するオープンソースプロジェクトである。
Kythe+TreeTide underhoodに相当する商用版はSourceGraphであり、Uber、CloudFlareなどの多くの大企業で使用されている。