本文へ移動
cccskills
無料GitHub で公開

worktree-audit

マシン上の git worktree とローカルブランチを横断で棚卸しし、マージ済みかを判定して安全に削除する。「worktree を整理して」「マージ済みブランチを消して」「worktree を全部リストして」等の依頼時、/worktree-audit 実行時に使用。

境界: 単一 worktree の作成・片付け手順は context/worktree-guide.md、コードベースの監査は codebase-review。

インストール方法を見る

含まれるファイル(3)

  • SKILL.md6.9 KB
  • references/gotchas.md5.7 KB
  • scripts/audit.sh6.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Worktree Audit

複数リポジトリにまたがるworktreeとブランチを棚卸しし、削除可否を判定する。

このskillの核心は「マージ済みの判定を1手法で済ませないこと」。 git branch --merged だけで判断すると、squashマージされたブランチが軒並み「未マージ」に見え、削除できないまま残る。逆にthree-dot diffの行数を根拠にすると、マージ済みのブランチを「未反映」と誤って報告する。

ワークフロー

1. 棚卸し

bash ~/.claude/skills/worktree-audit/scripts/audit.sh > /tmp/audit.tsv
column -t -s $'\t' /tmp/audit.tsv

スクリプトはリポジトリ探索 → git fetch → 3段判定を行いTSVを返す。出力だけが文脈に入る(スクリプト本体は読まなくてよい)。

主なオプション:

オプション用途
--branchesworktreeではなく全ローカルブランチを対象にする
--no-fetchオフライン時。判定は古いremote-tracking基準になる
--root DIR探索起点を指定(既定: $HOME/workspace $HOME/.claude $HOME/.dotfiles)

完了基準: TSVの全行にverdictが入っている。NO_BASE や ? が出た行は、そのリポジトリのbaseブランチ名を個別に確認して埋める。

2. 分類

verdictをそのまま3群に分ける。

群verdict扱い
削除可MERGED_ANCESTOR MERGED_SQUASHdirty / untrackedが0ならそのまま消せる
要判断HEAD_MISMATCH CLOSED_PR NO_PR内容がbaseにあるか個別確認(→ 3へ)
削除不可OPEN_PR作業中

dirty / untracked が0でない行は、マージ済みでも削除で変更が失われる。群に関わらず退避対象として別に数える。

完了基準: 全行がいずれかの群に入り、要判断の行数を数え上げている。

3. 要判断の行を確定させる

ここを飛ばすと誤って消すか、逆に消せるものを残す。判定方法はreferences/gotchas.mdに集約してある。要判断の行が1件でもあれば必ず読むこと。

git diff base...HEAD(three-dot)の行数は反映有無の証拠にならない。実際に確認するのは次のいずれか。

# ブランチが触ったファイルだけを base と実比較する(差分ゼロなら反映済み)
cd <worktree>
git diff --name-only origin/main...HEAD > /tmp/f.txt
cat /tmp/f.txt | xargs git diff --name-status HEAD origin/main --

完了基準: 要判断だった全行が「削除可」「削除不可」のどちらかに移っている。判断がつかない行はユーザーに提示する。

4. 承認を取る

削除は破壊的操作。AGENTS.md「緩和しない安全項目」に従い、実行前にユーザー確認を取る(ユーザーが「確認不要」と明示した場合を除く)。

提示するもの: 削除対象の件数、リポジトリ別内訳、残すものとその理由、失われる未コミット変更の有無。

完了基準: ユーザーが対象範囲に同意している。

5. 退避してから削除

未コミット変更・untrackedがあるworktreeは、破棄前にpatchとtarで退避する。

git -C "$wt" diff > "$BK/$name.patch"
git -C "$wt" ls-files --others --exclude-standard > "$BK/$name.untracked.txt"
(cd "$wt" && tar czf "$BK/$name.untracked.tar.gz" -T "$BK/$name.untracked.txt")

ブランチを消す場合は 削除前にSHAを記録する。git branch <名前> <SHA> で復元できる唯一の手がかりになる(とくに CLOSED_PR のブランチは内容がbaseに存在しない)。

git -C "$repo" rev-parse "refs/heads/$br" >> "$BK/deleted-branches-sha.tsv"

削除の順序はworktree → ブランチ。worktreeが残っているブランチは削除できない。

git -C "$repo" worktree remove "$wt"        # dirty なら --force
git -C "$repo" branch -d "$br"              # squash マージ分は -D が必要

-D はmergeされていないコミットを失う破壊的操作。承認済みの範囲でのみ使う。

MERGED_ANCESTOR の行で -d が拒否されることがある。branch -d の基準がoriginではなくローカルHEADだからで、削除自体は安全(→ references/gotchas.md §6)。

完了基準: 退避ファイルが存在し、削除コマンドの失敗が0件。失敗した行は個別に原因を報告する。

6. 検証

git -C "$repo" worktree prune
git -C "$repo" worktree list
git -C "$repo" branch

git worktree remove はディレクトリ削除に失敗してもgit側のメタデータを先に消すことがある。その後 prune すると、git管理外の孤立ディレクトリだけが残る。worktree置き場に想定外のディレクトリが残っていないか実際に ls して確かめる。

完了基準: 残存worktree・ブランチが承認した内容と一致し、worktree置き場に孤立ディレクトリが無い。

判定の3段階

スクリプトが内部で行っていること。手で追う必要が出た時のために。

  1. 祖先判定 — git rev-list --count "$base..$ref" が0。merge commitで取り込まれたものはここで確定する
  2. PR state — 非該当を gh pr list --head "$br" --state all に通す。squash / rebaseマージはコミットSHAがbaseに存在しないため、ここでしか検出できない
  3. PR head一致 — MERGEDでも、PR作成後にローカルで積んだコミットが残っていることがある。headRefOid とローカルHEADを比較し、不一致なら HEAD_MISMATCH として要判断に分類する

Gotchas

判定を誤らせる既知のケースはreferences/gotchas.mdに集約してある。とくに次のどれかに当たったら読む。

  • three-dot diffの行数を根拠にしようとした時
  • NO_PR の統合ブランチ(マージコミットの塊)が出た時
  • HEAD_MISMATCH が出た時
  • 削除したはずのディレクトリが残っていた時

関連

  • worktreeの作成・命名・単一worktreeの片付け: context/worktree-guide.md
  • 破壊的操作の確認規定: AGENTS.md「緩和しない安全項目」
  • ブランチ命名・コミット規約: AGENTS.md「コミット・ブランチ・PR」

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

codebase-review

無料日本語概要

コードベース全体のレビュー・監査。perf/sec/test/arch/cq/docs の6観点を並列委譲し、優先度付き issue ファイルと観点サマリをメモリディレクトリに生成する。コードベース全体の監査・定期レビュー・リリース前品質確認の依頼時、/codebase-review 実行時に使用。境界: PR 単位は pr-review、自ブランチの提出前確認は self-review。

ukwhatn/.claude42026年10月12日 更新

commit

無料日本語概要

変更をコミットする。/commit 実行時、「コミットして」「pushして」等の依頼時に使用。--push 引数または「pushして」の依頼で push も行う。

ukwhatn/.claude42026年10月12日 更新

create-draft-pr

無料日本語概要

PR を Draft で作成する。PR テンプレートを全セクション埋め、対象 repo の既存 PR の分量に合わせて書きすぎを削る。PR 作成の依頼時、実装が一段落して PR 化する時、/create-draft-pr 実行時に使用(gh pr create を直接実行しない)。引数でベースブランチを指定できる。境界: 個別レビューコメントへの対応は pr-comment。

ukwhatn/.claude42026年10月12日 更新

create-skill

無料日本語概要

スキルを新規作成する。「スキルを作って」「この手順をスキル化して」等の依頼時、/create-skill 実行時に使用。AGENTS.md・context・既存スキルと整合させ、重複・競合を避ける。境界: 既存スキル・指示ファイルの修正は update-inst、指示ファイル全体の監査は instructions-audit。

ukwhatn/.claude42026年10月12日 更新

design-feature

無料日本語概要

抽象的な要件・事業側の要求を深掘りし、既存実装との整合を確認して実装マスタとシステム要件書を作成する。「こういう機能を作りたい」「この要求を満たす機能を設計して」等の抽象要件の提示時、既存機能の拡張や Phase 分割の要件定義開始時、/design-feature 実行時に使用。境界: 要件確定後の実装計画書・PR 分割と実装進行は plan-feature-prs。

ukwhatn/.claude42026年10月12日 更新

designing-ui

無料日本語概要

画面の設計判断(ナビゲーション・重ね方・通知と空状態と読み込み・外枠とトークンと状態表現)の型を決定表で選び、アプリ内の全画面で揃える。画面・ページ・レイアウト・ナビゲーション・ダイアログ・コンポーネントを新しく作る・作り直す時、モックやダッシュボードを作る時、サイドバー・タブ・モーダル・シート・toast・バナー・空状態のどれを使うか決める時に使用。PJ に components.json があれば shadcn の部品とトークンへの対応も扱う。主要なデザインシステム(Material・HIG・Carbon・Primer・Atlassian・Fluent・GOV.UK・NN/g・WAI-ARIA APG・WCAG)の一致点を規則にし、食い違いの採否を定めてある。境界: 画面の文言は writing-ui-text、画面に何を出すかと提示前の完了基準は context/ui-artifact-standards.md、コードの実装原則は writing-code、shadcn 部品の API と組み立ては shadcn。

ukwhatn/.claude42026年10月12日 更新

ukwhatn のスキルをすべて見る

このスキルの問題を報告する