【要約】自作AIツールがnode_modulesまで読みに行く問題をgit ls-filesで直した [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
AIエージェントの開発者が、リポジトリ内のソースコードを収集する前処理において、処理速度の低下と精度の低下に直面した。具体的には以下の問題が発生している。
- ・Path.rglob()による探索が、node_modulesや.nextなどの巨大な生成物ディレクトリまで走査してしまう。
- ・探索に数秒を要し、AIに渡すコンテキストに不要なノイズが混入する。
- ・手動で除外リストを管理する場合、プロジェクトごとに異なるディレクトリへの対応が必要となり、メンテナンスコストが増大する。
// Approach
開発者は、ファイルシステムを直接走査するのではなく、Gitの管理情報を利用して「人間が読むべきファイル」を特定するアプローチを採用した。
- ・git ls-filesコマンドを活用し、Git管理下のファイルと未追跡ファイルを同時に取得する。
- ・--cachedオプションで管理済みファイルを、--othersで未追跡ファイルを指定する。
- ・--exclude-standardオプションにより、.gitignoreに基づいた除外ルールを自動適用する。
- ・Gitリポジトリ外での動作を考慮し、subprocessを用いた実行とrglobへのフォールバック処理を実装する。
// Result
開発者は、ファイル探索の高速化と入力データのクリーン化を同時に達成した。定量的な成果は以下の通りである。
- ・Next.js系のプロジェクトにおいて、探索速度が最大約226倍(294.0msから1.3ms)に向上した。
- ・プロジェクトの規模に関わらず、最小で約5倍の高速化を確認した。
- ・.gitignoreを活用することで、除外リストのメンテナンスが不要な、堅牢なファイル収集ロジックを実現した。
Senior Engineer Insight
> 実戦的な最適化である。AIエージェントのようにコンテキストの質が性能を左右するシステムでは、計算資源の節約以上に、不要な情報の排除が重要だ。rglobによる手動の除外リスト管理は、プロジェクトの成長に伴い必ず破綻する。Gitという既存の信頼できるメタデータを利用する設計は、実装コストと運用の両面で極めて合理的である。