😺

Web版の生成AIに複数ファイルをファイル名付きで渡す小技

に公開

生成AIにコードレビューを依頼したり、複数のソースコードをまとめて処理させたい場面が増えています。IDE組み込みの生成AI環境を使っている人も多いと思いますが、契約の都合でWeb版しか使えない人がいるかもしれません。

Web版の生成AIにファイルを渡す場合、単にファイル内容を連結して渡すだけでなく、どのファイルの内容なのかをAIに明示することで、より的確なフィードバックや処理結果が期待できます。

実は、OSの標準コマンドを少し工夫するだけで、複数のファイルの内容を「ファイル名ヘッダー付き」でクリップボードにまとめてコピーできます。これにより、手作業でのファイル名追記の手間を省きつつ、AIの回答精度向上を図ることが可能です。

Macの場合:tail + pbcopy

tail コマンドは、複数のファイルを引数に指定すると、各ファイルの内容の前に ==> ファイル名 <== という形式でファイル名ヘッダーを自動的に挿入してくれます。これを利用します。

tail -v -n +1 -- src/*.js | pbcopy
  • コマンド解説:
    • tail -v -n +1 -- src/*.js: src ディレクトリ内の全ての .js ファイルについて、1行目から最後まで(つまり全内容)を出力します。この際、各ファイルの内容の前にファイル名ヘッダーが付与されます。
    • pbcopy: 標準入力をクリップボードにコピーするMac専用のコマンドです。

実行後、クリップボードには以下のような形式でコピーされます(ファイルが a.jsb.js の場合)。

==> src/a.js <==
// a.js の内容
...

==> src/b.js <==
// b.js の内容
...

他環境ではクリップボードへのコピーコマンドを適切に変更してください。

シェル関数を実装する

上のコマンドを毎回打つのはダルいので、同名のシェル関数を作ってみました。

pbcopy () {
	if [ -z "$1" ]
	then
		command pbcopy
	else
		tail -v -n +1 -- "$@" | command pbcopy
	fi
}

git diff | pbcopyのように無引数で起動した場合は従来通り使えます。

pbcopy *.yamlのようにファイルを引数に取った場合、指定された全ファイルの中身をファイル名つきでクリップボードにコピーします。

Discussion