File Concat
複数のファイルやフォルダを1つのテキストに結合し、クリップボードへコピーする VS Code 拡張機能です。
ChatGPT / Claude などの AI にコードをまとめて渡したいときに便利です。
- 無料機能: エクスプローラーから右クリックで結合(再帰 / 直下のみ)。ずっと無料で使えます。
- Pro 機能(月額・年額サブスクリプション): コピー履歴からの再結合(履歴ビューで複数確認・まとめて再結合)、箇条書き指定(glob・正規表現)での結合、結合対象の編集画面、右クリックからの除外設定の追加。
無料機能
エクスプローラーでファイルまたはフォルダ(複数選択可)を右クリックし、サブメニュー File Concat から実行します。
この拡張機能のすべての機能(結合・Pro 機能・除外設定・ライセンス操作)が、このサブメニューにまとまっています。エディタの右クリックも同様です。
| コマンド |
内容 |
| ファイルを結合してコピー(再帰あり) |
サブフォルダを含めて結合 |
| ファイルを結合してコピー(直下のみ) |
選択フォルダ直下のみ結合 |
出力例:
===== FILE: src/index.ts =====
console.log("hello");
===== FILE: src/utils/helper.ts =====
export const test = () => {};
自動で除外されるもの
.env(設定に関わらず常に除外)
- フォルダ:
node_modules .git .next dist build coverage
- 設定
fileConcat.excludeFolders のフォルダ、fileConcat.excludeExtensions の拡張子
- バイナリファイル、サイズ上限を超えるファイル(設定で変更可)
対応文字コード
- UTF-8(BOM 付きは BOM を除去して結合)
- UTF-16 LE / BE(BOM 付き)
- Shift_JIS / EUC-JP(設定
fileConcat.fallbackEncoding で選択。既定は none)
UTF-8 で読めず、フォールバックも none のファイルは「文字コード不明」としてスキップされます。
スキップ時の通知
スキップされたファイルがある場合、完了通知に「N 件を結合、M 件スキップ」と理由の内訳が表示されます。
「詳細を見る」を押すと、出力パネル File Concat にパスと理由が1行ずつ表示されます。
.env や除外拡張子による除外は件数のみで、明細は出力しません。
サイズに関する設定
fileConcat.maxFileSizeKB(既定 1024): 1ファイルの上限
fileConcat.oversizeBehavior(skip / truncate、既定 skip): 上限超過時にスキップするか、先頭のみ結合するか
fileConcat.maxTotalSizeMB(既定 20): 結合結果の合計がこの値を超える場合、コピー前に確認します
Pro 機能
機密情報チェック(Ollama・Pro)
Pro が有効で fileConcat.secretScanEnabled がオン(既定 true)の場合、クリップボードへのコピーが成功した後、結合結果を Ollama に送り、API キー・アクセストークン・秘密鍵・パスワード・個人情報などが含まれていないか確認します。通常結合、履歴再実行、まとめて再結合、パターン指定、パス指定、対象編集はいずれも共通のコピー処理でチェックされます。
- クリップボードには従来どおりの結合結果をそのままコピーします。検出があっても本文をマスク・削除・置換しません。Ollama の応答を待たずにコピーし、検出時はファイルの相対パス(メモの場合はタイトル)、カテゴリ、確信度を警告します。秘密値や該当行は通知に表示しません。
- 既定の送信先は
http://127.0.0.1:11434(同じ端末の Ollama)で、モデルの既定値は llama3.2 です。Ollama を起動し、モデルを導入してください。例: ollama pull llama3.2。
fileConcat.ollamaUrl と fileConcat.ollamaModel で送信先とモデルを変更できます。リモート URL を指定すると、結合本文に加えてファイル名・相対パス・含めたメモの内容も端末外へ送られ得ます。信頼できる送信先のみを指定してください。
fileConcat.secretScanEnabled を false にすると送信しません。非 Pro の場合も送信しません。Ollama の停止、接続失敗、タイムアウト、不正な応答の場合でもコピーは成功しますが、チェック未完了の警告が表示されます。
- AI による推定のため、誤検出・見逃しがあります。機密情報の漏えい防止を保証する機能ではありません。共有前にはコピー内容を確認してください。
| 設定 |
既定 |
内容 |
fileConcat.secretScanEnabled |
true |
Pro の機密情報チェックを有効化。false で Ollama への送信を停止 |
fileConcat.ollamaUrl |
http://127.0.0.1:11434 |
Ollama サーバーのベース URL。リモート URL では結合本文等が端末外へ送信され得る |
fileConcat.ollamaModel |
llama3.2 |
Ollama に導入済みのモデル名 |
コピー履歴から最新状態で再結合
コマンド: コピー履歴から再結合(Pro)
- 履歴に保存するのは「どのファイル/フォルダを対象にしたか」だけで、結合結果の本文は保存しません。
- 再実行時は現在のディスク状態から再収集・再読み込みするため、常に最新の内容で結合されます。
- ピン留め、個別削除、全削除(履歴をすべて削除)ができます。件数の上限は
fileConcat.historyLimit(既定 30、最大 200)で、ピン留め分は上限に含まれません。
- 履歴はワークスペース単位で保存されます。
- 履歴の記録は Pro 契約中のみ行われます(未契約時は記録されません)。
箇条書き指定で結合(glob・正規表現対応)
コマンド: 箇条書き指定で結合してコピー(Pro)
入力パネルに1行1項目で書きます。プレビューで対象件数と先頭 50 件のパスを確認してから実行できます。
- src/utils # フォルダ(「再帰」オプションに従う)
- src/**/*.ts # glob
- /^src\/.*\.test\.ts$/i # 相対パス全体への正規表現
- !/\.snap$/ # ! で除外(後勝ち)
- @dir:src /Controller\.ts$/ # フォルダを限定した正規表現
パターンを指定しても、.env・除外フォルダ・除外拡張子・サイズ・バイナリの各ルールが常に優先されます。
詳しい書式は docs/pattern-syntax.md を参照してください。
関連設定: fileConcat.patternScope(マルチルート時の評価範囲)、fileConcat.allowOutsideWorkspace(ワークスペース外の絶対パス指定を許可。既定 false)
履歴ビュー(複数の履歴を確認・まとめて再結合)
エクスプローラーの File Concat 履歴 ビューに、コピー履歴が一覧表示されます(サブメニューの「コピー履歴ビューを開く(Pro)」でも開けます)。
- 各履歴を展開すると、入力(パターン履歴は元のパターン行)と、前回結合したファイルの一覧(先頭 200 件)を確認できます。
- 履歴にチェックを入れて、タイトルバーの「チェックした履歴をまとめて再結合」を押すと、複数の履歴を1回で結合します。重複するファイルは1回だけ含まれます。
- ピン留め・削除・「対象を編集して再結合」は各履歴のボタン/右クリックから行えます。
- 端末内に保存されるもの: 履歴には、対象の入力と前回結合したファイルのパス一覧(最大 500 件)が VS Code の workspaceState(この端末内)に保存されます。結合結果の本文は保存せず、これらを外部へ送信することもありません。
結合対象の編集画面
結合コピーの完了通知の 「対象を編集(Pro)」 ボタン(または履歴ビューの「対象を編集して再結合」)で、結合したファイルの一覧がチェックボックス付きで開きます。
- チェックを外す/足すなどして、「結合してコピー」 で再度結合できます(フォルダ単位のチェック、絞り込み、すべて選択/解除に対応)。
- サイズ超過・バイナリなど前回スキップされたファイルは、理由付きで選択不可として表示されます。
- 実行後も画面は開いたままで、通知から何度でも編集し直せます。チェックが 200 件以下なら履歴にも記録されます。
除外設定を右クリックから追加
ファイルまたはフォルダを右クリックし、File Concat → 選択を結合対象から除外(Pro) を選びます。
- フォルダは
fileConcat.excludeFolders に、ファイルは fileConcat.excludeFiles(このファイルのみ)または fileConcat.excludeExtensions(拡張子)に追記されます。
- ワークスペース直下のフォルダは
./フォルダ名 の形式で書き込まれます。名前だけだと、どの階層にある同名フォルダも除外してしまうためです。
- 完了通知の「元に戻す」で取り消せます。「除外設定を管理(Pro)」で追加した除外を削除できます。
- 設定はワークスペース設定(
.vscode/settings.json)に書き込まれます(ワークスペースを開いていない場合のみユーザー設定)。
料金・プラン
以下の価格は暫定値です。確定後はこのセクションのみ書き換えます。
|
無料 |
Pro |
| 右クリックで結合(再帰 / 直下のみ) |
○ |
○ |
| 文字コード対応・スキップ通知 |
○ |
○ |
| コピー履歴から再結合 |
- |
○ |
| 箇条書き指定(glob・正規表現)で結合 |
- |
○ |
| 履歴ビュー(複数確認・まとめて再結合) |
- |
○ |
| 結合対象の編集画面(チェックを編集して再結合) |
- |
○ |
| パスを指定して結合(カンマ区切り入力) |
- |
✔ |
| パス指定の前回以外のみ結合(差分コピー) |
- |
✔ |
| メモ帳を開くショートカット・リロード後の自動復元 |
- |
✔ |
| ワークスペース別メモ帳と結合時の自動付加 |
- |
✔ |
| 複数メモとメモごとの自動付加 |
- |
✔ |
| 通知への文字数・サイズ・トークン数の表示 |
- |
✔ |
| SSH 接続時のメモのリモート保存 |
- |
✔ |
| 機密情報チェック(Ollama) |
- |
✔ |
| 右クリックから除外設定を追加・管理 |
- |
○ |
| 価格 |
無料 |
月額 500 円 / 年額 5,000 円(税込・暫定) |
- 無料トライアル: 7 日間(初回契約時)
- 1契約あたり最大 3 台のデバイスで利用できます。4 台目を有効化すると、最後に使われたのが最も古いデバイスが自動で解除されます。
- 決済は Stripe のホスト型ページで行います。クレジットカード情報が当拡張機能や運営者のサーバーに保存されることはありません。
- VS Code Marketplace 自体に課金機能はありません。Pro のお支払いは外部(Stripe)で行います。
サインイン・管理・解約
コマンドパレット(Ctrl+Shift+P / Cmd+Shift+P)から実行します。
| コマンド |
内容 |
| File Concat Pro にアップグレード / サインイン |
ブラウザで申し込みまたは認証を行い、完了すると自動で有効化 |
| サブスクリプションを管理 |
Stripe のカスタマーポータルを開く(解約・支払い方法の変更) |
| ライセンス状態を表示 |
プラン・有効期限・デバイス ID の先頭 8 文字を表示 |
| このデバイスのライセンスを解除 |
このデバイスの利用を解除(再度サインインすれば利用可能) |
すでにご契約の方が別のデバイスで使う場合は、サインイン時にご契約時のメールアドレスを入力すると、6桁の認証コードが届きます。
オフライン時の挙動
- ライセンスの有効期間は発行から 7 日で、期限の 2 日前を切ると自動更新します(以降 12 時間ごとに確認)。
- 通信障害で更新できない場合でも、期限から 3 日間は Pro を維持します。
- サーバーが明示的に無効(解約・デバイス解除など)と返した場合は、すぐに無効化されます。
- 無料機能はライセンス状態に関わらず、常に利用できます。
プライバシー
- サーバーに送信・保存されるのは、メールアドレス(Stripe 経由)、Stripe 顧客 ID、デバイス ID のハッシュ、デバイスラベル(OS 名程度)、ライセンス状態のみです。
- ライセンスサーバーへファイル内容・ファイル名・パスは送信しません。テレメトリも収集しません。ただし、Pro の Ollama 機密情報チェックが有効な場合、結合結果(メモ・ファイル名・相対パスを含む)は設定された Ollama URL へ直接送信されます。
- 無料機能のみを使う場合、外部との通信は発生しません。
詳細は PRIVACY.md、利用規約は TERMS.md、特定商取引法に基づく表記は docs/legal/tokushoho.md を参照してください。
設定一覧
| 設定 |
既定 |
内容 |
fileConcat.excludeExtensions |
.log .lock .tmp |
除外する拡張子 |
fileConcat.excludeFolders |
[] |
除外するフォルダ(名前 / ./相対パス / 絶対パス) |
fileConcat.excludeFiles |
[] |
除外するファイル(相対 / 絶対パス) |
fileConcat.pathInput.recursive |
true |
パス指定で入力したフォルダをサブフォルダまで展開する |
fileConcat.contextWindowTokens |
200000 |
通知のトークン割合の分母(推定値) |
fileConcat.maxFileSizeKB |
1024 |
1ファイルの上限(KB) |
fileConcat.oversizeBehavior |
skip |
上限超過時: skip / truncate |
fileConcat.maxTotalSizeMB |
20 |
合計サイズの確認しきい値(MB) |
fileConcat.fallbackEncoding |
none |
none / shift_jis / euc-jp |
fileConcat.historyLimit |
30 |
履歴の保持件数(Pro) |
fileConcat.patternScope |
all |
マルチルート時のパターン評価範囲(Pro) |
fileConcat.allowOutsideWorkspace |
false |
パターンでの絶対パス指定を許可(Pro) |
fileConcat.authServerUrl |
(既定のサーバー) |
認証サーバー URL(通常は変更不要) |
fileConcat.secretScanEnabled |
true |
Pro の機密情報チェック。false で停止 |
fileConcat.ollamaUrl |
http://127.0.0.1:11434 |
Ollama のベース URL(リモート URL では本文等が端末外へ送信され得る) |
fileConcat.ollamaModel |
llama3.2 |
Ollama に導入済みのモデル名 |
インストール
- Marketplace: 拡張機能ビューで「File Concat」を検索してインストール
- VSIX: 拡張機能ビューの
... メニューから「VSIX からインストール」
開発
npm install
npm run compile
npm run lint
npm test
パッケージ化: npm install -g @vscode/vsce && vsce package
サポート
SUPPORT.md を参照してください。
ライセンス
LICENSE を参照してください(方針は検討中: docs/store/license-decision.md)。
パスを指定して結合(Pro)
右クリックメニュー「File Concat」または コマンドパレットの「パスを指定して結合してコピー(Pro)」を実行し、入力ボックスにパスをカンマ区切りで入力して Enter を押すだけで、結合してクリップボードにコピーします。
src/utils, README.md, docs
- 区切りは
, 、 ,。パスはワークスペースからの相対パスで指定します(マルチルートではフォルダ名から始めても構いません)。
- カンマを含むパスは
"dir,name/file.ts" のようにダブルクォートで囲みます。
- glob や正規表現は解釈しません。使いたい場合は「箇条書き指定で結合」を使ってください。
.env・除外設定・サイズ・バイナリの判定は通常の結合と同じです。結果は履歴にも記録されます。
前回以外のみ結合(差分コピー)
コマンド「パスを指定して前回以外のみ結合してコピー(Pro)」は、同じ入力形式で、前回のパス指定コピーに含まれたファイルを除き、新しく追加されたファイルだけを結合します。
- 比較はファイル単位です(フォルダ指定は展開後のファイルで比較します)。
- 差分モードで実行した場合、次回の比較基準には「前回分として除外したファイル + 今回結合したファイル」が記録されます。
- 記録するのはファイルの識別キー(ワークスペースと相対パス)のみで、結合本文は保存しません(端末内の workspaceState、最大 5,000 件)。
- 前回の記録がない場合は、通知のうえ通常のパス指定として実行します。差分が 0 件の場合は、コピーも記録の更新も行いません。
- 差分モードの実行は履歴に記録しません(履歴からの再実行が全件結合になり、実際のコピー内容と食い違うため)。
- 除外ルール・メモ付加・機密情報チェック・統計表示は通常のパス指定と同じです。
メモ帳(Pro)
「メモ帳を開く(Pro)」で、ワークスペースごとのメモを編集できます。「結合してコピーするときに、このメモを自動で含める」をオンにすると、すべての結合コピー(通常・履歴からの再結合・パターン指定・パス指定・対象の編集)の先頭に、次の形式でメモが付きます。
===== MEMO: <タイトル> =====
(メモ本文)
===== FILE: ... =====
- メモは端末内のワークスペース単位(
workspaceState)に保存されます。プロジェクトのフォルダにはファイルを作らず、メモ保存機能自体からは送信しません。ただし、メモを結合結果に含めて Pro の機密情報チェックが有効な場合、その本文は Ollama 送信対象になります。
- メモが空のとき、および Pro が無効のときは付加されません。
- コマンド「結合時のメモ付加を切り替え(Pro)」でも、オン/オフを切り替えられます。
- ショートカット
Ctrl+Alt+M(mac は Cmd+Alt+M)でメモ帳を開けます。
- メモ帳を開いたままウィンドウをリロードすると、自動でメモ帳が開き直されます(手動で閉じた場合は復元されません。Pro が有効でない場合は何も表示されません)。
1.5.0 の追加機能
複数メモ(Pro)
- メモ帳で複数のメモ(最大 50 件)を作成・名前変更・削除できます。メモごとに「結合コピー時に含める」をチェックで選べます。
- チェックしたメモ(本文が空のものを除く)が、一覧順にクリップボードの先頭へ付加されます。
===== MEMO: <タイトル> =====
<メモ本文>
===== FILE: <最初のファイル> =====
...
- 旧版の1つのメモは、「メモ」という1件のメモとして自動で引き継がれます。
- コマンド「結合時に含めるメモを選択(Pro)」で、含めるメモをまとめて切り替えられます。
メモの保存先
- ローカル: 端末内のワークスペース単位(
workspaceState)に保存します。
- SSH 接続時: リモートホストの拡張機能ストレージ(
globalStorage)に平文で保存します。別の端末・別の接続名から同じリモートフォルダを開いても、同じメモを参照できます。別端末で編集した内容は、メモ帳パネルを前面に戻すと反映されます。
- どちらの場合も、プロジェクトのフォルダにはファイルを作らず、外部へも送信しません。
- メモは平文で保存されるため、パスワード・APIキーなどの機密情報は書かないことを推奨します。
結合対象の編集画面(Pro)
- ファイルを右クリックして「このファイルを対象から削除」できます。編集画面の候補から外すだけで、ディスク上のファイルは削除されません。「削除を元に戻す」で復帰できます。
統計表示(Pro)
- 結合コピーの通知に、総文字数・バイト数(KB)・推定トークン数・上限に対する割合を表示します(メモ付加後の最終文字列が対象)。
- トークン数は推定値です(外部へ問い合わせないため、実際の値とは異なります)。割合の分母は設定
fileConcat.contextWindowTokens(既定 200000)で変更できます。