🦙

リポジトリ全体を1ファイルにまとめてLLMに投げる

2024/12/30に公開

とりあえず成果物

https://github.com/yutaka-shoji/repod

タイトル通りです.
cursorが使える場合は@codebaseした方が楽ですが,私自身がvimユーザかつavante.nvimの使用感がまだイマイチだったりするのでまるごとgpt/claudeなどLLMにブラウザ上で放り込みたい時があります.
何番煎じかわからないですが,コマンドとしてどこでも使えるものが欲しかったので作りました.
完全に以下をリスペクトしています.

使い方

インストール

Python製です.
Python 3.10以上がインストールされている環境で以下を実行します:

pip install repod-cli

コマンド

とりあえず

cd /path/to/your/repo
repod # デフォルトでカレントディレクトリ以下の内容を./repod.mdに出力する

または、

repod /path/to/your/repo

オプション

repod [OPTIONS] [REPO_PATH]

Options:
  -o, --output FILE       出力ファイルのパス(default: repod.md)
  -i, --ignore-file FILE  除外パターンファイル(default: .rpdignore)
  -p, --preamble FILE     プリアンブルファイルのパス
  --no-tree               ツリー構造の出力を無効化

デフォルトの除外パターン

repodは以下のようなファイルやディレクトリをデフォルトで除外します:

  • バージョン管理関連(.git,.gitignore
  • キャッシュファイル(__pycache__, *.pyc
  • 仮想環境(.venv
  • バイナリファイル(*.png, *.jpg
  • ビルド成果物(*.whl, *.tar.gz

これらに加えて, .rpdignoreファイルで独自の除外パターンを追加できます.
.gitignoreみたいな書き方をしてください.

使用例

試しにrepodのソースコードを1ファイルに出力するとこんな感じになります.

# Repository Content Dump

    This document contains a dump of a repository's contents. The structure is as follows:

    1. Repository Structure (tree format)
    2. File Contents (each file with its path and content)

## Repository Structure

├── .git/
├── .github/
├── .python-version
├── .venv/
├── LICENSE
├── README.md
├── dist/
│   └── .gitignore
├── pyproject.toml
└── src/
    └── repod/
        ├── __init__.py
        ├── __pycache__/
        ├── cli.py
        ├── core.py
        └── py.typed


## File Contents

### LICENSE

MIT License
...
以下各ファイルが続く

まとめ

シンプルなコマンドツールとしてほしかったので満足です.uv tool installすればどこからでも使えて便利.いっぱいトークン使いたい.
※長大なプロジェクトやホームディレクトリとかで使うと処理がやばそうなので注意してください.

Discussion