【自作ツール】プロジェクトをNotebookLMのソースに

プロジェクトをNotebookLMのソースに

【自作ツール】プロジェクトをNotebookLMのソースに

最近話題のAIノートアプリ「NotebookLM」は本当に便利です。ドキュメントを読み込ませるだけで、内容の要約や質疑応答ができてしまう優れものです。

これを「自作プログラムのソースコード分析にも使いたい!」と考えたことがある開発者の方も多いのではないでしょうか?しかし、ここに一つ大きな壁があります。

  1. NotebookLMはソースコードをそのまま使えない。
  2. NotebookLMは非常に優秀ですが、残念ながらC#やJavaなどのソースコードファイル(.csや.javaなど)を直接アップロードして分析することはできません。そのため、一度マークダウン形式に手作業でコピペする。。などの手間が発生してしまいます。これではせっかくの効率化ツールも宝の持ち腐れです。

  3. GitHubのプライベートリポジトリは使えない
  4. 「GitHubリポジトリを連携させれば良いのでは?」と思うかもしれません。確かにその方法もありますが、連携できるのはパブリックリポジトリ(公開リポジトリ)のみです。
    つまり、「まだ公開していない開発中のプロジェクト」や「ローカルのプロジェクトファイル」などは、対象外になってしまいます。

そこで、そういった課題に対応できる「ProjectAnalyzer」を開発しました。
もちろん、公開リポジトリであればuithubなどのオンラインツールを使うこともできますが、ローカルプロジェクトには対応できません。だからこそローカルで動作するこのツールを開発しました。


ProjectAnalyzer

ProjectAnalyzer」を開発しました。
https://github.com/flying-YT/ProjectAnalyzer

このツールは、指定したプロジェクトフォルダを分析し、AIが最も理解しやすい形である単一のマークダウンファイルとして出力します。

主な機能

  1. プロジェクト構造の可視化
  2. フォルダの階層構造をツリー形式で出力し、プロジェクトの全体像を瞬時に把握できます。

  3. 全ソースコードの統合
  4. プロジェクト内の全てのソースコードを、1つのマークダウンにまとめます。

このツールの最大の強み

「ProjectAnalyzer」はインターネットに接続する必要も、どこかにアップロードする必要もありません。
そのため、プライベートなリポジトリや、ローカルのフォルダでもセキュリティを気にすることなく安全に利用できます。


使い方

  1. リポジトリをクローンし、.NET環境でビルドします。
  2. コマンドラインでdotnet runを実行し、分析したいプロジェクトのパスを指定するだけ。
dotnet run "C¥projectFolder" "C¥output"
実行後、出力フォルダに「00_PeojectTree.md」(フォルダ構成)と「01_ProjectContext.md」(ソースコード)の2つのファイルが生成されます。
あとは、このマークダウンファイルをNotebookLMにアップロードすれば、すぐにあなたのプロジェクトに関する質疑応答を開始できます。

  1. 00_ProjectTree.md
  2. # 🌳 Project Folder Tree
    
    ```
    ProjectAnalyzer
    └── ├── ProjectAnalyzer
        └── ├── AnalyzerSettings.cs
        └── ├── FileContentGenerator.cs
        └── ├── LanguageMapper.cs
        └── ├── Program.cs
        └── ├── ProjectAnalyzer.cs
        └── ├── ProjectAnalyzer.csproj
        └── ├── SettingsLoader.cs
        └── └── TreeGenerator.cs
    └── ├── LICENSE.txt
    └── ├── ProjectAnalyzer.sln
    └── └── README.md
    
    ```
  3. 01_ProjectContext.mdの抜粋
  4. ---
    
    ## Program.cs
    
    **Relative Path:** `ProjectAnalyzer\Program.cs`
    
    **File Content:**
    <details>
    <summary>View with syntax highlighting</summary>
    
    // このファイルはアプリケーションのエントリーポイントです。
    // This file is the application's entry point.
    // コマンドライン引数を解釈し、分析処理を初期化して実行します。
    // It parses command-line arguments, initializes, and runs the analysis process.
    
    // --- 設定 ---
    // --- Settings ---
    string projectPath = args.Length > 0 ? args[0] : ".";
    string outputPath = args.Length > 1 ? args[1] : "output";
    
    // --- メイン処理 ---
    // --- Main Process ---
    try
    {
        // 1. 設定の読み込み
        // 1. Load settings
        var settings = SettingsLoader.Load(projectPath, outputPath);
    
        Console.WriteLine("--- Project Analyzer ---");
        Console.WriteLine($"🔍 Project Path: {settings.ProjectPath}");
        Console.WriteLine($"📂 Output Path:  {settings.OutputPath}");
        Console.WriteLine("------------------------\n");
    
        // 2. 分析の実行
        // 2. Run analysis
        var analyzer = new ProjectAnalyzer(settings);
        analyzer.Analyze();
    
        Console.WriteLine("✅ Analysis complete!");
    }
    catch (Exception ex)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine($"\n❌ An unhandled error occurred: {ex.Message}");
        Console.ResetColor();
    }
    </details>
    
    ```csharp
    // このファイルはアプリケーションのエントリーポイントです。
    // This file is the application's entry point.
    // コマンドライン引数を解釈し、分析処理を初期化して実行します。
    // It parses command-line arguments, initializes, and runs the analysis process.
    
    // --- 設定 ---
    // --- Settings ---
    string projectPath = args.Length > 0 ? args[0] : ".";
    string outputPath = args.Length > 1 ? args[1] : "output";
    
    // --- メイン処理 ---
    // --- Main Process ---
    try
    {
        // 1. 設定の読み込み
        // 1. Load settings
        var settings = SettingsLoader.Load(projectPath, outputPath);
    
        Console.WriteLine("--- Project Analyzer ---");
        Console.WriteLine($"🔍 Project Path: {settings.ProjectPath}");
        Console.WriteLine($"📂 Output Path:  {settings.OutputPath}");
        Console.WriteLine("------------------------\n");
    
        // 2. 分析の実行
        // 2. Run analysis
        var analyzer = new ProjectAnalyzer(settings);
        analyzer.Analyze();
    
        Console.WriteLine("✅ Analysis complete!");
    }
    catch (Exception ex)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine($"\n❌ An unhandled error occurred: {ex.Message}");
        Console.ResetColor();
    }
    ```
    
01_ProjectContext.mdは、ファイルの中身をそのまま記載したものと、コードとして表示できるように2回記述をしています。
NotebookLMはコード表示の中身は解釈できないようなので、コードをベタ書きしたものを含めないといけません。
そのため、ベタ書き部分はdetailタグで囲い、人が表示した際には視認性を下げないようにしています。


さいごに

NitebookLMのような強力なAIツールと自作のソースコードを連携させたいけど直接アップロードできない、そんな悩みを解決するため「ProhectAnalyzer」を開発しました。
もちろん他にも色々なツールがあると思いますが、ぜひこのツールも試してみてください。

そして、「もっとこういう機能も欲しい」とか「この部分が不具合としてある」など色々な意見を頂ければと思います。
特に不具合については、GitHubのIssueにあげていただけると助かります。

今回はこの辺で、ではまた!

コメント

このブログの人気の投稿

Power Automateでファイル名から拡張子を取得

PowerAppsで座席表を作成する

Power AutomateでTeamsのキーワードをトリガーにする