🐕

Git Worktree の操作を効率的にする CLI ツール『gwm』を作った

に公開

Claude Code がリリースされてから、git worktree を使う人が増えた気がします。自分もその一人です。
git worktree はすごく便利なんですが、若干かゆいところ手が届かなかったり、コマンドが覚えにくかったりします。
なので、git worktree をより便利にするための CLI ツールを作成しました。

https://github.com/shutootaki/gwm

Git Worktree の概要

git worktree は、1 つの Git リポジトリに対して、複数の独立した作業ディレクトリ(ワークツリー)を同時に作成・利用できる機能です。 これにより、

  • ブランチ切り替えのたびに stash/commit する手間が減る
  • ブランチごとにディレクトリを分離できるため並行開発/レビューが容易になる

などのメリットが得られます。

また Claude Code のベストプラクティスとして、 Git worktree による並列開発を推奨してたりします。

https://docs.anthropic.com/ja/docs/claude-code/common-workflows#git-worktreeで並列claude-codeセッションを実行する
https://www.anthropic.com/engineering/claude-code-best-practices

自分は VSCode 上でコードレビューをすることが多いので、開発中に別ブランチのレビュー対応を求められると、git stashgit checkout の繰り返しになりがちで、たまに間違えて履歴を消してしまうことがあります。。
が、ワークツリーを使えば無敵です。

純正 git worktree コマンドの少し物足りないところ

  • リモートブランチをワークツリーに追加するのが面倒
  • ワークツリー作成時に、gitignore されたファイルがコピーされない
  • 対話型 CLI ではないので、コマンドをおぼえるのが面倒くさい
  • ワークツリー作成後にそのままエディタを開くことができない

はじめのうちは .zshrc を手動であれこれ調整していたのですが、設定が増えるにつれて管理が面倒になってきたので、いっそ CLI ツールを作ったほうが楽なのでは?と思い、自作に至りました。
また、ccmanager のような洗練された CLI ツールはすでにあるのですが、自分は Cloud Code と worktree の機能を疎結合にしたかったので、独自実装を選びました。

gwm の主なコマンド

コマンド 主な用途 特徴的な UI / 挙動
gwm add Worktree の作成とブランチ生成 引数なしで起動するとインクリメンタル検索 UI を表示し、新規ブランチ名をその場で入力可能
gwm go Worktree に移動またはエディタで開く 選択したワークツリーに移動する。--code --cursor で IDE 連携
gwm list Worktree 一覧の表示 ACTIVE / MAIN / OTHER を色分けして出力
gwm clean 不要な Worktree の一括削除 マージ済みかつ未変更ディレクトリのみを安全に削除
gwm pull-main main Worktree の更新 main 系ブランチをまとめて git pull
gwm help 統合ヘルプ グローバルヘルプとコマンド固有ヘルプを段階的に表示

特徴

  • インクリメンタル検索 UI: ブランチ名や Worktree をインクリメンタル検索で選択でき、タイピングを最小化。
  • IDE 連携オプション: --code--cursor で作成直後にエディタを起動し、時間を短縮。
  • .env ファイル自動コピー: ~/.config/gwm/config.toml で有効化すると、gwm add 実行時に .env* を自動複製。
  • 安全なクリーンアップ: gwm clean はマージ状態・ローカル変更の有無をチェックし、削除可能な Worktree だけを提案。

インストール

# Global install
npm install -g @shutootaki/gwm

# or use npx (no installation needed)
npx @shutootaki/gwm

基本ワークフロー

1. Worktree を作成する

Worktree を新規作成する

デフォルトブランチから分岐し、入力したブランチ名でワークツリーをすばやく構築します。作成後に VS Code や Cursor を開きたい場合は --code / --cursor を付けるだけで OK です。

gwm add

gwm add --code        # VS Code で開く
gwm add --cursor      # Cursor で開く
gwm add --cd         # ディレクトリを移動

リモートブランチをもとに Worktree を作成する

リモート側のブランチをフェッチして、そのブランチ専用のワークツリーを用意します。こちらも オプションでエディタを即起動できます。

gwm add -r

gwm add -r --code        # VS Code で開く
gwm add -r --cursor      # Cursor で開く
gwm add -r --cd         # ディレクトリを移動

2. ディレクトリを移動する

対話 UI で目的のワークツリーを選び、そのディレクトリに自動で cd するかエディタで即オープンできます。

gwm go               # サブシェルまたは cd のみ

gwm go --code        # VS Code で開く
gwm go --cursor      # Cursor で開く

3. Worktree 一覧を確認する

現在のプロジェクトに紐づくワークツリーを STATUS 付きで一覧表示します。

gwm list
gwm ls # alias

4. 任意の Worktree を削除する

対話的 UI で選択したワークツリーを安全に削除できます。

gwm remove
gwm rm # alias

5. 不要な Worktree を一括削除する

マージ済みまたはリモート削除済みで、かつローカルに変更のないワークツリーを一括スキャンしてクリーンアップします。

gwm clean

その他、詳細設定やオプションについては、以下の README.md を見るか、gwm help <command> コマンドを実行してください。

https://github.com/shutootaki/gwm

まとめ

gwm を利用すると Worktree 操作を単一コマンドに集約でき、ブランチ切り替えに伴う時間と認知負荷を大幅に削減できると思います。Worktree 運用を負担に感じている方はぜひ試してみてください!

Discussion