Communitygithub.com

lguidolin/ship-it

ユーザーが作業を出荷したいときに使用 – プッシュ、PR、決定記録のアーカイブ、マージ、後片付けを行います。最終変更のコミットからマージ後のクリーンアップまで、仕様や計画をコンパクトな決定記録に変換する全ライフサイクルを処理します。

ship-it とは?

**Ship It** は、変更作業の「出荷」プロセス全体を自動化するAIエージェントスキルです。ユーザーが「push」「ship it」「open a PR」などと指示した際に、テストスイートの検証、ブランチ作成、コミット、プッシュ、プルリクエスト(PR)の作成、マージ後の決定記録アーカイブ、そしてブランチのクリーンアップまでを一貫して実行します。主なユースケースは、開発ブランチでの実装完了後に、レビュー可能なPRを整え、マージ後にそれまでの仕様・計画をLLMに最適化されたコンパクトな決定記録に変換し、プロジェクトのドキュメントを整理することです。内部では `conventional-commits` と `finishing-a-development-branch` といった他のスキルと協調し、環境検出やブランチ管理の複雑なケース(通常のリポジトリ、名前付きブランチのワークツリー、detached HEAD)を適切に処理します。テストが失敗している場合はPRを作成しない、メインへの直接プッシュは行わない、マージ前にアーカイブしないなど、厳格なポリシーに従い、品質とプロセスを担保します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lguidolin/agent-skills/tree/main/skills/ship-it

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Ship It

出荷の完全なライフサイクルを処理します: ステージング、コミット、プッシュ、PRのオープン、マージ後の決定記録のアーカイブ、クリーンアップ。

概要

すべての変更はブランチとPRを経由します。 メインに直接プッシュすることは決してありません。このスキルは、マージ後のドキュメントアーカイブを含む、完全なラップアップサイクルを処理します。

コミットメッセージはドキュメントです。 PRタイトルはメインへのスカッシュマージコミットになり、チェンジログに表示されます。PR作成時に正しく設定しましょう。

マージ後にアーカイブし、決して前にしません。 仕様と計画はPRがマージされるまでアクセス可能です。マージ後にのみ、それらをコンパクトな決定記録に変換します。

使用するタイミング

  • ユーザーが「push」「ship it」「let's ship」「open a PR」「create a PR」と言ったとき
  • PRがオープンされた後、ユーザーが「merged」「it's merged」「pull and cleanup」と言ったとき
  • ユーザーが実装を完了し、まとめたいとき
  • 計画を完了し、次のステップとして作業を提出するとき

使用すべきでないタイミング

  • ユーザーが明示的にメインに直接プッシュしたい場合(まず意図的であることを確認してください)
  • リポジトリにリモートが設定されていない場合
  • ユーザーがまだプッシュする準備ができていない作業中の変更の場合
  • ユーザーが出荷せずにコミットだけしたい場合(conventional-commits-and-releases を使用してください)

プロセス

フェーズ0: 検証と検出

レッドスイートは決してPRになりません。 プロジェクトの完全なテストスイートを最初に実行します。何か失敗した場合は、失敗を報告して停止します — コミット、プッシュ、PRのオープンは行いません。このゲートはハウスポリシーであり、委任されません。

環境検出(通常のリポジトリ vs. 名前付きブランチのワークツリー vs. detached HEAD)とベースブランチの決定は、superpowers:finishing-a-development-branch に委任されます。このスキルは既に3つのケースすべてを処理しています。

正しい方法で利用可能性を確認します:自身の利用可能なスキルリストで finishing-a-development-branch を探します。 リストにあれば呼び出し可能です。リストになければ呼び出せません — フォールバックに進みます。

ファイルシステムを調査してはいけません。~/.claude/plugins/cache/ には、これまでにフェッチされたすべてのバージョンが保存されていますが、インストールされているが無効なプラグインも含まれ、スキルはプラグインキャッシュ以外のメカニズムでも提供される可能性があります。キャッシュ下にパスが存在することは、スキルを呼び出せるかどうかの証明にはなりません。

利用可能な場合 — テスト検証、環境検出、ベースブランチ決定のためにそれを呼び出し、そのオプションメニューの前で停止します。

統合の決定はハウスルールによって既に確定しており、ユーザーが再決定するものではありません:このプロジェクトはPRを通じてのみマージします。なぜならPRがプレビューデプロイメントを生成し、CIゲートとなるからです。その 「ローカルで <base> にマージバックする」 オプションは利用できません。その 「ブランチをそのまま保持する」 オプションは有効です — それは先延ばしにする決定であり、ゲートを迂回するものではありません。

見つからない場合 — フォールバックします。正当性をゲートするものは失われません:

  • テストスイートを直接実行します。
  • ブランチの上流、またはmainをベースとして扱い、続行する前にユーザーに確認します。
  • フェーズ6でのワークツリークリーンアップをスキップし、通常どおりブランチを削除します。

フェーズ1: ステージ & コミット

git status --short
git branch --show-current
git log --oneline @{upstream}..HEAD 2>/dev/null || echo "No upstream set"

決定ツリー:

  • main上に未コミットの変更がある場合 → ブランチを作成、コミット、プッシュ、PR
  • フィーチャーブランチ上に未コミットの変更がある場合 → コミット、プッシュ、PR(または既存PRを更新)
  • フィーチャーブランチ上に未プッシュのコミットがある場合 → プッシュ、PR(または既存PRを更新)
  • フィーチャーブランチ上に既存PRがある場合 → プッシュ(PRは既に存在)

ステージングされていない変更がある場合:

  • ユーザーにすべての変更を含めるか、特定のファイルか尋ねます。
  • 変更が複数の関心事にまたがる場合は、分割を提案します。

コミットメッセージを作成します:

タイプ使用タイミング
feat新しい機能
fixバグ修正
docsドキュメントのみ
chore設定、依存関係、ツーリング
refactorコード再構築、動作変更なし
testテストの追加または変更
ciCI/CDワークフロー変更

フォーマット: <type>[optional scope]: <imperative description>

ルール:

  • 命令形(「added」や「adds」ではなく「add」)
  • コロンの後の最初の単語は小文字
  • 末尾にピリオドなし
  • 短く(件名は50文字以下)
  • 何を行うかを記述し、どのようには記述しない

提案されたコミットメッセージをユーザーに提示し、コミット前に確認を得ます。

フェーズ2: ブランチ & プッシュ

main上にいる場合、ブランチを作成します:

<type>/<short-description>

例:

  • feat/oauth-login
  • fix/null-response-handling
  • docs/release-workflow-permissions

プッシュ:

git push -u origin $(git branch --show-current)

フェーズ3: PRを開く

PRタイトル = conventional commit メッセージ(mainへのスカッシュマージに使用されます)。

PR本文の構造:

## What changed

[追加/変更/削除の具体的な説明]

## Why

[動機 — これが解決する問題は何か?]

gh CLIを使用して作成:

gh pr create --title "<conventional commit message>" --body "<PR body>"

ghが利用できない場合は、git push出力からPR URLを提供するか、構築します。

プレビュー環境が立ち上がったことを確認します。 プロジェクトがPRごとにプレビューをデプロイする場合、そのワークフローを待ち、PRを引き渡す前に環境が到達可能であることを確認します:

gh pr checks --watch

プレビューのデプロイに失敗した場合は、報告して停止します。誰もレビューできないPRは出荷されません。

このスキルが停止する場所。 ship-it はプレビューまででデプロイメント認識を終了します。ステージングや本番へのプロモーションはこのスキルの仕事ではありません — それらはプロジェクトのデリバリースキル(cloud-delivery-aks、または同等のもの)に属します。以下のフェーズ4〜6はgitとドキュメントの衛生管理であり、デプロイメントではありません。

フェーズ4: マージを待つ

PR作成後、「マージされたら教えてください。クリーンアップとアーカイブを行います。」と尋ねます。

ユーザーの確認(例: 「merged」「done」「it's merged」)を待ちます。

フェーズ5: マージ後 — 決定記録のアーカイブ

仕様と計画は設計上冗長です — 人間が履歴を読むには良いですが、Claudeが読み込むたびにコストがかかります。それらをコンパクトな決定記録に変換することで、本質的な決定を安価に読み取れるようにし、完全なナラティブはディスク上にアーカイブされたまま、誰かが意図的に開くまでコストをかけません。

PRがマージされた後にのみ、未変換の仕様/計画がないか確認します:

ls docs/superpowers/specs/ 2>/dev/null
ls docs/superpowers/decisions/ 2>/dev/null

recording-decisions スキルには、このための2つのヘルパーが含まれています。それらを見つけます — スキルはプロジェクトまたはグローバルにインストールされている可能性があります:

for base in .claude/skills ~/.claude/skills; do
  d="$base/recording-decisions/scripts"
  [ -d "$d" ] && echo "$d" && break
done

見つかった場合、$d/doc-archive.sh は未変換の仕様をリストし、変換プロンプトを出力します。また $d/index-rebuild.sh はインデックスを再生成します。見つからない場合は、以下の手順を使用して同じ作業を手動で行います — これらは自己完結型です。

未変換の仕様/計画が存在する場合:

  1. ユーザーに尋ねます:「この作業に対応する仕様/計画が見つかりました。コンパクトな決定記録に変換し、オリジナルをアーカイブしますか?」

  2. 「はい」の場合、各仕様について:

    • 仕様の内容を読み取ります
    • YAMLフロントマター付きの決定記録を生成します:
      ---
      title: <仕様から抽出>
      date: <仕様のファイル名から>
      component: <内容から推測>
      status: implemented
      supersedes: null
      dependencies: [<推測>]
      ---
      
    • 約30〜50行を書き、以下を捕捉します: 主要な決定、インターフェース、制約
    • docs/superpowers/decisions/<date>-<topic>.md に保存します
    • 元の仕様を docs/superpowers/archive/specs/ に移動します
    • 対応する計画を docs/superpowers/archive/plans/ に移動します
  3. マスターインデックスを再構築します — すべての決定記録のフロントマターから docs/superpowers/index.md を再生成し、アクティブな決定テーブル(コンポーネント、タイトル、日付、依存関係)と置き換えられたテーブル(コンポーネント、タイトル、置き換え元)にグループ化します。上記で見つけた場合は $d/index-rebuild.sh を実行し、それ以外は直接ファイルを書き込みます。

  4. アーカイブをコミットします:

    git add docs/superpowers/
    git commit -m "docs: archive specs and update decision index"
    git push
    

フェーズ6: クリーンアップ

git checkout main
git pull
git branch -d <branch-name>
git push origin --delete <branch-name> 2>/dev/null || true
git fetch --prune

クリーンな状態を確認:

git branch --show-current
git log --oneline -3

作業がgitワークツリーで行われた場合、解体を superpowers:finishing-a-development-branch に委任します(そのプロベナンスベースのクリーンアップ — 自身が所有するワークツリーを認識し、外部管理のものはそのままにします)。そのスキルが利用できない場合は、git worktree remove <path> で手動でワークツリーを削除し、事前にユーザーに確認します。

主要原則

  • レッドスイートは決してPRになりません — 何よりも先に検証(フェーズ0)
  • メインに直接プッシュしない — 常にブランチ + PR。PRはプレビューデプロイメントでありCIゲートです。ローカルマージは両方をスキップします。これは、ローカルマージを選択肢として提供するワークフローを上書きします。
  • 出荷はプレビューで終了 — マージ、アーカイブ、クリーンアップは衛生管理。ステージングと本番へのプロモーションは別のスキルの仕事
  • Conventional Commits — PRタイトルがチェンジログエントリ
  • マージ後にのみアーカイブ — レビュー中は仕様にアクセス可能
  • 決定記録はコンパクト — 約30〜50行、YAMLインデックス、LLM最適化
  • 完全にクリーンアップ — 古いブランチや追跡参照を残さない

Individual skills in this repo

This repo contains 18 individual skills — each has its own dedicated page.

lguidolin/change-hygiene-and-code-craft

Use when writing or refactoring code, structuring a commit or PR, or deciding whether to abstract duplication. Symptoms — mixing reorg with logic changes, a PR doing several things at once, a file growing large, the second copy of similar code, or unsure whether to DRY something up.

lguidolin/cloud-delivery-aks

Use when deploying to Kubernetes or Azure Kubernetes Service (AKS), configuring cloud secrets, setting up progressive rollout/canary, per-PR ephemeral environments, or k8s health probes. Keywords — Kubernetes, AKS, Key Vault, Argo Rollouts, Flagger, canary, blue-green, liveness, readiness, PodDisruptionBudget, HPA, rollback, GHCR.

lguidolin/commit-history-rewrite

Use when an existing repository has messy commit history that needs to conform to conventional commits before adopting release-please, or when intermediate WIP/fixup/merge commits need to be cleaned up.

lguidolin/conventional-commits-and-releases

Use when committing, writing a commit message, opening a PR that will be squash-merged, or configuring automated versioning/changelogs. Keywords — conventional commits, release-please, semver, feat/fix/chore, breaking change, changelog.

lguidolin/defense-in-depth-security

Use when handling untrusted input, secrets, authentication/authorization, or dependencies — or threat-modeling a new surface. Keywords — STRIDE, threat model, least privilege, secrets management, supply chain, dependency scanning, input validation, audit log, defense in depth.

lguidolin/designing-before-building

Use when starting a feature, fixing a non-trivial bug, or about to write implementation code — before any code exists. Symptoms you need this: "this is simple, I'll just code it", reaching for the editor before a design is approved, or an idea that hasn't been turned into a spec and plan.

lguidolin/engineering-constitution

Use when starting work in a project that follows the engineering constitution, orienting to its rules, or deciding which engineering practice applies to a task — spec writing, commits, testing, security, deploys, database, or UI work.

lguidolin/graphql-contract-testing

Use when writing a GraphQL query/mutation that the UI and a test will share, or building route/schema contract or smoke tests. Symptoms — copying a query into a test, a test asserting on query text, schema change that didn't break the UI build, or RLS/permission drift. Keywords — graphql-codegen, typed document, contract test, route smoke test.

lguidolin/init-repo-CI

Use when setting up a new repository with conventional commits, release-please, and CI automation, or when retrofitting an existing repository that lacks automated versioning and PR validation workflows.

lguidolin/interface-craft-and-accessibility

Use when building or styling UI — components, layouts, forms, design tokens — or making accessibility decisions. Keywords — a11y, WCAG, keyboard navigation, focus state, contrast, design system, minimalist UI, component reuse, ARIA, semantic HTML.

lguidolin/merge-gates-and-automation

Use when setting up or changing CI, pre-push hooks, or a task runner, or deciding what must pass before merge. Symptoms — tempted to put authoritative checks only in a local hook, skip CI, bypass with --no-verify, or unsure what gates a merge vs. runs locally.

lguidolin/observability-and-slos

Use when adding logging, metrics, tracing, health checks, SLOs, or alerting — or when building a service surface that needs to be operable and debuggable. Keywords — structured logs, OpenTelemetry, correlation id, RED metrics, liveness, readiness, SLI, SLO, error budget, alerting.

lguidolin/performance-and-scale

Use when working on hot paths, list endpoints, pagination, data-access in loops, or public interfaces/schemas. Symptoms — unbounded queries, N+1 access, no latency budget, optimizing without measuring, or changing an interface many consumers depend on. Keywords — pagination, N+1, Hyrum's Law, performance budget, bundle size.

lguidolin/postgres-postgraphile-rls-and-sql

Use when writing PostgreSQL, PostGraphile config, Row-Level Security policies, SQL schema files, or working on the Browser→App→PostGraphile→Postgres data path. Keywords — RLS, SECURITY DEFINER, search_path, pgSettings, grants, roles, GraphQL depth limit, query cost, statement_timeout, SQL file organization.

lguidolin/recording-decisions

Use when a design or architecture decision has been made and needs to be captured — writing a decision record or ADR, updating a decision index, noting a deferred idea, or superseding a past decision. Keywords — ADR, decision record, rationale, rejected alternatives, dependency index.

lguidolin/resilience-and-deploy-safety

Use when planning a deploy, designing a rollback, or responding to an incident or writing a postmortem. Keywords — deploy safety, rollback, immutable artifact, progressive delivery, canary, blast radius, incident response, blameless postmortem, error budget.

lguidolin/tests-as-a-control

Use when writing or modifying tests, when a test breaks during a refactor, or when testing permission/role rules. Symptoms — tempted to edit a test to make it pass, testing only the happy path, a deny-test that started passing, flaky tests, or unsure what to assert.

lguidolin/zero-downtime-migrations

Use when changing a database schema where data must survive the change — adding/removing/renaming columns, constraints, indexes, or backfilling. Symptoms — a destructive migration bundled with a code deploy, a NOT NULL column with a backfill, a table-locking UPDATE, or a rename. Keywords — expand/contract, parallel change, backfill, NOT VALID, CREATE INDEX CONCURRENTLY, graphile-migrate.

関連スキル