Git Worktree の操作を効率的にする CLI ツール『gwm』を作った
Claude Code がリリースされてから、git worktree を使う人が増えた気がします。自分もその一人です。
git worktree はすごく便利なんですが、若干かゆいところ手が届かなかったり、コマンドが覚えにくかったりします。
なので、git worktree をより便利にするための CLI ツールを作成しました。
Git Worktree の概要
git worktree は、1 つの Git リポジトリに対して、複数の独立した作業ディレクトリ(ワークツリー)を同時に作成・利用できる機能です。 これにより、
- ブランチ切り替えのたびに stash/commit する手間が減る
- ブランチごとにディレクトリを分離できるため並行開発/レビューが容易になる
などのメリットが得られます。
また Claude Code のベストプラクティスとして、 Git worktree による並列開発を推奨してたりします。
自分は VSCode 上でコードレビューをすることが多いので、開発中に別ブランチのレビュー対応を求められると、git stash
と git 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>
コマンドを実行してください。
まとめ
gwm
を利用すると Worktree 操作を単一コマンドに集約でき、ブランチ切り替えに伴う時間と認知負荷を大幅に削減できると思います。Worktree 運用を負担に感じている方はぜひ試してみてください!
Discussion