AIによるプログラミングが破壊的イノベーションになるにはgitをなんとかしないといかんのでは

最近、ClineというAIプログラミングエージェントを触っていて思ったんだけど、AIによるプログラム開発時代にはgitが結構ボトルネックになってるんじゃないかと感じた。

zenn.dev

gitの制約とAIの並列処理のズレ

gitは1つのディレクトリでは1つのブランチしか開けない。 これは人間の開発者が順番にブランチを切り替えながら作業する分にはそれほど問題にはならない。 まぁ自分もあるタスクをやっているときに、今のタスクとは関係ないが気になることを見つけてしまって、ついでに治したくなることがある。 まぁダルいけど一旦今のタスクの内容をStashしてブランチを切り替えて、違うブランチで直す。終わったら元のブランチに戻ってStashから取り出す。みたいな感じで、せいぜい2並列くらいなのでなんとかなる。

でも、ClineのようなAIエージェントは、数十・数百のタスクを並行して開発ができるのに、gitの仕様として出来なさそう。

例えば、Clineに「Aのバグ修正」「Bの新機能追加」「Cのリファクタリング」を同時にやらせたいと思っても、ブランチの切り替えが必要になる。AIが並列にコードを書いても、gitがうまく扱えない。 結果として、せっかくのAIのパワーが最大限に活かせない。

ワークアラウンドとして git worktree を使う手もあるが、これは人間が手動で設定する前提になっているし、Clineのようなエージェントが自律的に活用するには少しハードルが高い。gitは元々、人間の開発フローを前提に設計されているので、AI時代に最適化されていないのも無理はない。

現実的な回避策は複数のクローンを作成する?

現状のgitの制約を回避する方法として、同じリポジトリを別のディレクトリに複数cloneし、それぞれのディレクトリでAIエージェントを動かすという手段しかないのかなという気がする。

しかし、この方法もこういう問題がありそう。

  1. 同名ディレクトリがたくさんできる

    • 同じリポジトリを複数コピーするため、どれがどの作業のために作ったディレクトリかわからなくなる
  2. 同期の問題

    • 各クローンが最新の状態を保つ必要があり、手動またはスクリプトで適切に管理しないと競合が発生する可能性がある。
  3. マージの煩雑さ

    • 最終的にすべての変更を統合する際、各クローンの変更をpull/mergeする必要があり、手間が増える。

そのうちClineがタスクごとにディレクトリをコピーして並列でタスクを回せるとかは直近の未来でありそうだが。

gitに限らず、

gitのようなツールは、人間が操作する前提で設計されてきた。でも、AIがプログラムを書く時代になると、こうしたツールの仕様がボトルネックになり得る。 AIが複数のプロセスで同時に作業できるなら、それに適した環境を整えることで、開発のやり方自体が大きく変わるかもしれない。この辺りには、まだまだ改善の余地とチャンスがありそうだ。

これはgitにもプログラミングにも限らず、あらゆる人間が操作する前提のアプリ・機械・etcに当てはまっていくだろう。

ユーザーエクスペリエンス=UXならぬ、AIエクスペリエンス=AXとでも呼ばれるかもしれない、AIにとって使いやすい、並列処理できるインターフェースになっているか?という観点でのデザインが求められるようになっていくだろう。

まとめ

AIによるプログラミングが本当に破壊的な存在になるには、gitの制約をどうにかする必要がある。長年にわたって開発者を支えてきたgitは、素晴らしいツールだ。しかし、AIが並列にコードを書ける時代になると、その設計が新たなボトルネックになりつつあるのも事実。AI時代の開発フローに適応するために、gitが進化するのか、それともまったく新しい仕組みが生まれるのか——。

いずれにしても、Clineは便利。