😸

Copilot渋滞を解消:git worktree×複数VS Codeで"1人並列開発"

に公開

ポイント

GitHub Copilotの作業を1本ずつ順番待ちしていませんか?

git worktree で作業フォルダを分離して、VS Code を複数起動。そうすると、同じリポジトリの複数課題を並行で走らせて、終わったものから main に取り込めるようになりました。
細かい課題を大量に一人で実装するような状況にピッタリで、課題が雪崩のように片付いていきます!

image.png

概要

Visual Studio, VSCodeなどのエディタでGitHub Copilotを使用する場合、ローカルにあるファイルを直接編集しているので、複数の変更作業を同時にやらせるのは難しいです。(変更が衝突しやすいし、内容も混ざる)

手動で試行錯誤してみた結果、複数のエディタを開いて git worktree を組み合わせることで実現できました。同じリポジトリに対して複数のエディタで同時にGitHub Copilotでの変更作業を実行し、それを終わったものから順にマージしていく、という一人git-flowのようなサイクルを上手く回すこともできています。そのやり方を紹介しようと思います。

最初に結論まとめ

次のようにやると上手くサイクルを回すことが出来ました。

  1. 課題開始側
    1. ローカルのリポジトリで、メインブランチをチェックアウトしておく(以下、これをworktreeと区別する意味でmaintreeと呼びます)
    2. 課題に対してfeatureブランチを作成し、git worktreeで別フォルダへチェックアウト
    3. そのフォルダをワークスペースにしてVSCodeを開き、GitHub Copilotで作業開始
    4. 以上を課題の数だけ繰り返す
  2. 課題完了側
    1. GitHub Copilotの作業が全て終わってマージ可能になったら、worktree上でそれをコミットし、メインブランチへリベースする
      1. 競合解決が必要ならばこのタイミングでworktree上で行う
    2. maintree上で、メインブランチをそこへfast-forwardする※1
    3. worktreeとそのフォルダを削除
    4. 以上を課題の数だけ繰り返す

※1 もちろんGitHubのプルリクなどを通しても良いが、マージ履歴が必要なくローカルで一人で作業をするならばこれで十分

これで、次のような一人git-flow風の作業を回せます。

一人git-flow.png

とはいえこの手順をgitコマンドを使って実現するのはそこそこに手間です。

さらに、git worktreeをGUIで扱えるGitKrakenと、VSCode上でのGit操作(Source Control)を組み合わせると、GUIでかなり手軽にやれます。

説明

全体の流れは上で説明したので、ここからはGitKrakenとVSCodeでの操作方法を交えて詳しく説明しようと思います。それらツールの動作は2025/12/19時点で確認した実際の動作なので、今後のアップデートで変わるかもしれません。

GitKrakenとVSCodeでの手順紹介

1.1. GitKrakenでworktree作成と切り替え

ここでは、sample.gitをcloneした、 D:\Temp\GitTest1\sample というローカルリポジトリを開いています。次のように、指定したコミットからworktreeを作成するメニューを選びます。

image.png

ブランチ名を指定すると、 D:\Temp\GitTest1\sample に対して~.worktrees というフォルダを作り、その中にブランチ名のフォルダを作ってくれます。

image.png

続けてOpen Nowで、GitKraken上でそのworktreeを開いた状態にできるので、この手順ではOpen Nowします。

image.png

1.2. VSCodeで開いてGitHub Copilotで作業開始

GitKrakenは、 Alt+O でいま対象としているフォルダをエクスプローラで開けます。

VSCodeのインストール時にフォルダを開くコンテキストメニューを登録しているのであれば、開いたエクスプローラのフォルダを右クリックしてVSCodeを開けばOKです。

image.png

GitHub Copilotに指示を出して、作業を開始しましょう。

image.png

このVSCodeのウインドウは作業が終わるまで放っておくので、どこかへどかすと良いです。私は2つ目のディスプレイに移動させることが多いです。

2.1. worktree上でコミット・リベースなど

変更内容は、そのVSCode上でそのままステージング、コミットなどが可能です。

image.png

VSCode・GitKrakenのどちらでも作業できますが、GitKrakenでは編集対象のworktreeの切り替えに少し時間がかかります。このやり方の場合は、VSCode上で直接コミット・プッシュなどをやってしまう方が速いと思います。リベースや競合解決などはGitKrakenの方がUIが充実していて楽だと思います。(私は使っていませんが、GitKrakenの代わりにGitLensでも十分に行けるかもしれません)

2.2. メインブランチをfast-forward

説明の都合上、適当なfeature2ブランチも作りました。

feature1の作業が終わってリベースも済ませると、最初に開いていたメインブランチはこんな状況になっているはずです。

image.png

feature1をマージしてOKという場合は、このままfast-forwardしてしまいましょう。メインブランチでは作業をしていないので、feature1のリベースをちゃんと終わらせてあれば、成功するはずです。

image.png

これで、プルリク相当のメインブランチへの取り込み作業は完了です。

image.png

2.3.worktreeとそのフォルダを削除

worktreeのフォルダを開いていたVSCodeを閉じます。

GitKrakenのメニューでworktreeを削除すると、worktreeのフォルダ削除とpruneをまとめてやってくれます。(ブランチは消えません)

左側のWorkTreesのメニューから実行です。

image.png

gitコマンドで頑張る場合と比べてだいぶ便利ですね!ただしVSCodeを開きっぱなしだとフォルダの方の削除に失敗するので、注意です。(あとで手動で消せば良いだけですが)

手順まとめ

手順1.nの作業と2.nの作業を課題ごとに繰り返せば、どんどん課題が片付いていく一人git-flowのできあがりです!

説明では使っていませんが、もちろんVisual Studioでも同じことが可能です。

タイトルの「手動版」というのは?

VSCodeの最新のバージョンアップで、VSCode上でgit worktreeを利用したバックグラウンドエージェントというものを動かす機能が入るようです。それに対してこのブログで紹介したのを「手動版」と分けました。

VSCodeの新機能でこの「手動版」を置き換えできるかもしれませんし、複数ウインドウを開いての作業や一人git-flow的な使い道ではこの方法にメリットがあって使い分けが有効となるかもしれません。そちらは使ってみてからまたレポートしようと思います。

まとめ

Visual Studio, VSCodeなどのエディタでGitHub Copilotを使用する場合でも、複数の作業を同時進行できました。同時進行というか、複数人のgit-flowを一人でこなしている気分に浸れます。

気分はともかく、細かい課題を多数実装する時などはかなり便利だと思うので、お勧めです。

補足

「メインブランチ」と表現しているものは、mainでもdevelopでも同じです。git-flowとgithub-flowの違いはこの記事では無関係なので、まとめて表現しました。

Discussion