AIエージェントに巨大なレポジトリを操作させる場合、作業前後の差分を管理することは重要です。エージェントがどのファイルを変更したのか、どの時点に戻せるのかを把握できなければ、安全に作業を進めることが難しくなります。
通常、このような差分管理にはGitを使うことが多いです。しかし、対象のレポジトリが非常に大きい場合、Gitの操作が極端に遅くなることがあります。特に、ファイル数が多いプロジェクトや、大量の変更が発生する作業では、ステータス確認や差分確認だけでも時間がかかります。
Gitが重いときの考え方
巨大なレポジトリでAIエージェントを動かす目的は、必ずしも細かいコミット履歴を作ることではありません。多くの場合、必要なのは「作業前の状態を保存しておき、作業後にどこが変わったかを確認できること」です。
この目的であれば、Gitだけに頼る必要はありません。Gitの代わりに、ファイルシステムのCopy-on-Write機能を使って作業用コピーを作る方法があります。
Copy-on-Writeを使ったコピー
XFSなどのファイルシステムでは、Copy-on-Writeを利用した高速なコピーができます。これは、最初からすべてのファイル内容を実際に複製するのではなく、必要になるまで元のデータを共有する仕組みです。
そのため、巨大なレポジトリでも短時間でコピーを作成できます。AIエージェントにはそのコピー側を操作させ、元のディレクトリは作業前の基準点として残しておきます。
CoW対応の代表的なファイルシステム
Copy-on-Writeを活用する場合、利用するファイルシステムがCoWに対応している必要があります。代表的なものには、次のようなファイルシステムがあります。
XFS
Linux環境でよく使われるファイルシステムです。reflinkに対応したXFSであれば、cp --reflink を使って高速なCoWコピーを作成できます。
巨大なレポジトリを扱う用途では、XFSは現実的な選択肢です。通常のLinuxサーバー環境でも採用しやすく、AIエージェント用の作業コピーを素早く用意できます。
Btrfs
Btrfsは、Copy-on-Writeを前提に設計されたLinux向けのファイルシステムです。スナップショットやサブボリュームなどの機能もあり、作業前の状態を保存しておく用途に向いています。
AIエージェントに作業用ディレクトリを渡す前にスナップショットを作っておけば、作業後に元の状態との差分を確認しやすくなります。
APFS
APFSはmacOSで使われているファイルシステムです。Copy-on-Writeに対応しており、macOS上で大きなディレクトリを扱う場合に有効です。
ローカルのMacでAIエージェントにコード編集をさせる場合、APFSの機能を利用することで、作業用コピーを効率よく作れます。
ZFS
ZFSもCopy-on-Writeを備えたファイルシステムです。スナップショットやクローンの機能が強力で、作業前の状態を保持しながら安全に変更を試す用途に向いています。
ただし、導入や運用は環境によってやや重くなることがあります。すでにZFSを使っている環境であれば、有力な選択肢になります。
使い方の流れ
基本的な流れは単純です。
- 作業前のレポジトリを残しておく
- Copy-on-Writeで作業用コピーを作る
- AIエージェントには作業用コピーを操作させる
- 作業後に元のディレクトリと作業用コピーを比較する
- 必要な変更だけを取り込む
LinuxでXFSやBtrfsを使っている場合は、たとえば次のように cp --reflink を使って作業用コピーを作れます。
cp -a --reflink=always original-repo work-repo
このコマンドにより、実データをすべてコピーするのではなく、CoWを利用した高速なコピーを作成できます。AIエージェントには work-repo を操作させ、original-repo は比較用として残しておきます。
どんな場面に向いているか
この方法は、巨大なレポジトリをAIエージェントに編集させる場合に向いています。たとえば、広範囲のリファクタリング、機械的な修正、大量ファイルにまたがる変更などです。
一方で、通常の開発履歴を管理する目的では、引き続きGitを使うべきです。Copy-on-Writeによるコピーは、あくまでAIエージェントの作業領域を高速に用意し、安全に差分を確認するための手段です。
まとめ
巨大なレポジトリでは、Gitによる差分管理が遅くなり、AIエージェントの作業効率を下げることがあります。そのような場合は、XFS、Btrfs、APFS、ZFSなどのCopy-on-Write対応ファイルシステムを使って作業用コピーを作ると便利です。
Gitで毎回重い操作をするのではなく、作業前の状態を高速に複製し、AIエージェントにはコピー側を編集させる。これにより、大規模なコードベースでも、より軽量に差分管理を行えます。