worktrunk で git worktree を使いたおす


git worktree は、1 つのリポジトリに対して複数の作業ディレクトリ (ワークツリー) をぶら下げられる Git の機能です。 通常 git clone したリポジトリはワークツリーを 1 つしか持たないため、別のブランチの作業に移るには git checkout (git switch) で今のワークツリーを丸ごと切り替えるしかありません。 作業途中のファイルがあれば git stash で退避し、戻ってきたら git stash pop で復元する、という手順が毎回ついて回ります。 AI エージェントでできることが増えた今、ワークツリーを使って AI エージェントを並列作業させることがとても効率的というのは理解しつつも、git worktree がどうしても使いこなせず、AI エージェントが作業している間は他のリポジトリでやることを探していました。 そんな中、worktrunk という git worktree のラッパーツールを見つけ使ってみたところ、今までの苦労が嘘だったかのようにワークツリーを作って作業できるようになりました。

ここが辛いよワークツリー

ワークツリーを作るコマンドは以下の通りです。

git worktree add .worktree/feat-foo feat/foo # ワークツリーを作る
cd .worktree/feat-foo # ワークツリーに移動する

これだけなら良いのですが、ワークツリーでは .gitignore されているファイルは新しくつくったワークツリーのディレクトリには存在しないので、もっと煩雑な手続きになります。

# 前の続きから
cp ../../.env . # .gitignore に入っていそうなファイルをコピー
npm install # 依存関係のインストール

もうだいぶ辛くなってきましたが、私の場合はモノレポでこれよりもっと複雑なセットアップが必要になることがあります。

worktrunk でできること

worktrunk でできることは、主に以下の 2 つです。

  • ワークツリー関連のコマンドの簡易化
  • ワークツリー作成時の自動セットアップ

ワークツリー関連コマンドの簡易化

worktrunk で前の例と同じワークツリーを作るコマンドはたったこれだけです。

wt switch --create feat/foo

worktree 間の移動は worktree 名を指定するだけでできます。

wt switch feat/foo

worktree 名を忘れてしまった場合は、インタラクティブに選択することもできます。

wt switch # worktree を選ぶ

ワークツリー作成時の自動セットアップ

worktrunk では worktree を作成してすぐに作業が始められるように、セットアップを自動化することができます。

設定ファイル ~/.config/worktrunk/config.toml にセットアップを定義します。

# gitignore されたファイルを worktree にコピーする
# --require-include によって、.worktreeinclude に指定されたファイルだけがコピーされる
[post-start]
copy = "wt step copy-ignored --require-include"

# プロジェクトに固有のセットアップ
[projects."github.com/hoge/fuga".post-start]
npm = "npm ci"

まとめ

ワークツリーを便利に使うためのツール worktrunk を紹介しました。 Claude などのコーディングエージェントからも操作を簡単にする機能が提供されていますが、必ずしもワークツリーを使うのがコーディングエージェントを使うためではないため、コーディングエージェント関係なく使える worktrunk を気に入っています。 今後は git 本体にも機能が追加されて便利になるかもしれません。

参考文献