はじめに
AI界隈の進化は止まることを知らず、年始も新しい技術のキャッチアップや開発で忙しい日々が続いています。
そんな中で、少しでも開発フローを効率化するために、Git Worktreeの管理を簡単にするCLIツール 「vibe」 を作りました。
Git Worktreeとは
Git Worktreeは、1つのリポジトリで複数のブランチを同時にチェックアウトできるGitの標準機能です。
通常、ブランチを切り替える際は git checkout や git switch を使いますが、作業中のブランチAから別のブランチBに切り替えると、ファイルの内容が切り替わってしまいます。そのため、以下のような課題があります:
- 作業途中の変更をstashするか、一時コミットする必要がある
- 開発サーバーやビルドプロセスが再起動される
- エディタやIDEが再読み込みされる
Git Worktreeを使うと、これらの問題を解決できます。 別ディレクトリに新しいWorktreeを作成することで、元のブランチはそのまま残しつつ、別のブランチでの作業を並行して行えます。
# 従来の方法
git checkout main
git checkout -b feature/new-feature # mainでの作業が中断される
# Worktreeを使う方法
git worktree add ../new-feature feature/new-feature # mainでの作業を継続できる
これにより、以下のような使い方が可能になります:
- ブランチAで実装中に、緊急のバグ修正が必要になったらブランチBのWorktreeを作成して対応
- ブランチAで開発サーバーを起動したまま、ブランチBでレビューや調査
- 複数のAI Agentを異なるブランチで同時に動かす
リポジトリのクローンとの比較
並行して複数のブランチで作業する方法として、「リポジトリを複数回クローンする」という選択肢もあります。しかし、Git Worktreeには以下のような明確なメリットがあります:
ディスク容量とクローン時間の節約
複数クローンする場合、各クローンごとに .git ディレクトリが作成され、リポジトリの全履歴が複製されます。一方、Git Worktreeは Gitオブジェクトを共有 するため、ディスク容量を大幅に節約できます。
さらに、クローン時間も大幅に削減できます。複数クローンの場合は git clone を何度も実行する必要がありますが、Git Worktreeでは 最初の1回だけクローンすれば、あとは git worktree add だけで新しい作業ディレクトリを作成 できます。git worktree add はGitオブジェクトのダウンロードが不要で、ワーキングディレクトリのチェックアウトのみを行うため、ほぼ瞬時に完了します。
# 複数クローンの場合
project1/.git # 例:500MB(クローンに30秒)
project2/.git # 例:500MB(クローンに30秒)
project3/.git # 例:500MB(クローンに30秒)
# 合計:1.5GB、90秒
# Git Worktreeの場合
project/.git # 例:500MB(最初のクローンに30秒)
project-worktree1/ # ワークツリーのみ(追加は数秒)
project-worktree2/ # ワークツリーのみ(追加は数秒)
# 合計:500MB + α、30秒 + α
大規模なリポジトリや、複数のブランチで並行作業する場合、この差は無視できません。
Git操作の一元管理
すべてのWorktreeは同じ .git ディレクトリを共有するため、以下のような利点があります:
-
fetch/pullが一度で済む: 1つのWorktreeで
git fetchすれば、すべてのWorktreeに反映されます - ブランチの一覧が統一: どのWorktreeからでも、すべてのブランチとWorktreeの状態を確認できます
-
設定の共有:
.git/configの設定がすべてのWorktreeで共有されます
# クローンの場合:各ディレクトリでfetchが必要
cd project1 && git fetch
cd project2 && git fetch
cd project3 && git fetch
# Worktreeの場合:一度のfetchで全体が更新される
cd project && git fetch
誤操作の防止
複数のクローンを管理していると、「どのディレクトリで作業しているか」を見失いがちです。Git Worktreeでは、git worktree list で全体像を一目で確認でき、管理が容易になります。
$ git worktree list
/path/to/project abc1234 [main]
/path/to/project-feature def5678 [feature/new-ui]
/path/to/project-hotfix ghi9012 [hotfix/critical-bug]
これらの理由から、並行作業にはリポジトリの複数クローンではなく、Git Worktreeの利用を強くお勧めします。
作成した背景
Git Worktreeは便利な機能ですが、git worktree add した後に .env などのファイルをコピーしたり、npm install や build を実行したりといった定形のワークフローが発生します。
AI Agentの発達により並行で作業することが当たり前になる中で、これらの作業が重く感じるようになり、もっと手軽に扱いたいと思いこのツールを作成しました。
vibeとは
vibe は、Git Worktreeの作成、環境構築、削除を管理するCLIツールです。
Denoで実装されており、各種OSで動作します。
インストール
macOSの場合はHomebrewでインストールできます。
brew install kexi/tap/vibe
Deno (JSR), Linux, Windowsなどもサポートしています。
詳しくはリポジトリのREADMEを参照してください。
https://github.com/kexi/vibe#installation
使ってみる
Worktreeの作成
vibe start <branch> でWorktreeを作成します。ディレクトリの作成や、既存のWorktreeがある場合の確認などを対話的に行えます。
vibe start feat/new-feature
設定ファイルによる自動化
プロジェクトルートに .vibe.toml を置くことで、Worktree作成時の挙動を定義できます。
.vibe.toml:
# 親リポジトリからコピーするファイル
[copy]
files = [
".env",
"config/*.json"
]
# Worktree作成前後に実行するコマンド
[hooks]
post_start = [
"npm install",
"claude"
]
Worktreeを作成した直後は .env や設定ファイルをコピーし、 npm install などのセットアップを行い、その直後に claude などのAI Agentを起動してコーディングを開始する workflow に最適化しています。
これにより、Worktreeを作成してからコーディングを開始するまでのリードタイムが限りなくゼロに近づきます。
思考を途切らせることなく、すぐにAIとのペアプログラミングに入れる体験は、一度味わうと戻れません。
Worktreeの削除
作業が終わったら、vibe clean でWorktreeを削除します。
vibe clean
詳しい使い方や設定オプションについては、リポジトリの日本語ドキュメントを参照してください。
https://github.com/kexi/vibe/blob/main/README.ja.md
おわりに
Git Worktreeで並行作業をする際には、環境構築やファイルコピーの手間を省けるので、vibeを使うと便利ですし、作業の効率化もできます。
またAI Agentを複数ブランチで同時に動かす場合は、特に便利です。
是非、vibeを使ってみてください!
機能要望やバグ報告などは、以下のリポジトリのIssueに登録してください。