ship について
ship は、フィーチャーブランチをプルリクエストまたはローカルマージで対象ブランチに統合する開発スキルです。検証、統合方法の選択、レビュー要件、ワークツリーのクリーンアップを案内します。
主な機能
- 01統合前の検証
- 02CI 状態に応じた PR またはローカルマージの選択
- 03ローカルマージ前のコードレビュー
- 04統合後のワークツリー整理
活用シーン
- 01PR を作成して自動マージを設定
- 02CI 停止時のローカルマージ
- 03ブランチの維持または確認後の破棄
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ camacho/ ai-skills --skill shipインストール後、Claude Code で/shipを入力して読み込まれたか確認します。
詳細
Ship
ブランチを main に取り込みます。方法は 2 つです。PR(CI が稼働中)またはローカルマージ(CI が停止中)です。
告知: 「/ship を使用してこのブランチを統合します。」
前提条件
- フィーチャーブランチにいること(main ではない)。
/review(ステップ 6)に合格しているか、ユーザーが明示的に承認していること。- 作業ツリーのパスが分かっていること(クリーンアップに必要です)。
- 未完了のタスクがないこと。
TaskList(Claude Code)を実行するか、.branch-context.mdのチェックリスト(Codex)を確認してください。いずれかの手順がpendingまたはin_progressの場合、その手順はスキップされています。出荷する前に戻って完了させてください。
前提条件が不足している場合は、不足しているものを伝えて停止してください。
Step 1: 検証
pnpm validate
検証に失敗した場合は停止してください。まず修正してください。
Step 2: 対象ブランチを決定する
次の順で解決します(最初に成功したものを使用します)。
- プランファイルの frontmatter — プランが存在する場合は、
ai-workspace/plans/<name>.mdからTarget:フィールドを読み取ります。 - reflog の親 — ブランチの reflog には、作成元のブランチが記録されています。
TARGET=$( git -C <worktree> reflog show HEAD --pretty=format:'%gs' \ | grep "^branch: Created from" \ | head -1 \ | sed 's/branch: Created from //' \ | sed 's|^origin/||' ) - リモート HEAD —
git -C <worktree> symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' - デフォルトの
main— 最後のフォールバックです。情報源によって異なる場合は確認してください。
Step 3: 選択肢を提示する
CI の状態は会話の文脈に基づきます。ユーザーが CI は停止中、凍結中、または課金上限に達していると言った場合は、停止中として扱ってください。自動検出は行いません。
CI 稼働中(デフォルト):
Ready to ship.
1. Open PR + auto-merge
2. Keep branch as-is
3. Discard
CI 停止中:
Ready to ship (CI down — local merge with review gate).
1. Local merge to main
2. Keep branch as-is
3. Discard
Option 1a: PR + 自動マージ(CI 稼働中)
git -C <worktree> push -u origin <branch>
GH_REPO=<owner/repo> gh pr create \
--base "$TARGET" \
--title "<conventional-commit-title>" \
--body "$(cat <<'EOF'
## Summary
<2-3 bullets>
## Test plan
- [ ] <verification steps>
EOF
)"
GH_REPO=<owner/repo> gh pr merge --auto --merge
PR の URL を報告します。その後、作業ツリーのクリーンアップに進みます。
PR 作成後に CI がブロックまたは失敗した場合: 停止してユーザーに確認してください。独自に復旧したり、ローカルマージに切り替えたり、強制マージしたりしないでください。
Option 1b: ローカルマージ(CI 停止中)
まず差分に対して code-reviewer エージェントを実行してください。すべての自律的なコードは、マージ前にレビューする必要があります。
claude --agent code-reviewer "Review diff: git -C <worktree> diff $TARGET..HEAD"
レビュアーが P0/P1 の指摘を返した場合は停止してください。先に修正してください。
BRANCH=<branch>、TARGET=$TARGET、PRIMARY=<primary-worktree-path>、MESSAGE="merge: <branch> into $TARGET" を指定して /local-merge を呼び出してください。浅いクローン、リトライ付きのプッシュ、プライマリへの非破壊的な反映を処理します。
Option 2: 現状維持
次のように報告します。「ブランチ <name> を維持します。作業ツリーは <path> に保持されています。」
クリーンアップは行わないでください。
Option 3: 破棄
「discard」と入力して確認するよう求めてください。ブランチ名、コミット一覧、作業ツリーのパスを表示します。
git -C <primary> worktree remove <worktree-path>
git -C <primary> branch -d <branch>
branch -d が失敗した場合(未マージの作業がある場合)、ユーザーに警告して停止してください。branch -D は使用しないでください。ローカルの削除が成功した後に限り、リモートブランチを削除してください。
git push origin --delete <branch>
Worktree Cleanup
PR(1a)またはローカルマージ(1b)の後:
# Unlock first (matches the lock applied by /isolate)
git -C <primary> worktree unlock <worktree-path> 2>/dev/null || true
git -C <primary> worktree remove <worktree-path>
その後、git-trim がインストールされている場合は、ローカル参照から不要になったブランチを整理してください(squash マージ、rebase マージ、[gone] の upstream のケースに対応します)。
if command -v git-trim >/dev/null 2>&1; then
git -C <primary> trim --delete
fi
| 方法 | 作業ツリーをクリーンアップするか |
|---|---|
| PR + 自動マージ | はい |
| ローカルマージ | はい |
| 破棄 | はい(破棄の手順内で実施) |
| 現状維持 | いいえ |
Integration
呼び出し元: /task(ステップ 8) 関連: /isolate(作成した作業ツリーをクリーンアップ)、/review(/ship の前に合格必須)