sb-ship について
sb-shipは、StorybookのExplore実験を履歴として残しながら本番コンポーネントへ移行するスキルです。開発者向けに、移行方法の選択、ストーリーの検証、決定の記録、利用状況データの更新を案内します。
主な機能
- 01新規・既存コンポーネントの昇格
- 02Exploreストーリーの履歴保持
- 03本番ストーリーの検証
- 04決定の記録と確認
- 05コンポーネント利用状況の更新
活用シーン
- 01新しいExploreコンポーネントの昇格
- 02実験に基づくコンポーネント更新
- 03移行中の現役V1の維持
- 04公開後の利用状況更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ strongeron/ storybook-workbench --skill sb-shipインストール後、Claude Code で/sb-shipを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CONTEXT.mdagents/openai.yamlreferences/propagate-workflow.mdscripts/find-stories-by-tag.shvalidate-stories.shtemplates/design-decisions.md詳細
sb-ship — 履歴を保持して昇格させる
Explore のイテレーションが昇格条件を満たしたときにイベントトリガーされます。重要なルールは
1つだけです。実験を保持すること — cp を使い、git mv は使わないでください。 Explore のストーリーは設計履歴として残します。
ここでの git mv は、propagate-workflow.md が防ぐために存在する破壊的なバグです。Ship のアクションを実行する前に
references/propagate-workflow.md を読み込んでください — このスキルで必要なリファレンスはこれだけです。Ship では
sb-wrappers/sb-audit のリファレンス(ライフサイクル、ギャラリー、構成)は読み込まないでください。
パスを決める(自分に問いかける)
- Explore で独自のコンポーネントファイルを定義しましたか。それとも既存のものを反復しましたか。 → パス A とパス B のどちらかです。
- パス B:その場で進化させますか(B1)、それとも V1 を
_legacy/に残しますか(B2)。 B2 を選ぶのは、移行期間が必要な現行の呼び出し元が V1 にまだある場合だけです。 - インポートパスは変わりましたか。 変わった場合 → 呼び出し元を
ast-grepで検索します。変わっていない場合 → スキップします。 - 切り替えるべき、ほかのタグ付きストーリーはありますか。 (Compare の
decision:pendingをdecision:chosen+ 採用案に変更するなど。)
実行する
- パス A — 新規コンポーネント。 コンポーネントを Explore から components に
cpし、記録されているstoriesLocation(.storybook/audit/status.md。ルールはCONTEXT.md§STORIES LOCATION に記載されています — 分散させないでください)に新しい本番用ストーリーファイルを作成します — Explore のストーリーをcpしないでください(本番には異なる要件があります。autodocs、decision メタデータなし)。その後、検証し、パスが変わった場合に限り呼び出し元をast-grepで検索します。 - パス B — 既存のものを更新。 Explore での差分を、本番用コンポーネントとストーリーにその場で反映します。インポートパスが変わった場合に限り
ast-grepを実行します。 - どちらのパスでも — その場で一連の作業を完了する(
git mvは使わないでください):tags: ['explore','decision:chosen','archived','!autodocs','!test']+parameters.decision = { status, winner, date, shippedTo }。find-stories-by-tag.sh decision:chosenで確認します。
ゲートと次の手順
新しい本番用ストーリーに、同梱の scripts/validate-stories.sh を実行します(バンドル内:
${CLAUDE_PLUGIN_ROOT}/scripts/validate-stories.sh または
${CLAUDE_PLUGIN_ROOT}/scripts/)。scripts/find-stories-by-tag.sh decision:chosen で切り替わったことを確認します。決定を台帳(templates/design-decisions.md)に追記します。昇格した実験はそのまま残します。
使用状況のフローに戻ります。 昇格したコンポーネントは src/ に追加されたばかりです — まだレンダリング済みの JSON には含まれていないため、Docs の「実際の使用状況」セクションと storyCoverage は空欄です。1コマンドで使用状況を更新する処理(refresh-usage.sh。sb-audit/sb-inventory が管理)を実行し、新しいコンポーネントを component-usage.json
/ project-inventory.json に追加します。Storybook を再ビルドすると、実際の使用状況が表示されます。その後、/sb-hub を実行します。