【ITニュース解説】My experience in building the repository-context-packager tool
2025年09月20日に「Dev.to」が公開したITニュース「My experience in building the repository-context-packager tool」について初心者にもわかりやすく解説しています。
ITニュース概要
PythonでCLIツール「Repository-Context-Packager」を開発。リポジトリのgit情報や構造、ファイル内容を収集・整理し、一つのテキストファイルに出力する。ChatGPTなどLLMとのコード共有を効率化する。
ITニュース解説
この解説では、「Repository-Context-Packager」という、開発者がChatGPTなどの大規模言語モデル(LLM)にプログラムのコードを効率よく共有するためのコマンドラインツールを構築した経験について深掘りする。システムエンジニアを目指す上で、このようなツールの開発背景や技術要素を理解することは非常に役立つだろう。
このツールの主な目的は、開発者が書いたコードをAIにただ見せるだけでなく、そのコードがどのようなプロジェクトの一部で、どんな構造を持ち、これまでの変更履歴がどうなっているかといった「文脈」をまとめて伝えることにある。AIがコードを正確に理解し、適切なフィードバックや提案をするためには、この文脈情報が不可欠だ。
具体的に、このツールは以下の機能を持つ。まず、ローカル環境にあるプログラムの「リポジトリ」(ソースコードや関連ファイルが保管されている場所を指す)のディレクトリをスキャンする。スキャンによって、そのリポジトリの重要な情報が集められる。例えば、Gitというバージョン管理システムから、最新のコミットハッシュ(変更履歴を識別するための固有の番号)、変更を行った作者、変更日時といった基本的な情報が抽出される。Gitは、プログラムの変更履歴を記録し、複数人での共同開発を助けるシステムである。
次に、プロジェクト全体のディレクトリ構造も収集される。どのファイルがどのフォルダにあり、どのような階層になっているかを把握することで、プロジェクトの全体像が掴みやすくなる。さらに、対象となる個々のファイルの中身も読み取られ、ファイルの内容そのものが収集される。そして、総ファイル数や総行数といった基本的なメタデータ(データに関するデータ)もまとめて取得される。これらすべての情報が集められた後、ツールはこれらを整形し、一つの構造化されたテキストファイルとして出力する。このファイルが、AIがプロジェクトを理解するための「文脈」を提供するのだ。
開発者がこのプロジェクトに採用したプログラミング言語は「Python」である。彼は以前からPythonに慣れ親しんでおり、他の言語(例えばC++)からしばらく離れていたこともあり、使い慣れた言語でスムーズに開発を始めたかったという理由があった。この選択は、開発を迅速に進める上で非常に有効だったようだ。
コマンドラインツールとして機能させるために、「argparse」というPythonの標準ライブラリが利用された。argparseは、ツールを実行する際にユーザーが指定する「コマンドライン引数」(例えば、--versionでツールのバージョンを表示したり、--output <ファイルパス>で結果を特定のファイルに保存したりするオプション)を、プログラムが簡単に解釈できるようにする機能を提供する。これにより、ユーザーはターミナルから様々な指示をツールに与えることが可能になる。
Gitリポジトリから情報を取得するためには、「GitPython」という外部ライブラリが使用された。このライブラリを使うことで、最新のコミットハッシュ、現在のブランチ名、コミットを行った作者、タイムスタンプといったGitの情報を、Pythonコードから簡単かつ効率的に抽出できた。このGitPythonライブラリは、ツールのユーザーが手動でインストールするか、ツールの要件としてインストールガイドに従って導入する必要がある場合もある。
リポジトリ内のディレクトリ構造を再帰的に(つまり、フォルダの中のさらに深いフォルダまで)探索し、すべての関連ファイルを見つけ出すために、Pythonの標準モジュールである「os」が使われた。「os.walk」という機能は、特定のディレクトリ以下にあるすべてのファイルとサブディレクトリを順番にたどることができるため、プロジェクトのコードファイルを漏れなく収集するのに非常に役立った。また、このツールは「.gitignore」ファイルに記載されているファイルやフォルダを無視する機能も実装している。.gitignoreは、Gitで管理したくない一時ファイルや生成物などを指定するためのファイルであり、これを無視することで、AIに不要な情報を渡してしまうことを避けられる。
最終的な出力形式を管理し、生成されたコンテンツを一時的にメモリ上に保持するためには、「io」ライブラリが用いられた。このライブラリのおかげで、ツールはユーザーが--outputフラグを指定した場合には結果をファイルに書き出し、指定がなければ直接ターミナル画面に表示するといった柔軟な出力方法を提供できる。
開発者はこのプロジェクトの作業を非常に自然に感じていたと述べている。コードを書き、それが正しく動くかテストし、変更内容をGitにコミットするという一連のサイクルをスムーズに繰り返すことができた。途中で長時間行き詰まることも少なく、他の学習課題とこのプロジェクトの作業を容易に切り替えることができたようだ。これは、使い慣れたPython言語と、argparseやGitPythonといった適切なライブラリの選択が、開発効率を高める上でいかに重要であるかを示している。
このツールの最初のリリースに対して、開発者は大きな手応えを感じており、今後もさらに機能を改善・洗練させていくことに意欲を見せている。このようなツールは、AIがより深く開発者のコードを理解し、開発プロセスを支援するための重要な一歩となる可能性を秘めていると言えるだろう。システムエンジニアとして、AIを開発支援に活用する流れは今後さらに加速すると予想されるため、このようなツールの開発経験は非常に価値がある。