はじめに
最近、ClaudeやChatGPTなどのLLMにコードの相談をする機会が増えましたよね。
「このバグの原因を調べてほしい」「リファクタリングの方針を考えてほしい」といったときに、関連するファイルをコピペして渡すわけですが、これが意外と面倒なんですよね。複数ファイルにまたがる問題だと、どのファイルを渡せばいいか分からないし、全部渡そうとするとコピペ地獄になる。
そんな課題を解決してくれるのがRepomixです。リポジトリ全体を1つのファイルにまとめてくれるツールで、GitHubのスター数は20,000を超えています。
個人的には、LLMにコードを渡すときの定番ツールになりつつありますね。
Repomixの特徴
リポジトリ全体を1ファイルに
Repomixの基本機能はシンプルです。指定したリポジトリ(またはディレクトリ)を解析して、1つのファイルにまとめてくれます。
出力されるファイルには以下が含まれます。
- ファイルサマリー
- ディレクトリ構造
- 各ファイルの内容
これをそのままLLMに渡せば、プロジェクト全体の構造とコードを理解してもらえるわけです。
AI最適化されたフォーマット
単にファイルを連結するだけじゃなくて、LLMが理解しやすい形式に整形してくれます。デフォルトはXML形式で、ファイル構造が階層的に整理されます。
他にもMarkdownやJSON形式も選べるので、用途に応じて使い分けられます。
トークン数の表示
これが意外と便利なんですが、出力ファイルのトークン数を表示してくれます。
LLMにはコンテキストウィンドウの制限があるので、「このリポジトリを渡したら何トークンになるのか」が分かると、事前に調整できます。ファイル単位でのトークン数も出るので、「どのファイルが容量を食っているか」も把握できますね。
セキュリティ対策
Secretlintを内蔵していて、機密情報(APIキーやパスワードなど)が含まれていないかをチェックしてくれます。うっかりLLMに機密情報を渡してしまうリスクを減らせるのは、地味にありがたいです。
.gitignoreの自動認識
.gitignore、.ignore、.repomixignoreを自動で認識して、除外対象のファイルはパックしません。node_modulesとかbuildディレクトリとか、渡す必要のないファイルは自動的に除外されます。
コード圧縮機能
Tree-sitterを使ったコード圧縮機能もあります。関数のシグネチャやクラス定義など、重要な部分だけを抽出してトークン数を削減できます。
大規模なリポジトリをLLMに渡したいけどトークン制限が厳しい、というときに使える機能ですね。
インストール方法
npxで即実行(おすすめ)
一番簡単なのはnpxで実行する方法です。
npx repomix@latest
これだけで、現在のディレクトリがパックされます。インストール不要で使えるので、初めて試すならこれが楽ですね。
グローバルインストール
継続的に使うなら、グローバルインストールしておくと便利です。
# npm
npm install -g repomix
# yarn
yarn global add repomix
# Homebrew(macOS)
brew install repomix
インストール後はrepomixコマンドで実行できます。
基本的な使い方
カレントディレクトリをパック
最もシンプルな使い方です。
repomix
カレントディレクトリが解析されて、repomix-output.xmlというファイルが生成されます。
特定のディレクトリをパック
repomix path/to/directory
指定したディレクトリをパックします。
リモートリポジトリをパック
repomix --remote yamadashy/repomix
ローカルにクローンしなくても、GitHubのリポジトリを直接パックできます。ちょっと調べたいオープンソースプロジェクトがあるときに便利ですね。
出力形式を変更
# Markdown形式
repomix --style markdown
# JSON形式
repomix --style json
用途に応じてフォーマットを変えられます。
特定のファイルだけを含める
repomix --include "src/**/*.ts"
全部は必要ないけど、特定のディレクトリやファイルタイプだけ渡したい、というときに使います。
コード圧縮を有効化
repomix --compress
トークン数を抑えたいときに使います。コードの詳細は省略されますが、構造は把握できる程度の情報は残ります。
実践的なユースケース
バグ調査をLLMに依頼
「このエラーの原因を調べてほしい」というとき、関連ファイルを手動で選ぶのは面倒です。
repomix --include "src/**/*.ts" -o context.xml
これで生成されたファイルをLLMに渡して、「このコードベースで○○というエラーが発生しています。原因を調べてください」と聞けば、プロジェクト全体を理解した上で回答してくれます。
コードレビューの依頼
repomix --include "src/components/**/*.tsx"
コンポーネントだけをパックして、「このコンポーネント群のコードレビューをしてほしい」と依頼するのに使えます。
アーキテクチャの相談
repomix --compress
圧縮モードでパックすれば、コードの詳細より構造を理解してもらいやすくなります。「このプロジェクトのアーキテクチャについて改善案を出してほしい」といった相談に向いています。
ドキュメント生成
リポジトリ全体を渡して、「このプロジェクトのREADMEを書いてほしい」「APIドキュメントを生成してほしい」といった依頼もできます。コード全体を理解した上でドキュメントを書いてくれるので、精度が上がります。
オープンソースプロジェクトの調査
repomix --remote facebook/react --include "packages/react/**/*.js"
気になるオープンソースプロジェクトの実装を調べたいとき、リモート指定で直接パックして、LLMに「この実装の仕組みを解説してほしい」と聞けます。
設定ファイル
よく使うオプションは設定ファイルに書いておけます。
repomix --init
これでrepomix.config.jsonが生成されます。
{
"output": {
"style": "xml",
"filePath": "repomix-output.xml"
},
"ignore": {
"customPatterns": ["*.test.ts", "*.spec.ts"]
}
}
テストファイルを常に除外したい、出力形式を固定したい、といった設定を書いておけます。
まとめ
Repomixは、リポジトリ全体をAIフレンドリーな単一ファイルにパックするツールです。
おすすめポイント
- npxで即座に使える
- トークン数を事前に確認できる
- セキュリティチェック内蔵
- .gitignoreを自動認識
- リモートリポジトリも直接パック可能
- MITライセンスで無料
向いているケース
- LLMにコードベース全体を理解させたいとき
- バグ調査やコードレビューを依頼したいとき
- アーキテクチャの相談をしたいとき
- オープンソースプロジェクトの実装を調べたいとき
正直なところ、LLMを使ったコーディングをしている人なら、一度は試してみる価値があると思います。「このファイルとこのファイルをコピペして...」という作業から解放されるのは、思った以上に快適です。
30代になると、作業効率の改善に敏感になるんですよね。Repomixは、LLM活用の効率を確実に上げてくれるツールです。
参考リンク
