PostgreSQL ソース解析 AI アプリ – day 25

30 days AI challenge

本記事は 2026/02/01 ~ 2026/03/02 の間毎日 AI アプリケーション開発(AI を搭載したアプリ開発 or AI を使用した開発)をテーマに 30 days AI challenge を行う 25 日目のブログポストです。

今日はデータベース技術よりの話で “PostgreSQL のソースコードを解析/機能修正できる AI アプリ” を作りました。

アプリ概要

ポスグレのソースコードを local にクローンし、そのソースコードを AI に読み込ませソースコードの解析をしてくれます。

機能や処理の内容を AI に聞くことで、どのコードやメソッド、関数にて実装されているのかを検索できます。

最初は GitHub API でポスグレの master ブランチを読み取る実装にしましたが、GitHub のソース内容を読み取る場合は多くの API リクエストが発生し上限にすぐ達しそうなので、ローカル参照にしました。

また、既存の機能修正や機能追加をする際のどのソースを修正/追加すればよいかを AI が考えてくれる機能も追加しました。
実際に提案内容をもとに build していないので、どれほど正確な回答となっているかは不明ですが、少し動きを見た感じそれなりにまともなことを言っているように思えます。

*本当はその修正を AI が実際に実装し build までお願いできればよかったのですが、それはまた別のお話で。。。(一応その機能自体は実装しましたが、動くかは。。。)

解析したソースコードや履歴は SQL Server に格納してあるので、あとから履歴を追うことも可能にしました。

技術要素

ソースを取得して、AI に分析させる処理は大まかに以下の通りです。

Step処理内容
1BuildIdentificationPrompt自然言語質問からソースファイル・関数名を特定
2SearchAndFetchCodeAsyncローカルソースをキーワード検索し、該当コードを取得
3BuildAnalysisPrompt実ソースコード付きで詳細解析をAIに依頼
var identificationResponse = await CallGeminiAsync(identificationPrompt);
var searchKeywords = ExtractSearchKeywords(identificationResponse);
// ローカルから実コード取得
var results = await _githubService.SearchAndFetchCodeAsync(keyword, 2);
// 実コード付きで解析
var analysisResponse = await CallGeminiAsync(analysisPrompt);

_githubService というインスタンス名ですが、GitHub を参照するのはクローンをしてくるときとソースコードのリンク先として GitHub になっているだけです。紛らわしいですが GitHub からソースコードを読み取る動きではありません。

ローカルのソースコードを読み取る個所は以下の通り、特定のファイルを読み取るようにしています。

AI の Token 制限のため、検索するファイルを絞っています。そのため、ここの上限は実際に使ってみて調整する必要がありそうです(少ないと不正確な情報が出る可能性があります)。

public Task<List<PgSourceFile>> SearchCodeAsync(string query, string? pathFilter = null)
{
    var searchRoot = Path.Combine(_localRepoPath, pathFilter ?? "src");

    // C/H ファイルのみ検索
    var extensions = new[] { "*.c", "*.h", "*.y", "*.l" };
    var allFiles = extensions.SelectMany(ext =>
        Directory.GetFiles(searchRoot, ext, SearchOption.AllDirectories));

    foreach (var filePath in allFiles)
    {
        var content = File.ReadAllText(filePath);
        if (content.Contains(query, StringComparison.OrdinalIgnoreCase))  // ここが grep 相当
        {
            results.Add(...);
        }
        if (results.Count >= 20) break;  // 最大20件
    }
}

終わりに

今日は PostgreSQL に関する AI アプリでした。

日ごろデータベース製品を専門としていますが、PostgreSQL については詳しくないので正直ソースコードも深く理解していません。
このアプリを使うことで、よりポスグレの動きを深く知ることができるかもしれません。

ちなみに、Copilot に同じように PostgreSQL のソースコードに関する質問をすると PostgreSQL コミュニティやドキュメント情報から似たような回答を出してくれました。AI アプリにする必要性がどこまであるかわかりませんが、もう少し agentic にすれば価値はあるかもしれません。

本日はここまで。最後までご覧いただきありがとうございました。明日もお願いします。

コメント

タイトルとURLをコピーしました