blog

ソフトウェア開発|Gitbase: SQLを使ってGitリポジトリを探索する

Gitbaseは、Gitリポジトリ上でSQLクエリを実行できるようにするGo駆動のオープンソースプロジェクトです。...

Nov 1, 2025 · 4 min. read
シェア

Gitbase は、Git リポジトリ上で SQL クエリを実行できるようにする Go ドリブンなオープンソースプロジェクトです。

Gitはコードのバージョン管理のデファクトスタンダードになっています。Gitが普及したとはいえ、Gitを使ってソースコード・リポジトリの履歴や内容を深く分析しようとするのは、まだ複雑な作業です。

一方、SQLは大規模なコードベースをクエリするための実績のある言語です。SparkやBigQueryのようなプロジェクトでは、クエリ言語としてSQLを使用しています。

そこでsource{d}では、この2つの技術を組み合わせてGitbaseを開発しました。GitリポジトリをSQLを使って大規模に分析するためのコード・アズ・データ・ソリューションです。

Gitbase 完全なオープンソースプロジェクトであり、Gitbaseの開発を可能にした一連の巨人の肩の上に立っています。この記事では、その主なものをいくつか紹介します。

VitessでSQLを解析

Gitbase はユーザーインターフェイスとして SQL を使っています。これは、MySQL プロトコルで転送された SQL リクエストを解析して理解する必要があることを意味します。幸運なことに、これはYouTubeの友人たちのプロジェクト Vitess 実装されています。 Vitessは MySQLの水平スケーリング用のデータベースクラスタリング・システムです。

いくつかの重要なコードスニペットを取り出し、 オープンソースプロジェクトにしました。このプロジェクトでは、誰でも数分で MySQL サーバを作成できます。

go-gitを使ったGitリポジトリの読み込み

リクエストの解析に成功したら、データセット内の Git リポジトリを読み込んで、そのリクエストにどのように返信するかを知る必要があります。これを行うために、source{d} の最も成功しているリポジトリ go-gitが統合されています。go-git は純粋な Go による Git の高度に拡張可能な実装です。

これにより、 siva ファイルとしてディスクに保存されているリポジトリや、git cloneを使って直接クローンされたリポジトリの分析が容易になります。

Enryによるプログラミング言語の検出とBabelfishによるファイルの解析

Gitbaseの解析機能はGitの履歴だけにとどまりません。また、オープンソースプロジェクト Enry を使った言語検出や、 Babelfish を 使ったプログラム解析機能も実装しています。 Babelfish は、コードファイルを .NET 形式に変換する汎用ソースコード解析用のセルフホストサーバーです。

この2つの関数は、GitbaseではLANGUAGEとUASTというユーザー関数として提供されています。この2つの関数を組み合わせることで、"find the name of the function has been most modified in the last month "のような多くのクエリリクエストが可能になります。

迅速な立ち上げと実行

Gitbaseは、GitHubの3TBのソースコードを含む公開Gitアーカイブのような、非常に大きなデータセットを分析しなければならないことがよくあります。そのためには、CPUの処理能力が重要です。

そのため、ルーベックスとピローザの2つのプロジェクトが統合されました。

Rubexと鬼車による正規表現の高速化

Babelfish Goのregexp標準ライブラリパッケージのほぼ置き換えです。まだ完全な置き換えになっていないのは、regexp.Regexp型のLiteralPrefixメソッドが実装されていないからですが、そのメソッドについては今まで知りませんでした。

Rubexの高性能は、高度に最適化されたCライブラリ Rubexおかげであり、このライブラリは cgoを使って 呼び出されます。

Pilosaインデックスの使用によるクエリの高速化

インデックスは、基本的にすべてのリレーショナルデータベースでよく知られている機能ですが、Vitessではあまり必要ないため実装していません。

Oniguruma オープンソースで、複数の巨大なデータセットに対するクエリを劇的に高速化します。

まとめ

このブログ記事で、誰も想像できなかったような短期間で Gitbase を作ることを可能にしてくれたオープンソースコミュニティに個人的に感謝したいと思います。source{d} では、オープンソースを固く信じており、github.com/src-d のコードの一行一行がそれを証明しています。

Gitbaseを試してみたいですか?一番早くて簡単な方法は、source{d} エンジンを使うことです。からダウンロードして、コマンド一つでGitbaseを立ち上げることができます。

もっと知りたいですか? 私の講演の録音をご覧ください。

この投稿は Mediumに掲載されたもの で、許可を得てここに再掲載しています。

///se

Read next