mcpField
F
finishing-a-development-branch

finishing-a-development-branch

github.com/izyanrajwani開発479 回インストール3 週間前に更新
リポジトリ

finishing-a-development-branch について

テスト確認からマージ、プルリクエスト作成、ブランチの維持・削除までを扱う開発ブランチ完了用スキルです。判断手順とブランチ、ワークツリーの後処理に関する安全策を定めています。

主な機能

  1. 01プロジェクトに応じて先にテストを実行
  2. 02ブランチの起点を特定
  3. 03完了方法を4つ提示
  4. 04ローカルマージまたはプルリクエスト作成
  5. 05破棄前に明示的な確認を要求
  6. 06必要に応じてワークツリーを整理

活用シーン

  1. 01機能ブランチの変更を統合前に検証
  2. 02実装後にプルリクエストを作成
  3. 03レビュー中にブランチを維持
  4. 04明示的な確認後にのみブランチを破棄

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/izyanrajwani/agent-skills-library --skill finishing-a-development-branch

インストール後、Claude Code で/finishing-a-development-branchを入力して読み込まれたか確認します。

詳細

開発ブランチを仕上げる

手順

ステップ 1:テストを検証する

プロジェクト構成からテストランナーを判定します。

  • package.json → npm test または yarn test
  • Cargo.toml → cargo test
  • pyproject.toml / setup.py → pytest
  • go.mod → go test ./...
  • test ターゲットを含む Makefile → make test

テストを実行します。失敗がある場合は、失敗数とともに ⊘ BLOCKED:TESTS を報告して終了します。ステップ 2 に進んではいけません。

ステップ 2:ベースブランチを判定する

この機能の分岐元となったブランチを特定します。

# Check which branch has the closest merge-base
for candidate in main master develop; do
  if git rev-parse --verify "$candidate" >/dev/null 2>&1; then
    MERGE_BASE=$(git merge-base HEAD "$candidate" 2>/dev/null)
    if [ -n "$MERGE_BASE" ]; then
      echo "Candidate: $candidate (merge-base: $MERGE_BASE)"
    fi
  fi
done

最も最近のマージベース(最も近い祖先)を持つ候補を選択します。複数のブランチが同じマージベースを共有している場合、または判定が曖昧な場合は、次のように尋ねます:「このブランチのマージ先は main または develop の可能性があります。どちらにマージしますか?」

結果を保存してください。以降のステップで参照する <base-branch> は、この判定結果を意味します。

ステップ 3:選択肢を提示する

次の 4 つの選択肢を正確に提示します。

Implementation complete. What would you like to do?

1. Merge back to <base-branch> locally
2. Push and create a Pull Request
3. Keep the branch as-is (I'll handle it later)
4. Discard this work

Which option?
ステップ 4:選択した項目を実行する
選択肢 1:ローカルでマージする
git checkout <base-branch>
git pull
git merge <feature-branch>

マージで競合が発生した場合:

⊘ BLOCKED:CONFLICTS

Merge conflicts in:
- <conflicted files>

Cannot auto-resolve. User must:
1. Resolve conflicts manually
2. Run tests
3. Re-run this workflow

終了します。先に進んではいけません。

マージに成功した場合:

# Verify tests on merged result
<test command>

# If tests pass, delete feature branch
git branch -d <feature-branch>

次に、作業ツリーをクリーンアップします(ステップ 5)。✓ MERGED を報告します。

選択肢 2:プッシュして PR を作成する

gh CLI が利用可能であることを確認します:

if ! command -v gh &>/dev/null; then
  echo "gh CLI not installed. Install from https://cli.github.com/ or push manually and create PR via web."
  exit 1
fi
gh auth status || echo "gh not authenticated. Run: gh auth login"

ブランチの最初のコミットからタイトルを抽出します(元の意図)。

MERGE_BASE=$(git merge-base HEAD <base-branch>)
TITLE=$(git log --reverse --format=%s "$MERGE_BASE"..HEAD | head -1)
git push -u origin <feature-branch>
gh pr create --title "$TITLE" --body "$(cat <<'EOF'
## Summary
<2-3 bullets of what changed>

## Test Plan
- [ ] <verification steps>
EOF
)"

PR の URL とともに ✓ PR_CREATED を報告します。レビュー中も作業を続けられるよう、作業ツリーはそのまま保持します。

選択肢 3:現状のまま保持する

ブランチ名と作業ツリーのパスを添えて ✓ PRESERVED を報告します。

作業ツリーをクリーンアップしてはいけません。

選択肢 4:破棄する

最初に確認します:

This will permanently delete:
- Branch <name>
- All commits: <commit-list>
- Worktree at <path>

Type 'discard' to confirm.

正確な確認を待ちます。確認が得られない場合は中止します。

確認が得られた場合:

git checkout <base-branch>
git branch -D <feature-branch>

次に、作業ツリーをクリーンアップします(ステップ 5)。✓ DISCARDED を報告します。

ステップ 5:作業ツリーをクリーンアップする

選択肢 1 と 4 のみ:

# Check if currently in a worktree (not main repo)
if [ "$(git rev-parse --git-common-dir)" != "$(git rev-parse --git-dir)" ]; then
  # Get worktree root (handles invocation from subdirectory)
  WORKTREE_ROOT=$(git rev-parse --show-toplevel)
  cd "$(git rev-parse --git-common-dir)/.."
  git worktree remove "$WORKTREE_ROOT"
fi

選択肢 2 と 3: 作業ツリーをそのまま保持します。

クイックリファレンス

選択肢マージプッシュ作業ツリーを保持ブランチをクリーンアップ
1. ローカルでマージ✓--✓
2. PR を作成-✓✓-
3. 現状のまま保持--✓-
4. 破棄---✓(強制)

終了状態

完了時に、次のいずれか 1 つを正確に報告します。

状態出力意味
✓ MERGEDブランチを <base> にマージし、作業ツリーをクリーンアップ済み選択肢 1 の成功
✓ PR_CREATEDURL に PR #N を作成済み選択肢 2 の成功
✓ PRESERVEDブランチをパスに保持済み選択肢 3 の成功
✓ DISCARDEDブランチを削除し、作業ツリーをクリーンアップ済み選択肢 4 の成功
⊘ BLOCKED:TESTSN 件のテスト失敗続行不可
⊘ BLOCKED:CONFLICTSファイルでマージ競合が発生続行不可

ガードレール

ブロック条件(直ちに停止):

  • テスト失敗 → ⊘ BLOCKED:TESTS
  • マージ競合 → ⊘ BLOCKED:CONFLICTS

必須の確認:

  • 選択肢 4(破棄):入力された「discard」の確認が必要です

クリーンアップのルール:

  • 選択肢 1、4:作業ツリーとブランチをクリーンアップします
  • 選択肢 2、3:作業ツリーを保持します

禁止事項:

  • テストが失敗した状態で続行する
  • 結果に対するテストを検証せずにマージする
  • 入力による確認なしに作業内容を削除する
  • 明示的な依頼なしに強制プッシュする

統合

呼び出し元:

  • subagent-driven-development(ステップ 7)- すべてのタスク完了後
  • executing-plans(ステップ 5)- すべてのバッチ完了後

連携先:

  • using-git-worktrees - そのスキルで作成された作業ツリーをクリーンアップします

コメント