
チャットのLLMにリポジトリ全体を読ませたいとき、ファイルを1つずつ貼り付けるのは現実的ではありません。かといって.envや秘密鍵が紛れ込んだフォルダをまるごと渡すのも怖い、コード量が多いとトークン数がすぐ上限に当たる、という悩みが同時に出てきます。この隙間を埋めるツールとして名前が挙がるのが、GitHub上でyamadashy氏が公開しているオープンソースCLI「Repomix」です(リポジトリ: https://github.com/yamadashy/repomix )。MITライセンスで、npm経由で配布されています(パッケージ: https://www.npmjs.com/package/repomix )。
この記事では公式リポジトリのREADMEとCLIのヘルプを一次情報としつつ、実際に `npx repomix@latest` を手元の環境で動かし、ローカルディレクトリのパック、コード圧縮、秘密情報チェック、Claude Agent Skills形式での出力、MCPサーバー化、リモートリポジトリの直接取得までを試した結果をまとめます。数値やコマンド出力は、この記事の検証時点(2026年9月、Repomix v1.18.0)で実際に手元に出たものです。
- この記事でわかること:Repomixが何をするツールで、どんなときに使うと便利か。
- `--compress` によるトークン削減が実際どれくらい効くか(実測値)。
- 秘密情報の自動検出(Secretlint)がどこまで頼れて、どこが頼れないか。
- Claude Agent Skills形式の出力とMCPサーバー機能の実際の挙動。
Repomixとは
公式リポジトリの説明によれば、Repomixは「リポジトリ全体を1つのAIフレンドリーなファイルにパックする」ツールです。ChatGPTやClaude、Gemini、DeepSeekなど、コードベースを直接読み込む機能を持たないチャットUIに、プロジェクトのソースをまとめて渡すために作られています。実行方法はシンプルで、プロジェクトのインストールなしに `npx repomix@latest` を打つだけで最新版が動きます。グローバルインストール(`npm install -g repomix`)やHomebrew(`brew install repomix`)、Dockerイメージ(`ghcr.io/yamadashy/repomix`)も用意されています。
出力フォーマットはXML・Markdown・JSON・プレーンテキストの4種類から選べ、`--style` オプション未指定時のデフォルトはXMLです(この記事の検証では読みやすさのため主にMarkdown形式で試しています)。`.gitignore` は自動的に尊重され、`--include` / `--ignore` で対象ファイルを追加・除外できます。
実際に動かす:ローカルディレクトリをパックする
手始めに、このリポジトリの `scripts/blog` ディレクトリを対象に、素の状態でパックしてみました。
- コマンド: `npx repomix@latest scripts/blog -o packed.md --style markdown`
- 結果: 対象5ファイル、合計6,913トークン(18,914文字)
- トークン数の内訳(上位): migrate-fallback-to-microcms.mjs 2,609、daily-article.prompt.md 2,053、generate-hero-image.mjs 981、list-known-slugs.mjs 609、ts-resolve.mjs 215
生成されたファイルの先頭には「これはRepomixによって結合された、リポジトリ全体を表すファイルです」という説明、続いて出力フォーマットの解説、ディレクトリ構造、そして各ファイルの中身が `## File: path/to/file` という見出しごとに並びます。実行後には対象ファイル数・合計トークン数・トークン数上位ファイルの一覧・セキュリティチェックの結果がターミナルにサマリー表示され、パックした内容を貼り付ける前にひと目で規模を把握できるようになっています。
`--compress` で圧縮する:実測でトークン49%減
同じディレクトリを、今度は `--compress` オプションを付けて実行しました。READMEの説明では、Tree-sitterによる構文解析でクラスや関数、インターフェースの「シグネチャ」だけを抜き出し、実装の中身を削るとされています。
実際の結果は、合計6,913トークンから3,524トークンへと約49%の削減でした(同じ5ファイル、8,239文字)。関数の中身をLLMに読ませる必要がなく、「どんな関数がどこにあるか」という見取り図だけ渡したい場合に有効な削減幅だと確認できました。ただし当然ながら実装の詳細は失われるため、バグ調査やコードレビューのように中身そのものを読ませたい用途には不向きです。用途に応じて圧縮の有無を切り替えるのが実用的でしょう。
秘密情報チェック:Secretlintは万能ではない
Repomixはパック対象のファイルをSecretlintで検査し、機密情報が疑われるファイルを出力から自動的に除外する機能を持っています。これを2パターンで試しました。
- GitHub Personal Access Tokenの形式(`ghp_` で始まる40文字のトークン)を含むファイル → 「1 suspicious file(s) detected and excluded」と表示され、そのファイルは出力から除外されました。
- AWSのドキュメントで広く使われているサンプルアクセスキー(`AKIAIOSFODNN7EXAMPLE`)を含むファイル → 「No suspicious files detected」となり、検出されませんでした。
後者はAWS公式ドキュメント自体が例として使っている、実在しないダミー値です。Secretlintのルールセットが意図的にこの値を除外している可能性が高く、Repomix側の不具合というより検出精度の限界と見るべきでしょう。とはいえ実務上の教訓ははっきりしていて、「セキュリティチェックが通った=機密情報が絶対に含まれていない」ではないということです。パック結果を外部のAIサービスに貼り付ける前に、少なくとも `.env` や鍵ファイルの類いが `--ignore` で確実に除外されているか、自分の目でも確認したほうが安全です。
Claude Agent Skills形式で出力する(実験的機能)
Repomixには `--skill-generate` という、パック結果をClaude Agent Skills形式のディレクトリとして出力する機能があります。CLIのヘルプ上では「Skill Generation (Experimental)」と明記されており、まだ実験的な位置づけです。
実際に `npx repomix@latest scripts/blog --skill-generate blog-scripts --skill-output ./skill-out -f` を実行すると、`skill-out/SKILL.md` と `skill-out/references/summary.md`・`project-structure.md`・`files.md` の4ファイルが生成されました。`SKILL.md` にはYAMLフロントマター(`name` と `description`)に続けて、「まずsummary.mdを読む」「project-structure.mdでファイルの場所を探す」「files.mdを `## File:` でgrepして中身を読む」という、Claudeがこのスキルをどう使えばよいかの手順書がテンプレートとして書き込まれていました。1回パックして終わりではなく、再利用可能な参照資料としてリポジトリの構造をAIエージェントに渡す使い方を想定した機能だとわかります。
MCPサーバーとして動かす
`repomix --mcp` を付けて起動すると、Repomix自体がMCP(Model Context Protocol)サーバーとして動作します。READMEによれば、提供されるツールは `pack_codebase`(ローカルディレクトリのパック)、`pack_remote_repository`(リモートリポジトリのパック)、`grep_repomix_output`(パック結果内の検索)、`read_repomix_output`(パック結果の読み取り)の4つです。
Claude Desktopなど、`mcpServers` 形式の設定ファイルを使うクライアントでは、次のようにコマンドを登録します。
```json { "mcpServers": { "repomix": { "command": "npx", "args": ["-y", "repomix", "--mcp"] } } } ```
Docker版を使う場合は `command` を `docker`、`args` を `["run", "-i", "--rm", "ghcr.io/yamadashy/repomix", "--mcp"]` に置き換えるだけで同じ構成になります。この形にしておけば、AIアシスタント側から「このリポジトリをパックして」「パック結果の中からこの関数を探して」といった指示をそのままMCPツール呼び出しに変換できる、という設計です。
リモートリポジトリを直接パックする
ローカルにcloneしていないGitHubリポジトリも、`--remote owner/repo` で直接パックできます。実際に `npx repomix@latest --remote yamadashy/repomix -o remote-packed.md --include "README.md"` を実行すると、READMEの説明どおりまずアーカイブのダウンロードを試み、それが失敗した場合は `git clone` にフォールバックする挙動が確認できました(今回はアーカイブ経由で成功し、README.mdの20,600トークンをパックできました)。存在しないリポジトリ名を指定した際は、アーカイブ取得に失敗したのちclone側でも明確なエラーメッセージを出して終了し、それらしい空の出力を返すような誤魔化しはありませんでした。
まとめ
Repomixは「リポジトリをAIに読ませる」という一点に特化したツールで、実際に動かした範囲では宣伝どおりの挙動をしていました。特に `--compress` によるトークン削減は実測でも約半分という効果が確認でき、コードレビューではなく設計の見取り図をAIに渡したいときには有効です。一方で秘密情報チェックは完全ではないため、「Secretlintが何も言わなかったから安全」と過信せず、外部サービスに貼り付ける前の目視確認は省略しないほうがよいでしょう。
Claude Agent Skills形式の出力とMCPサーバー機能は、単発のコピー&ペーストを超えて、AIエージェントがリポジトリ構造を継続的に参照する仕組みとして設計されている点が特徴です。Skills生成はCLIのヘルプ上も実験的機能として扱われているため、本番のワークフローに組み込む前に生成結果を一度確認しておくことをおすすめします。
参考リンク
- Repomix 公式リポジトリ(README・インストール方法・CLIオプション)
- https://github.com/yamadashy/repomix
- npm パッケージページ
- https://www.npmjs.com/package/repomix
