AIにプロジェクトを読ませる「Project Analyzer」がNotebookLMに完全対応&ファイル個別出力も可能に!

【アップデート】AIにプロジェクトを読ませる「Project Analyzer」がNotebookLMに完全対応&ファイル個別出力も可能に!

こんにちは!AIツールにプロジェクトをまるごと読み込ませるための自作ライブラリ「Project Analyzer」のアップデート情報です。
(前回の記事:AIにプロジェクトを読ませる「Project Analyzer」がExcel/Wordファイルに対応!設計書も丸ごとMarkdown化

私自身、このツールを使ってGoogleの「NotebookLM」などにソースコードを読み込ませて日々活用しているのですが、実際に使っている中で「AIが一部のコードを正しく解釈してくれない」「回答の参照元ファイルが分かりづらい」といった課題が見えてきました。

そこで今回は、より快適にAIと対話できるようにファイルごとの個別出力機能を追加し、さらにNotebookLM特有の読み込みエラー(パース失敗)を解消する不具合修正を行いました!


🚀 新機能:ファイルごとのMarkdown出力に対応!

これまでProject Analyzerは、AIに一度に渡しやすくするため、プロジェクト全体の全ファイルを「1つの巨大なMarkdownファイル」にまとめて出力していました。

しかし、NotebookLMで処理した際、AIが回答の根拠として提示する「参照元情報」をクリックしても、1つの巨大なファイルが開くだけで、実際にはどのクラスやファイルを参照したのかが非常に確認しづらいという問題がありました。

そこで、新しく「ファイルごとにMarkdownを出力する機能(オプション)」を追加しました!
このオプション(CLIでは --per-file)を有効にすると、01_ProjectContexts フォルダ内に、元のフォルダ構成を維持したまま Hoge.cs.md のように個別のファイルとして出力されます。
これにより、NotebookLM上での参照元ファイルが明確になり、ソースの確認が圧倒的に楽になります。


🔧 不具合修正:NotebookLMでの読み込みエラーを徹底解消!

NotebookLMにソースコードを読み込ませた際、AIが途中で文章の解釈を諦めてしまい、うまく回答を生成できない事象が発生していました。原因を調査したところ、以下の2つの問題が起きていたため、専用のオプションで回避できるように修正しました。

1. インデントによる「意図しないコードブロック化」問題

Markdownの仕様上、行頭に4つ以上のスペースがあると、そこから自動的に「コードブロック」として解釈されてしまいます。
メソッド内の処理など、C#などのソースコードは基本的にインデントされているため、NotebookLMが「ここからコードブロックが始まった」と誤認し、ツールの意図した構造通りにパースされない事象が発生していました。

【対応内容】
行頭のインデント(スペースやタブ)をすべて削除して出力するオプション(--remove-indent)を追加しました。これにより、Markdownの誤解釈を防ぎます。(※Pythonなどインデントに意味がある言語の場合はご注意ください)

2. 角括弧([ ])による「Markdown構文の誤動作」問題

以前のバージョンで、HTMLタグ(<summary>等)がNotebookLMの動作を阻害するのを防ぐため、タグを角括弧([summary])に置換する処理を入れていました。
しかし、コードブロック(```)で囲まれていないプレーンテキスト内に [] が現れると、今度はNotebookLMがそれを「リンクなどのMarkdown特殊構文」と勘違いしてしまい、そこで文章の読み込みを中断してしまうことが分かりました。

【対応内容】
HTMLタグを無害化する処理(--sanitize-html)のアプローチを変更し、角括弧ではなく全角の「<」「>」に置換(例:<summary>)するように修正しました。これにより、読み込みが中断される不具合が解消しました。

3. ツリービューでのコードブロック削除漏れを修正

「コードブロック記号(```)を出力しない」オプション(--no-codeblock)を指定した際、ソースコード本体からは記号が消えていたものの、最初のフォルダ構成ツリー(00_ProjectTree.md)には ``` が残ったままになっていた不具合を修正しました。


💻 C#コード&CLIからの使い方

NuGetからパッケージをインストール(またはアップデート)します。

dotnet add package ProjectAnalyzer.Core

C#コードからの呼び出し例

今回追加された新オプションをフル活用して、NotebookLMに最適な状態でメモリ上にデータを取得する例です。

using ProjectAnalyzer.Core;
using ProjectAnalyzer.Core.Utils;

// 設定の読み込み
var settings = SettingsLoader.Load(
    projectPath: "C:\\path\\to\\your\\project",
    outputPath: "C:\\path\\to\\output", 
    outputToFile: true, // 今回はファイルに出力します
    omitCodeBlockTicks: true, // Markdownの ``` を省略する
    outputPerFile: true,      // ★新機能:ファイルごとに個別出力する
    sanitizeHtmlTags: true,   // ★修正:HTMLタグを全角(<>)にして無害化する
    removeIndent: true        // ★新機能:インデントによる誤解釈を防ぐため削除する
);

using var analyzer = new Analyzer(settings);
AnalyzerResult result = analyzer.Analyze();

コマンドライン(CLI)からの実行例

CLIツールをお使いの場合は、以下のようにオプションを付与するだけでNotebookLM向けの最適化と個別出力が可能です。

# NotebookLM向けに最適化して、ファイルごとに個別出力する場合
ProjectAnalyzer.Cli.exe --per-file --no-codeblock --sanitize-html --remove-indent

🔗 リンクとまとめ

NotebookLMは大量のドキュメントを読み込ませてチャットベースで情報を引き出すのに非常に強力なツールですが、マークダウンの解釈には少し癖がありました。
今回のアップデートで、その「癖」をツール側で吸収できるようになったため、AIとのペアプログラミングやコード読解がさらに捗るようになると思います!

▼ 更新したNuGetのページはこちら
https://www.nuget.org/packages/ProjectAnalyzer.Core

▼ ソースコード(GitHubリポジトリ)はこちら
https://github.com/flying-YT/ProjectAnalyzer

ぜひ最新版の ProjectAnalyzer をアップデートして、より快適なAI開発ライフをお楽しみください!

コメント

このブログの人気の投稿

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

PowerAppsで座席表を作成する

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