「reprom」: 複数ファイルをまとめてAIに渡すための小さなCLIツール


## はじめに

最近、ChatGPTなどの対話型AIにソースコードをレビューしてもらったり、質問を投げたりする場面が増えています。  
しかし、複数ファイルにまたがるコードをまとめてAIに共有するには、なかなか手間がかかるものです。

「**reprom**」は、その手間を少しでも減らす目的で作った小さなCLIツールです。  
プロジェクトのディレクトリツリーとファイル内容を一括でMarkdownに出力してくれるので、AIへの共有がしやすくなります。  
名前の由来は、「repository」と「prompt」を掛け合わせたものです。

[GitHub: KeisukeNagakawa/reprom](https://github.com/KeisukeNagakawa/reprom)

---

## どんなときに役立つか

- **AIにコードレビューを依頼したい**けれど、ファイルが分散していてコピー&ペーストが面倒
- **ディレクトリ構成と主要なソースをまとめて見せたい**とき
- 人に見せる際にも、**構成を整理して一つの資料**にできる

---

## インストール

プロジェクト配下でインストールするケースが多いと思います。グローバルでも動きますが、バージョン管理の観点からローカルに入れる方が個人的にはおすすめです。

```bash
npm install --save-dev reprom
```

あるいは

```bash
yarn add --dev reprom
```

---

## 使い方

### 1. 設定ファイル（YAML）の作成

ルートディレクトリなどに `reprom.config.yaml` を用意します。  
最低限、出力するファイルの範囲や出力先を設定します。

```yaml
configs:
  - name: "sample"
    preText: |
      これはサンプル設定で出力したMarkdownです。
    postText: |
      以上で出力は終わりです。もし何か質問があればお知らせください。
    targets:
      include:
        - "src"
        - "bin"
      exclude:
        - "**/node_modules"
      filePatterns:
        - "**/*.ts"
        - "**/*.js"
    tree:
      maxDepth: 5
      directoriesOnly: false
    output: "file"
```

#### 設定内容の例
- **`configs`**: 設定を複数書いておける
- **`name`**: CLI実行時に使う識別子
- **`preText` / `postText`**: 出力の頭と末尾に挿入する任意のテキスト  
- **`targets`**:
  - `include`: 取り込みたいディレクトリ・パス
  - `exclude`: 除外したいパス
  - `filePatterns`: 対象とするファイルのパターン（例： `**/*.ts` など）
- **`tree`**:
  - `maxDepth`: ディレクトリツリーの表示を何階層までにするか
  - `directoriesOnly`: trueにするとディレクトリだけ表示する（ファイルを非表示）
- **`output`**: `"file"`または`"clipboard"`  
  - `"file"`: Markdownファイルとして出力  
  - `"clipboard"`: クリップボードにコピーして終わる（ファイル生成なし）

### 2. CLI実行

設定ファイルを読み込み、適切な設定を呼び出して実行します。

```bash
npx reprom --config=reprom.config.yaml --name=sample
```

コマンドのオプション:
- `--config`: YAMLファイルのパス。指定しなければ `reprom.config.yaml` を探しにいく
- `--name`: 上で定義した設定名 (例: `"sample"`)

### 3. 出力を確認

- `output: "file"`の場合、たとえば `reprom-sample.md` といったファイルが生成されます。
- `output: "clipboard"`の場合はファイルが作られず、Markdownがそのままクリップボードにコピーされます。

---

## 動作イメージ

### ファイル出力例

```bash
npx reprom --config=reprom.config.yaml --name=sample
```

コンソールには合計文字数と出力先が表示されます。

```
Total characters: 8541
Exported to reprom-sample.md for configuration "sample"
```

生成された `reprom-sample.md` の中身は以下のようになります:

```markdown
これはサンプル設定で出力したMarkdownです。

# Directory Structure

src
├── index.ts
└── utils
    └── helper.ts
bin
└── reprom.js

# File Contents

## src/index.ts

(実際のコード)

## src/utils/helper.ts

(実際のコード)

(該当するファイルが続く…)

以上で出力は終わりです。もし何か質問があればお知らせください。
```

### クリップボード出力例
```bash
npx reprom --config=reprom.config.yaml --name=review
```

```
Total characters: 12004
Markdown has been copied to your clipboard for configuration "review".
```

あとはペーストすると、ディレクトリ構成とファイル内容のMarkdownがそのまま貼り付けられます。  
特にChatGPTのようなAIにコードを見せるときに便利です。

---

## もう少し込み入った使い方

- 複数の`configs`を同一YAML内に書いておいて、用途（コードレビュー用、ドキュメント用など）で使い分け
    - これはかなり便利。monorepoでコード量が多い場合に、レビューしたい観点だけで絞り込むことができます。
- `filePatterns`を拡張して `**/*.json` や `**/*.yaml` なども取り込み、設定ファイルまでまとめて投げる

---

## まとめ

**reprom**は、**repositoryのコードをprompt用のMarkdownとしてまとめる**、小さなCLIツールです。  
複数ファイルをAIに共有する際の手間をいくらか省くことが目的で、基本的には簡素な作りになっています。

もし興味があれば下記リポジトリを覗いてみてください。

- [GitHub: KeisukeNagakawa/reprom](https://github.com/KeisukeNagakawa/reprom)

必要に応じて、ご自分のプロジェクトに合わせて設定をカスタマイズしてみてください。  
何か不具合や要望があればIssue等で教えていただけると助かります。