見出し画像

GitHubのリポジトリをテキスト化する「Gitingest」を試してみよう!


「Gitingest」って何?

Gitingestは、GitリポジトリをLLMが理解しやすいテキストに変換してくれるツールです。
GitHubのリポジトリURLとか、ローカルで開発しているソースコードのディレクトリを指定すると、ファイルやディレクトリ構造を解析して、テキスト形式で出力してくれる優れもの。
しかも、ファイルサイズやトークン数などの統計情報も教えてくれるので、LLMにコードの内容を理解させるのにめっちゃ役立つんです。

ということで、今回はローカル環境で「Gitingest」の試し方を書いていきます!dockerを使う場合とpipを使う二通りのやり方を記載しますのでご自身の環境に合わせてお試しください!
実行環境は共通して以下の通りです。

実行環境

Windows11
cursor
Python 3.11.6
Powershell
DockerDesktop

【Docker】を使う場合

Dockerを使用する場合はブラウザでGitHubリポジトリのテキスト化をすることが可能です。Dockerが使える環境であればすぐに試せるのでサクッと試したい方はお勧めです。

リポジトリのクローン

任意のフォルダを作成後、Gitingestのリポジトリを以下のコマンドを使用してクローンします。
クローンをしたらフォルダを移動しましょう。

git clone https://github.com/cyclotruc/gitingest.git
cd gitingest

ビルドの実行

フォルダの移動後、以下のコマンドを実行しDocker イメージを作成します。
準備はこれで完了です。楽でいいですね。

docker build -t gitingest .

Gitingestアプリケーションの実行

では、GitingestをDockerコンテナとして実行しましょう。以下のコマンドを実行して下さい。

docker run -d --name gitingest -p 8000:8000 gitingest

Gitingestを試してみる

では、ブラウザのURLに「http://localhost:8000/」を入力しましょう。
Gitingestのアプリケーションが表示されればOKです。

かわいい

今回は「bolt.diy」のリポジトリをテキスト化してみましょう。URLの入力欄に『https://github.com/stackblitz-labs/bolt.diy』を入力し、「Ingest」ボタンをクリックしてください。

出力例

「Summary」、「Directory Structure」、「Files Content」でテキストが出力されれば成功です!

Gitingestアプリケーションの停止・再開

gitingestの終了・再開は以下のコマンドです。不要になったコンテナはDocker Desktopから削除しましょう。

# 停止
docker stop gitingest

# 再開
docker start gitingest

dockerを使った場合の手順は以上です。

【pip】を使う場合

続いてはpipを使う場合の試し方を紹介します。プログラムの一部として使用したい場合はこちらをお試しください。

venvで仮想環境準備

任意のフォルダを作成します。cursorで作成したフォルダを開いたらターミナル(Powershell)で以下のコマンドを実行して仮想環境を作成&アクティベート。

python -m venv gitingest-env
.\gitingest-env\Scripts\activate     

仮想環境をアクティベートしたら以下のコマンドを実行してgitingestのパッケージをインストールします。

pip install gitingest

Gitingestを実行するコードの準備

続いて、Gitingestを実行するコードの準備をします。以下のコマンドを実行してpythonファイルを作成してください。

New-Item -Path "gitingest_test.py" -ItemType "file"

ファイルを作成したら以下のコードを入力してください。今回は上記で作成したコードと同じフォルダに「Summary」、「Directory Structure」、「Files Content」のそれぞれのファイルを出力するようにしています。

from gitingest import ingest

summary, tree, content = ingest("https://github.com/stackblitz-labs/bolt.diy")

# summary、tree、contentをそれぞれのデータをカレントフォルダにファイルで出力する
def save_to_file(file_name, data):
    """データを指定されたファイルに保存する関数

    Args:
        file_name (str): 保存先のファイル名
        data (str): 保存するデータ
    """
    try:
        with open(file_name, 'w', encoding='utf-8') as file:
            file.write(data)
    except Exception as e:
        print(f"ファイル {file_name} にデータを保存中にエラーが発生しました: {e}")

# summaryをファイルに保存
save_to_file('gitingest_summary.txt', summary)

# treeをファイルに保存
save_to_file('gitingest_tree.txt', tree)

# contentをファイルに保存
save_to_file('gitingest_content.txt', content)

Gitingestを試してみる

準備が整ったので早速試してみます。
ターミナルから以下のコマンドを実行し、作成したプログラムを実行します。

python .\gitingest_test.py

エラーが発生せずに終了できたら、以下のコマンドを実行してファイルが作成できているか確認しましょう。

"gitingest_content.txt", "gitingest_summary.txt", "gitingest_tree.txt" | Get-Item | Select-Object Name, Exists, Length, LastWriteTime
こんな感じにファイルが作成される

ファイルを開くとリポジトリのtree構造やソースコードがテキスト化されています。

これでpipを使った場合の手順は以上です。

テキスト化したデータをLLMに読み込ませよう!

ではテキスト化したリポジトリのデータをLLMに読み込ませてみましょう。Difyなどでもいいですが今回はNotebookLMを使用します。
ダウンロードあるいは作成したファイルをNotebookLMに読み込ませてみます。

良い感じに読み込まれてそう

リポジトリに対して質問をするとしっかり返してくれます。今回はアーキテクチャについて聞いてみましたが、コードの解説を依頼してもコードベースで回答してくれます。

終わりに

プログラミングのスキルを向上したいと思い、OSSを読んで学びを得ようと思っていたので渡りに船だったのでワクワクしながら検証できました。複数のOSSのリポジトリ情報を統合して新たなプログラムを作っていくのも楽しそうです。個人的にはGitHubでドキュメント管理をしていると面白いことができそうだなと思いました。

(捕捉)注意点

Gitingestはリポジトリを一度、ローカルにクローンすることでtree構造やソースコードを取得しています。そのため、リポジトリのサイズが多い場合、一時的にストレージを圧迫する可能性があります。
お試しになる際はストレージに余裕を持つようにしましょう。

いいなと思ったら応援しよう!