【ITニュース解説】I replaced coding-agent orchestration with Git worktrees and one Python file
2026年09月17日に「Dev.to」が公開したITニュース「I replaced coding-agent orchestration with Git worktrees and one Python file」について初心者にもわかりやすく解説しています。
ITニュース概要
複数のAIコーディングエージェントが同じリポジトリで作業する際のファイル衝突問題を、Gitのworktreeで解決する「taskpods」が登場。エージェントごとに独立した作業環境とブランチを提供し、変更を安全に管理。レビューやPR作成まで効率的に行える。
ITニュース解説
システムエンジニアがソフトウェア開発を行う際、プロジェクトの変更履歴を管理し、複数の開発者が協力して作業を進める上で「Git」というバージョン管理システムは不可欠なツールである。
近年、AIがプログラムのコードを自動生成したり修正したりする「コーディングエージェント」という技術が登場し、開発作業の効率化に貢献することが期待されている。しかし、複数のAIエージェントを同じプロジェクトで同時に動かすと、問題が発生することがある。例えば、エージェント同士が同じファイルを同時に変更しようとしたり、別のブランチに切り替えようとしたりすると、お互いの作業が衝突し、リポジトリの状態が混乱してしまう。どのAIがどんな変更を加えたのかが不明瞭になることもあり、通常、このような問題を解決するためには、複雑なオーケストレーションツール、つまり複数のタスクやプロセスを管理・調整するシステムを導入することが考えられる。
しかし、この記事で紹介されているのは、Gitが元々持つ「ワークツリー(worktree)」という機能を活用し、この問題をシンプルに解決する「taskpods」というPython製のコマンドラインツールである。
ワークツリーとは、一つのGitリポジトリから複数の独立した作業ディレクトリ(作業空間)を作成できる機能だ。それぞれのワークツリーは、チェックアウトされているブランチや、次にコミットする内容を一時的に保持する「インデックス」を個別に持つ。一方で、プログラムの変更履歴そのものである「オブジェクトデータベース」は、すべてのワークツリーで共有される。これにより、各ワークツリーは互いに干渉することなく、完全に独立した環境で作業を進めることが可能になる。
taskpodsは、このGitのワークツリーの特性をコーディングエージェントのタスク管理に応用した。具体的には、AIエージェントが行う一つの作業(タスク)ごとに、一つのワークツリー、一つの専用ブランチ、そしてその中で動く一つのエージェントプロセスを割り当てる。この分離された環境で各AIエージェントが作業することで、他のエージェントとのファイル衝突や状態の混乱を防ぎ、それぞれのタスクによる変更点を明確な差分として管理できるようになるのだ。
taskpodsはPython 3.9以降で動作し、特別な追加ソフトウェアを必要としない軽量なツールである。使い方は直感的で、Gitリポジトリのディレクトリ内でtaskpods startコマンドを実行することで、新しいタスクを開始する。例えば、taskpods start tests --agent codex exec "add API tests"と実行すると、testsという名前のタスクが開始される。このコマンドは、リポジトリ内に.taskpods/testsという新しいワークツリーと、それに対応するpods/testsというブランチを作成し、指定されたAIエージェント(この例ではcodex exec)をそのワークツリー内で実行させる。別のタスクを始める際も同様に、taskpods start docs --agent claude "improve the docs"のように実行すれば、別のタスク用のワークツリーとブランチが作られ、AIエージェントが独立して作業を開始する。
この仕組みの大きな利点は、AIエージェント自体がtaskpodsに直接対応している必要がないことである。--agentオプション以降に続く文字列は、そのままAIエージェントを起動するコマンドとして渡されるため、Claude CodeやCodex CLIなど、多種多様な既存のAIエージェントや、独自のカスタムスクリプトでも利用できる。
AIエージェントのプロセスが終了しても、ワークツリーは即座には削除されない。これは、エージェントが行った変更を人間がレビューできるようにするためだ。taskpods listコマンドで現在実行中や完了したタスクの一覧を確認でき、git -C .taskpods/tests diff mainのようにコマンドを実行すれば、特定のワークツリーで加えられた変更内容を、元のブランチ(例えばmainブランチ)との差分として確認できる。
もしAIエージェントが生成した変更をプロジェクトに取り込みたい場合は、taskpods done tests -m "Add API tests" --removeコマンドを使用する。このコマンドは、ワークツリーでの変更をステージングし、コミットし、そのブランチをリモートリポジトリにプッシュする。GitHub CLIが利用可能な環境では、自動的にプルリクエストも作成する。--removeオプションを付加すれば、変更が安全にリモートにプッシュされた後、ローカルのワークツリーは自動的に削除される。
反対に、AIエージェントが生成した変更が不要な場合は、taskpods abort testsコマンドでタスクを破棄できる。このコマンドはワークツリーとブランチを削除するが、誤って既にリモートにプッシュ済みのブランチを削除しないよう、安全機能が組み込まれている。また、不要になったワークツリーやブランチを整理するために、taskpods pruneコマンドも提供されており、これは既にリモートリポジトリでマージ済みのブランチに対応するワークツリーを削除する機能を持つ。
taskpodsは、多数のエージェントを監視するような複雑な機能や、タスクのスケジュール、エージェント間の協調といった高レベルなオーケストレーション機能は持たない。データベースや常駐プログラムも使用せず、Gitを「真実の源泉」として利用する。このシンプルさが、taskpodsの大きな特徴であり強みである。各タスクに独立したGitワークツリーとブランチを与え、そのライフサイクルを明確に管理するという、限定されたが重要な保証を提供する。
この設計思想により、taskpodsは他の開発ツールと組み合わせやすい「コンポーザブル」なツールとなっている。シェルスクリプト、継続的インテグレーション(CI)のジョブ、他のタスクランナー、さらにはより高レベルなオーケストレーターなどから呼び出すことが可能で、新たな状態管理モデルを導入する必要がないため、柔軟性が高い。
現在、taskpodsはv0.4.0として公開され、実際の利用を通じてその有効性が検証されている段階である。今後は、複数のAIエージェントが長時間稼働する場合の挙動、中断されたエージェントプロセスの扱い、手動マージ後のブランチクリーンアップ、デフォルトブランチがmainでないリポジトリでの対応、永続的な管理システムを望まないチームでの利用など、より幅広い利用シナリオでの検証が進められる予定だ。
taskpodsは、AIを活用した開発環境において、Gitの既存機能を最大限に活用することで、複雑な問題をシンプルかつ効果的に解決できる可能性を示している。Gitの深い理解と応用によって、開発プロセスをより効率的かつ安全に進めるための新しいアプローチを提供しているのである。