41
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git Worktreeを快適にするCLIツール「vibe」を作りました

41
Last updated at Posted at 2026-01-02

はじめに

AI界隈の進化は止まることを知らず、年始も新しい技術のキャッチアップや開発で忙しい日々が続いています。
そんな中で、少しでも開発フローを効率化するために、Git Worktreeの管理を簡単にするCLIツール 「vibe」 を作りました。

Git Worktreeとは

Git Worktreeは、1つのリポジトリで複数のブランチを同時にチェックアウトできるGitの標準機能です。

通常、ブランチを切り替える際は git checkoutgit 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 installbuild を実行したりといった定形のワークフローが発生します。
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

シェル統合

vibeが cd コマンドを発行してWorktreeディレクトリに移動できるよう、シェル統合の設定が必要です。

# .zshrc or .bashrc
vibe() { eval "$(command vibe "$@")" }

Fishやその他のシェルについては、READMEを参照してください。
https://github.com/kexi/vibe#shell-integration

使ってみる

Worktreeの作成

vibe start <branch> でWorktreeを作成します。ディレクトリの作成や、既存のWorktreeがある場合の確認などを対話的に行えます。

vibe start feat/new-feature

オプションとして、--no-hooks でフック実行をスキップ、--no-copy でファイルコピーをスキップできます。

vibe start feat/quick-fix --no-hooks --no-copy

設定ファイルによる自動化

プロジェクトルートに .vibe.toml を置くことで、Worktree作成時の挙動を定義できます。

.vibe.toml:

[copy]
# 親リポジトリからコピーするファイル(Globパターン対応)
files = [".env", "config/*.json"]
# ディレクトリのコピー
dirs = ["node_modules", ".cache"]

[hooks]
# Worktree作成前後に実行するコマンド
pre_start = ["echo 'Preparing...'"]
post_start = ["pnpm install", "claude"]

copy.dirs でディレクトリ全体をコピーできます。

Copy-on-Write(CoW)による高速コピー

vibeは、Copy-on-Write(CoW)対応のファイルシステムでコピー処理を最適化します。

OS ファイルシステム コピー方式
macOS APFS clonefile() システムコール
Linux Btrfs, XFS FICLONE ioctl
その他 - rsync または通常コピー(自動フォールバック)

vibeはDenoのFFI(Foreign Function Interface)を使用して、OSのネイティブAPIを直接呼び出します。コマンド経由ではなくシステムコールを直接使用するため、オーバーヘッドが最小限に抑えられます。

CoWでは実データをコピーせず、メタデータのみをコピーするため ほぼ瞬時に完了 します。例えば、500MBの node_modules も一瞬でコピーでき、ディスク容量も実質的に増えません(書き込みが発生した時点で初めて実データが複製されます)。

これにより、Worktree作成後の npm install の時間を大幅に削減できます。

Worktreeを作成した直後は .env や設定ファイルをコピーし、 npm install などのセットアップを行い、その直後に claude などのAI Agentを起動してコーディングを開始するworkflowに最適化しています。

これにより、Worktreeを作成してからコーディングを開始するまでのリードタイムが限りなくゼロに近づきます。
思考を途切らせることなく、すぐにAIとのペアプログラミングに入れる体験は、一度味わうと戻れません。

セキュリティ

vibeは設定ファイルのSHA-256ハッシュを検証することで、悪意のあるコマンド実行を防止します。初回は vibe trust で設定ファイルを登録する必要があります。

vibe trust

Worktreeの削除

作業が終わったら、vibe clean でWorktreeを削除します。

vibe clean

高度な設定

.vibe.local.toml を使ったローカル設定、pre_clean / post_clean フック、環境変数(VIBE_WORKTREE_PATHVIBE_ORIGIN_PATH)など、高度な設定オプションについては日本語ドキュメントを参照してください。

おわりに

Git Worktreeで並行作業をする際には、環境構築やファイルコピーの手間を省けるので、vibeを使うと便利ですし、作業の効率化もできます。
またAI Agentを複数ブランチで同時に動かす場合は、特に便利です。
是非、vibeを使ってみてください!

機能要望やバグ報告などは、以下のリポジトリのIssueに登録してください。

41
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?