LLM向けに複数の文字エンコーディングで書かれたファイル群を1ファイルにまとめるツール(treecat)を作りました

LLMにソースコードをまとめて1ファイルで渡すようなツールやスクリプトは多々ありますが、拡張子毎にエンコーディングが変わるような場合にうまくハンドリングしてくれそうなのが見つけられなかったので作りました。

エンコーディングの指定は拡張子:エンコーディングといった形で行います。デフォルトはUTF-8です。

treecat . --encoding-map "ps1:shift_jis,bat:shift_jis"

このほか、以下のような機能を備えています。

  • ディレクトリツリーの可視化とファイル内容の集約
    ツリー構造とファイル内容を組み合わせた単一出力を生成します
  • 自動 .gitignore パターン適用
    デフォルトでプロジェクトの .gitignore ルールを尊重します
  • 柔軟な glob パターンフィルタリング
    --include / --exclude によるファイルの包含・除外指定が可能です
  • UTF-8 BOM 削除と改行正規化
    一貫した出力を保証します (CRLF → LF)
  • 空ディレクトリの除外
    フィルタリング後に空になったディレクトリは自動的に除外します

詳しい使い方については、READMEをご参照ください。
各OSでシングルバイナリで動くので簡単に試せます。

おわりに

最近は、コーディングエージェントのようにローカルファイルをそのまま読み込んでくれる仕組みも増え、「1ファイルにまとめてLLMに渡す」必要性は以前より減ってきていると思います。

一方で、利用できるツールに制限があり、Web上のUIからファイルをアップロードしなければならない場面もまだあるのではないでしょうか。
特にWindows上で動作するアプリケーションでは、Shift_JISのファイルに遭遇することも稀にあるため、そのような場合にこのツールが役立つと考えています。