mcpField
S
ship

ship

github.com/camacho開発388 回インストール
リポジトリ

ship について

ship は、フィーチャーブランチをプルリクエストまたはローカルマージで対象ブランチに統合する開発スキルです。検証、統合方法の選択、レビュー要件、ワークツリーのクリーンアップを案内します。

主な機能

  1. 01統合前の検証
  2. 02CI 状態に応じた PR またはローカルマージの選択
  3. 03ローカルマージ前のコードレビュー
  4. 04統合後のワークツリー整理

活用シーン

  1. 01PR を作成して自動マージを設定
  2. 02CI 停止時のローカルマージ
  3. 03ブランチの維持または確認後の破棄

インストール

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

$npx skills add https://github.com/camacho/ai-skills --skill ship

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

詳細

Ship

ブランチを main に取り込みます。方法は 2 つです。PR(CI が稼働中)またはローカルマージ(CI が停止中)です。

告知: 「/ship を使用してこのブランチを統合します。」

前提条件

  1. フィーチャーブランチにいること(main ではない)。
  2. /review(ステップ 6)に合格しているか、ユーザーが明示的に承認していること。
  3. 作業ツリーのパスが分かっていること(クリーンアップに必要です)。
  4. 未完了のタスクがないこと。 TaskList(Claude Code)を実行するか、.branch-context.md のチェックリスト(Codex)を確認してください。いずれかの手順が pending または in_progress の場合、その手順はスキップされています。出荷する前に戻って完了させてください。

前提条件が不足している場合は、不足しているものを伝えて停止してください。

Step 1: 検証

pnpm validate

検証に失敗した場合は停止してください。まず修正してください。

Step 2: 対象ブランチを決定する

次の順で解決します(最初に成功したものを使用します)。

  1. プランファイルの frontmatter — プランが存在する場合は、ai-workspace/plans/<name>.md から Target: フィールドを読み取ります。
  2. 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/||'
    )
    
  3. リモート HEAD — git -C <worktree> symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'
  4. デフォルトの 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 の前に合格必須)

コメント