はたらクラフト

Claude CodeとGit worktreeで複数AIの並列作業を実演解説

開発・運用の仕組み化

Claude CodeのようなAIエージェントは、平気で30分、1時間と作業を続けます。終わるまで待っていられないので、複数のAIに同時に作業を任せたいところです。

しかし、1つのフォルダで複数のAIに作業させると、お互いの作業がぶつかります。

この記事では、Git worktreeでAIごとに作業フォルダを作って並列で作業させ、各AIの成果物を統合するまでの流れを、実際の画面で解説します。

GitやGitHub、リポジトリ、コミット、プッシュ、プルを理解している前提で進めます。まだの方は、先にGit・GitHubの初期設定と基本操作を解説した記事をご覧ください。

動画で見たい方はこちら。

Git worktreeで、AIごとに作業フォルダを分けられる

2つのAIが1つの作業フォルダを共有して作業が衝突する場合と、Git worktreeでAIごとの作業フォルダに分けて衝突しない場合の比較

Git worktreeは、1つのリポジトリから複数の作業フォルダを作る仕組みです。1つのAIにつき1つの作業フォルダを用意すれば、AI同士の作業はぶつかりません。

ここからは、Git worktreeで実際に2つのAIを並列で動かしてみます。

実演用のリポジトリを作成

まずは実演用のリポジトリを用意します。フォルダの場所と名前は何でもよく、ぼくはデスクトップに git-wortkree フォルダを作りました。

ClaudeアプリでClaude Codeを開き、Opus 5.5の思考レベルを「高」にします。

Claudeアプリでエフォートを「高」にし、入力欄の下にOpus 5.5と「高」が表示された画面

作ったフォルダのパスを貼り付け、次のように指示すれば、フォルダがGitHubのプライベートリポジトリになります。

{フォルダのパス} このフォルダをGitHubのプライベートリポジトリとして管理して

ぼくは毎回AIにリポジトリ作成を指示するのが面倒なので、この作業をスクリプトにしています。スクリプトは、Claude Codeに次のように指示すればすぐに作れます。

フォルダのパスを受け取って、GitHubのプライベートリポジトリにするスクリプトを作って

リポジトリはまだ空なので、中身もClaude Codeに作ってもらいます。題材は何でも良いので、誰でもわかりやすい家計簿にしました。

架空の家計簿をマークダウンファイルで作成して

家計簿ができたら、GitHubにプッシュしておきます。

ブランチは、履歴を分岐させて作業を並列に進める仕組み

1本のコミット履歴が途中で分岐し、mainとbug-fixのブランチが互いに影響せず並列に進む様子

worktreeの前に、ブランチという言葉を押さえておきます。

リポジトリのコミット履歴は、最初は1本です。特定のコミットを起点に履歴を複数に分岐させることができ、分岐した1本1本の履歴をブランチ(枝)と呼びます。

たとえば、本番環境用の main ブランチから、機能追加用やバグ修正用の bug-fix ブランチを分岐させます。ブランチを分ければ、各作業は互いに影響を受けず、並列して進められます。

ブランチを分ければ、片方を直してももう片方は変わらない

実際に、実演用のリポジトリでもブランチを増やしてみます。現時点のブランチは main だけです。

GitHubのリポジトリ画面で、ブランチ名の main を押します。入力欄に fix と入力して「Create branch fix from main」を押すと、main から fix ブランチが作られます。

GitHubのブランチメニューにfixと入力し、「Create branch fix from main」を押す画面

同じメニューで、fix と main を自由に切り替えられます。作ったばかりの fix は main と同じ内容で、差分はまだありません。

試しに、fix ブランチの家計簿をGitHub上で直してみます。冒頭の「2026年9月」を「2026年10月」に変更し、コミットメッセージは初期値のまま「Commit changes」を押しました。

家計簿の冒頭を2026年10月に変更し、初期値のコミットメッセージのまま「Commit changes」を押す画面

fix では家計簿の冒頭が10月になり、main に切り替えると、何も直していないので9月のままです。ブランチが複数あれば、このように複数の作業を並列して進められます。

fixブランチでは2026年10月の家計簿が、mainブランチに切り替えると2026年9月のままの様子

Git worktreeは、ブランチを入れた作業フォルダ

GitHubにmainとfixがあっても、パソコンのフォルダに入るブランチは一度に1つで、そのフォルダがworktreeであることを示す図解

GitHubでブランチを増やしても、パソコンの実演用のリポジトリは main ブランチのままです。VS Codeで開くと、家計簿の冒頭も2026年9月から変わっていません。

パソコンの実演用のリポジトリをVS Codeで開き、mainブランチのまま家計簿が2026年9月の画面

1つのフォルダで使えるブランチは、一度に1つです。Git worktreeは、このブランチを入れた作業フォルダのことを意味します。

worktreeの作成は、スクリプトにすれば1コマンドで済む

create-worktree.shの1コマンドで、パソコンにブランチとフォルダ、GitHubにブランチが作られる流れ

worktreeを作る作業も、スクリプトにしておくと便利です。まず、worktree置き場として、デスクトップに git-workrees フォルダを作りました。

続けて、Claudeに次のように指示します。

現在のブランチから {worktree置き場のパス} にworktreeを作成するスクリプトを作成して。worktree名はユーザーが必須で指定する

この指示は、新しいブランチを作り、そのブランチを入れたフォルダをworktree置き場に作る作業を、1つのコマンドで済ませるという意味です。

Claude Codeは create-worktree.sh を作り、./create-worktree.sh <worktree名> で実行すると報告しました。

create-worktree.shの作成と、worktree名を付けて実行するコマンドを報告するClaude Codeの画面

1回目は、GitHubにブランチが作られなかった

さっそく報告にあるコマンドをコピーし、Claudeアプリのターミナルで実行します。作成するworktree名は test にしました。

Claudeアプリのターミナルで./create-worktree.sh testを実行し、worktreeができた画面

GitHubでブランチの一覧を確認すると、main と、ぼくが作った fix しかなく、test がありません。

GitHubのブランチ一覧にmainとfixだけがあり、testがない画面

今度はターミナルで、git branch と入力すると、パソコンのGitにあるブランチを表示できます。パソコン内には、 main と test がちゃんとありました。

Warpでgit branchを実行し、mainとtestが表示された画面

worktree置き場の test フォルダにも、家計簿のファイルがあります。スクリプトに足りないのは、GitHubへの反映だけです。

worktree置き場のtestフォルダに、家計簿のファイルが入った画面

GitHubにもworktreeのブランチを作成するよう追加指示

Claude Codeに、次のように追加で指示します。

worktreeのブランチはGitHubにも反映するようにして

修正が終わったら、再度worktree作成のスクリプトを試します。今度はworktree名を test2 にして実行しました。

スクリプト実行後にGitHubの画面を更新すると、今度はブランチの一覧に test2 がちゃんと出てきました。

GitHubのブランチ一覧にtest2がある画面

パソコンのworktree置き場にも test2 フォルダができ、中に家計簿のファイルがあります。これでスクリプトは完成です。スクリプトはコミットして、GitHubにプッシュしておきます。

今回の失敗をふまえると、最初から以下のように指示すれば、期待通りのスクリプトになったはずです。

現在のブランチから {worktree置き場のパス} にworktreeを作成するスクリプトを作成して。worktree名はユーザーが必須で指定する。worktreeのブランチはGitHubにも反映するようにして

worktreeを分ければ、2つのAIが同時に作業してもぶつからない

いよいよ、worktreeを使って2つのAIに家計簿を直してもらいます。スクリプトで、money-fix と item-fix の2つのworktreeを作りました。

Warpでcreate-worktree.shを実行し、money-fixとitem-fixのworktreeを作成した画面

Claudeアプリで新しい会話を始め、item-fix のフォルダを開いて、次のように指示します。

固定費を金額の高い順に並べて

続いて、別の新しい会話で money-fix のフォルダを開き、次のように指示しました。

架空のサブスクの項目をもっと細分化して

左が money-fix、右が item-fix のAIで、別々のworktreeで同時に作業を進めます。今回は簡単な作業ですぐに終わりましたが、時間がかかっても作業フォルダが別々なので、お互いに影響しません。

money-fixでサブスクを細分化したAIと、item-fixで固定費を並べ替えたAIの画面を並べた様子

作業が終わったら、プルリクエストで元のブランチにマージする

マージ元のitem-fixを、プルリクエストで人が差分を確認してから、マージ先のmainへ取り込む流れ

worktreeでの作業が終わったら、変更内容を元のブランチにマージします。マージとは、分岐したブランチの作業を、分岐元のブランチに統合することです。

プルリクエストは、マージ先とマージ元を選ぶだけで作れる

GitHubのリポジトリ画面で、上部の「Pull requests」を開きます。

GitHubのリポジトリ画面上部の「Pull requests」タブ

続けて、右にある「New pull request」ボタンを押します。

「New pull request」ボタン

並んだ2つのボタンのうち、「base」がマージ先、「compare」がマージ元です。マージ先は main のまま、マージ元に item-fix を選びます。

baseがマージ先、compareがマージ元で、compareのメニューからitem-fixを選ぶ画面

すると「There isn’t anything to compare.」と、差分がないと表示されました。worktreeでの変更を、まだGitHubにプッシュしていなかったからです。

「There isn’t anything to compare.」と差分なしが表示された画面

プッシュはコマンドでもできますが、Claude Codeに任せます。2つの会話それぞれで、次のように指示しました。

コミットしてプッシュして

GitHubの画面を更新すると、変更内容が差分として表示され、「Able to merge.」とマージできることも示されます。「Create pull request」ボタンを押してプルリクエストを作ります。

「Able to merge.」の表示と「Create pull request」ボタン

プルリクエストは、その名のとおり、あるブランチを別のブランチにプルする(取り込む)依頼です。今回は、item-fix ブランチを main ブランチに取り込みます。

差分を確かめて問題がなければ、ボタン2つでマージ

プルリクエストの画面では、ブランチ同士の差分を見られます。AIの作業内容に問題がないかは、ここで確かめるのが一般的です。

上部の「Files changed」タブで差分を確かめ、問題がなければ下の「Merge pull request」ボタンを押します。

プルリクエストの画面の「Files changed」タブと「Merge pull request」ボタン

今回の差分では、固定費の行が金額の高い順に並び替わっています。緑の背景が追加した行、赤の背景が消した行です。

「Files changed」タブで、固定費の行が金額の高い順に並び替わった差分

「Merge pull request」ボタンの次に表示される「Confirm merge」ボタンを押すと、マージが確定します。

マージのコミットメッセージと「Confirm merge」ボタン

「Merged」と表示され、item-fix が main にマージされました。

「Merged」と「Pull request successfully merged and closed」が表示された画面

main ブランチの家計簿を開くと、固定費が金額の高い順に並んでいて、item-fix の変更が反映されています。

mainブランチの家計簿で、固定費が金額の高い順に並んだ画面

コンフリクトが起きても、解消はAIに任せられる

続けて、money-fix のプルリクエストも同じ手順で作ります。すると、Can’t automatically merge.(自動ではマージできない)という警告が出ました。

マージ元にmoney-fixを選ぶと「Can’t automatically merge.」と表示された画面

警告が出ても、プルリクエスト自体は作れます。作ったプルリクエストを見ると、「Merge pull request」ボタンが押せなくなり、「Resolve conflicts」ボタンが出ています。

「Resolve conflicts」ボタンと、押せない「Merge pull request」ボタン

コンフリクトとは、変更内容がぶつかっている状態です。先にマージした item-fix と今回の money-fix は、どちらも家計簿の固定費の表を直していました。

同じファイルの同じ行を別々に変更すると、GitHubは自動で統合できません。人が中身を見て、正しい内容になるよう手で直す必要があります。

「Resolve conflicts」ボタンを押すと、コンフリクトの画面が開きます。

コンフリクトの画面で、money-fixの変更と今のmainの内容が区切られた部分

コンフリクト画面では、どの変更がぶつかっているのかが示されます。

AIが登場するまで、コンフリクトの解消は面倒な作業でした。今は、AIに直してもらうだけで済みます。money-fix の会話で、次のように指示しました。

コンフリクトを解消して

すると、Claudeが正しくコンフリクトを解消してくれています。

「コンフリクトを解消して」の指示に、両方の変更を残して解消したと報告するClaude Codeの画面

プルリクエストの画面を更新すると、コンフリクトが解消して、「Merge pull request」ボタンが押せるようになりました。

コンフリクトが解消し、押せるようになった「Merge pull request」ボタン

あとは同じ手順でマージすれば、2つのworktreeの作業の main 取り込み完了です。

マージ後に残るブランチとworktreeは、まとめて削除する

マージを終えても、ブランチとworktreeは残ったままです。GitHubのブランチ一覧には、item-fix と money-fix の両方が残っています。

マージ後もGitHubのブランチ一覧にitem-fixとmoney-fixが残った画面

パソコンのworktree置き場にも、item-fix と money-fix のフォルダが残っています。

マージ後もworktree置き場にitem-fixとmoney-fixのフォルダが残った画面

そこでぼくは、マージ、ブランチの削除、worktreeの削除を1回で済ませるスクリプトも、Claude Codeに作ってもらっています。

worktreeのブランチのマージ、ブランチの削除、worktreeの削除を実行するスクリプトを作成して

Claude Codeの標準機能でもworktreeは作れる

worktreeの作成は、Claude Codeの標準機能でもできます。Claudeアプリの入力欄の上にある「ワークツリー」にチェックを付けて指示すると、Claude Codeが自分でworktreeを作って作業します。

Claudeアプリの入力欄の上にある「ワークツリー」のチェックボックス

ぼく個人としては、自前のスクリプトの方が便利だと思っています。事前にプログラムの環境を立ち上げるなど、worktreeを作るときの処理を自由に組み込めるからです。

標準機能を使うか、自前のスクリプトを使うかは好みの問題です。どちらも試して、自分に合う方を使ってください。

まとめの前に、お知らせを。

公式LINEの友だち追加特典で、無料30分相談を受付中。オンライン(顔出し不要)で、AI活用のお困りごとに答えます。

友だち追加後、「相談」と送ると予約リンクが届きます。余裕がなくなったら締め切るので、お早めにどうぞ。

はたらクラフト公式LINELINElin.ee

無料メルマガで実務で使えるAI活用を毎日配信中。1分で登録できます。

超実践AI論Substacktaichiaiworker.substack.com

まとめ:AIごとにworktreeを分け、複数作業を同時に進める

この記事の要点は次の4つです。

  • AIに並列で作業させるときは、作業の数だけworktreeを用意し、各worktreeにAIを1つずつ割り当てる
  • worktreeの作業が終わったら、プルリクエストで差分を確かめ、元のブランチにマージする
  • 同じ箇所を直してコンフリクトが起きても、解消はAIに任せられる
  • worktreeの作成・削除の流れは、スクリプトにしておくと便利

ぜひあなたも、Git Worktreeで複数のAIを同時に動かしてみてください。より多くの仕事を効率よくこなせるようになります。

この記事をシェア

無料30分相談で、困りごとをお聞かせください

お困りごとや業務内容をうかがい、最も費用対効果が高い解決策をご提案します。事前準備は不要で、オンライン・電話・対面に対応しています。