storybook について
TypeScript と React のコンポーネントライブラリで Storybook 9+ を使うための、52 のルールを収録したリファレンススキルです。ストーリー設定、テスト、アクセシビリティ検査、ドキュメント、コンポーネントのライフサイクルに沿ったリリースを支援します。
主な機能
- 018 分野にわたる 52 のルール
- 02Storybook 設定と CSF3 作成の指針
- 03Args、コントロール、デコレーター、合成
- 04インタラクションテストとアクセシビリティ検査
- 05ドキュメント、デザインシステム、デプロイ
活用シーン
- 01React コンポーネントライブラリ向け Storybook の設定
- 02ストーリー作成とコントロール設定
- 03インタラクションテストとアクセシビリティ検査の実行
- 04デザインシステムの文書化とレビュー用ビルドの準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill storybookインストール後、Claude Code で/storybookを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdgotchas.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdargs-derive-from-component-props.mdargs-explicit-control-for-unions.mdargs-no-jsx-in-args.mdargs-pick-args-vs-parameters-vs-globals.mdargs-use-fn-for-callbacks.mdaxe-context-for-portals.mdaxe-disable-rules-not-stories.mdaxe-globals-manual-for-intentional-violations.mdaxe-restrict-runonly-to-wcag-aa.mdaxe-set-test-error-globally.mdbuild-cache-storybook-in-ci.mdbuild-chromatic-modes-multi-theme.mdbuild-deploy-static-build-to-shareable-host.mdbuild-manager-brand.mdbuild-prefer-vite-over-webpack.mdbuild-storybook-composition-refs.mdbuild-trim-test-bundle.mdconfig-add-addons-via-cli.mdconfig-narrow-stories-glob.mdconfig-pick-the-right-framework-package.mdconfig-static-dirs-not-bundler-imports.mdconfig-story-sort-for-large-libraries.mdconfig-tokens-css-vars-in-preview.mdconfig-typed-main-config.mdconfig-typed-preview.md詳細
dot-skills Storybook のベストプラクティス
TypeScript/React コンポーネントライブラリのワークショップ かつ テストベンチとして Storybook 9+ を使用するための包括的なガイドです。8 カテゴリにわたる 52 のルールを、デザインシステムにおけるコンポーネントのライフサイクル順に並べています。誤った .storybook/main.ts はすべてのストーリーに波及し、不正な CSF Meta はそのファイルの autodocs、コントロール、テスト、a11y パネルを利用できなくします。
このスキルの対象
- セットアップ —
main.ts、preview.ts、フレームワークの選択(Vite と Webpack、Next.js と React のみ)、CLI を使ったアドオンのインストール、staticDirs。 - ストーリーの作成(CSF3) —
satisfies Meta<typeof Component>、名前付きエクスポート=ストーリー、tags: ['autodocs']の配置、renderが適切な場合、ストーリーの命名規則。 - Args、argTypes、コントロール — 推論に頼る場合、
control: 'select'を宣言する場合、コールバックにstorybook/testのfn()を使う方法、args と parameters と globals の使い分け。 - デコレーターと合成 —
preview.tsのグローバルプロバイダー、ネットワークモック用の MSW、サブパスインポートのモジュールモック(Storybook 9+)、デコレーターのシグネチャに関する落とし穴。 - インタラクションテスト —
play関数、storybook/testのインポートパス(@storybook/testではありません)、canvas/userEventの分割代入、waitForよりfindBy*、CI 用のaddon-vitest、ポータブルストーリー。 - アクセシビリティ(
@storybook/addon-a11y経由のaxe-core) — 実際のゲートとしてのparameters.a11y.test = 'error'、ルール単位の無効化、対象とする WCAG に合わせたrunOnlyの範囲指定、ポータルのcontext、意図的な違反フィクスチャ用のglobals.a11y.manual。 - ドキュメントとデザインシステム — autodocs と MDX、
<Canvas of={...} />を使った MDX からのストーリー参照、ステータスタグ、ストーリーとしてのデザイントークン、parameters.designを使った Figma リンク。 - ビルドとデプロイ — Webpack より Vite、大規模なライブラリ向けのオンデマンドバンドル、デザイナーによるレビュー用の Chromatic/Vercel へのデプロイ、CI キャッシュの設定。
適用するタイミング
次のような場合にこのスキルを使用します。
storybookTestを読み込む*.stories.tsx、*.mdx、.storybook/main.ts、.storybook/preview.ts、vitest.config.tsを編集または作成するとき。- 新しいプロジェクトに Storybook をセットアップするとき(フレームワークの選択、
npx storybook initの後続作業)。 - アドオン(a11y、vitest、designs、msw)を追加またはアップグレードするとき。
play関数と Vitest アドオンを使ってコンポーネントテストを接続するとき。- 「Storybook が遅い」「コントロールが select ではなくテキストを表示する」「ダイアログで a11y パネルに何も表示されない」「play 関数が CI で不安定」といった問題を調査するとき。
次の場合はこのスキルを使わず、以下を使用してください。
- 基盤となるコンポーネント設計には
react-optimise/clean-code-ts-react。 - Storybook の外部での
render/screen/userEventの使い方にはreact-testing-library。 - 仕様そのものについては WCAG/ARIA のリファレンスドキュメント。このスキルでは
aria-labelledbyの役割を理解していることを前提とし、addon-a11yによるチェック方法を説明します。
優先度別ルールカテゴリ
順序はコンポーネントのライフサイクル(設定 → 作成 → 接続 → デコレート → テスト → 監査 → ドキュメント化 → リリース)を反映しています。先行する段階の影響は後続にも波及します。
| 優先度 | カテゴリ | 影響 | プレフィックス | ルール数 |
|---|---|---|---|---|
| 1 | セットアップと設定 | CRITICAL | config- | 8 |
| 2 | ストーリーの作成(CSF3) | CRITICAL | csf- | 8 |
| 3 | Args、ArgTypes、コントロール | HIGH | args- | 5 |
| 4 | デコレーターと合成 | HIGH | deco- | 7 |
| 5 | インタラクションテスト | HIGH | test- | 7 |
| 6 | アクセシビリティ(axe) | HIGH | axe- | 5 |
| 7 | ドキュメントとデザインシステム | MEDIUM-HIGH | docs- | 5 |
| 8 | ビルド、パフォーマンス、デプロイ | MEDIUM | build- | 7 |
クイックリファレンス
1. セットアップと設定(重要)
config-typed-main-config—satisfies StorybookConfigを使ってmain.tsに型を付けますconfig-pick-the-right-framework-package— ビルド環境に合ったフレームワークパッケージを使います(Next.js の場合は@storybook/nextjs-viteなど)config-narrow-stories-glob—storiesの glob をストーリーファイルだけに絞りますconfig-typed-preview— フレームワークのPreview型を使ってpreview.tsに型を付けますconfig-add-addons-via-cli— アドオンは手動ではなく、npx storybook addでインストールしますconfig-static-dirs-not-bundler-imports— バンドラーのインポートではなく、staticDirsでアセットを配信しますconfig-tokens-css-vars-in-preview— Style Dictionary/Tokens Studio の出力を CSS 変数としてpreview.tsに接続しますconfig-story-sort-for-large-libraries— デザインシステムのサイドバーではparameters.options.storySortで順序を設定します(基礎 → コンポーネント → パターン)
2. ストーリーの作成 — CSF3(重要)
csf-satisfies-meta-not-typed—: Meta<typeof Component>ではなく、satisfies Meta<typeof Component>を使いますcsf-prefer-args-over-render— 基本的にargsを使い、renderは複合ストーリー用にしますcsf-set-meta-component-explicitly— 常にmeta.componentを設定します(autodocs、controls、型はこれに依存します)csf-name-stories-by-state— prop の値ではなく、ユーザーに見える状態に基づいてストーリーに名前を付けますcsf-tags-autodocs-on-meta—tags: ['autodocs']はストーリーごとではなく、meta に設定しますcsf-co-locate-stories-with-component—Component.stories.tsxをComponent.tsxの隣に配置しますcsf-default-export-is-the-meta— デフォルトエクスポートは meta、名前付きエクスポートはストーリーですcsf-title-hierarchy-for-design-systems— Meta のtitle: 'Components/Inputs/Button'で分類します(基礎/コンポーネント/パターン/例)
3. Args、ArgTypes、Controls(高)
args-derive-from-component-props—argTypesは推論に任せ、推論できない項目だけを宣言しますargs-use-fn-for-callbacks— コールバックの args にはstorybook/testのfn()を使いますargs-explicit-control-for-unions— 推論できないユニオン型にはcontrolとoptionsを宣言しますargs-no-jsx-in-args—argsに JSX を記述せず、renderで JSX を組み立てますargs-pick-args-vs-parameters-vs-globals—argsはコンポーネントへの入力、parametersはアドオンの設定、globalsはツールバーの状態です
4. デコレーターと合成(高)
deco-global-providers-in-preview— Theme/QueryClient/Intl プロバイダーはpreview.tsに配置しますdeco-msw-for-network-mocks— MSW でネットワーク層をモックし、SDK はスタブ化しませんdeco-mock-modules-with-subpath-imports—package.json#importsを使ってネットワーク以外のモジュールをモックしますdeco-decorator-component-not-call— デコレーターは{story()}ではなく<Story />としてレンダリングしますdeco-context-aware-decorators— リアクティブなラッパーではcontextからglobalsとparametersを読み取りますdeco-themes-addon-for-multi-brand— マルチブランドの切り替えには@storybook/addon-themesのwithThemeByClassName/withThemeByDataAttributeを使いますdeco-rtl-direction-toggle— 双方向テキストのリグレッションテスト用に、すべてのストーリーをdir="rtl"でラップするツールバーのdir切り替えを用意します
5. インタラクションテスト(高)
test-import-from-storybook-test—@storybook/testではなくstorybook/testからインポートします(Storybook 9 以降)test-await-every-userevent-call—userEventの呼び出しはすべてawaitしますtest-use-canvas-from-play-arg— play 引数からcanvas/userEventを分割代入しますtest-fn-for-spied-callbacks—args: { onSubmit: fn() }を指定し、expect(args.onSubmit).toHaveBeenCalledWith(...)でアサートしますtest-findby-over-waitfor—waitFor+getByRoleよりfindByRoleを優先しますtest-vitest-addon-for-ci— 従来の test-runner ではなく、@storybook/addon-vitestを使って CI で play を実行しますtest-portable-stories-for-rtl—composeStoriesを使って、RTL/Vitest テストでストーリーを再利用します
6. アクセシビリティ — axe(高)
axe-set-test-error-globally—preview.tsでparameters.a11y.test = 'error'を設定し、実際のゲートとして機能させますaxe-disable-rules-not-stories— 特定のルールを無効にし、ストーリー全体にtest: 'off'を設定することは避けますaxe-restrict-runonly-to-wcag-aa—runOnlyの対象を WCAG の適合目標(通常は AA)に限定しますaxe-context-for-portals— ポータル内にレンダリングするコンポーネントにはparameters.a11y.contextを設定しますaxe-globals-manual-for-intentional-violations— 意図的に違反を含めるフィクスチャにはglobals.a11y.manual: trueを設定します
7. ドキュメントとデザインシステム(中〜高)
docs-autodocs-vs-mdx— コンポーネントのページには Autodocs、複数の領域にまたがるドキュメントには MDX を使いますdocs-mdx-references-stories— インラインレンダリングではなく<Canvas of={Story} />を使いますdocs-component-status-tags— ステータスタグとサイドバーのバッジでライフサイクルを示しますdocs-design-tokens-as-stories— ビジュアルリグレッション用に、トークンをストーリーとしてドキュメント化しますdocs-figma-link-via-design-addon—parameters.designを使って、各ストーリーを対応する Figma フレームにリンクします
8. ビルド、パフォーマンス、デプロイ(MEDIUM)
build-prefer-vite-over-webpack— レガシーな Webpack より Vite ベースのフレームワークパッケージを使用しますbuild-trim-test-bundle—main.tsのbuild.test設定で Vitest-addon のテストビルドを縮小しますbuild-deploy-static-build-to-shareable-host— すべての PR についてstorybook buildを Chromatic/Vercel にデプロイしますbuild-cache-storybook-in-ci— CI で Vite/Webpack と Playwright のレイヤーをキャッシュしますbuild-storybook-composition-refs—main.tsのrefsで複数パッケージのデザインシステムを 1 つのホスト Storybook に統合しますbuild-manager-brand—.storybook/manager.tsのcreate()でロゴ、ブランドリンク、サイドバーの配色を設定しますbuild-chromatic-modes-multi-theme— Chromatic のmodesで、すべてのストーリーをテーマ/ビューポート/方向ごとにスナップショットします
使い方
- カテゴリー構成と影響の根拠については、まず references/_sections.md を確認してください。
- 「Storybook をセットアップする」場合は、すべての
config-ルールを読んでからcsf-を読んでください。 - 「新しいストーリーを書く」場合は、
csf-とargs-を読んでください。 - 「ストーリーのテストをしたい」場合は、
test-とdeco-msw-for-network-mocksを読んでください。 - 「違反がある場合に a11y で CI を失敗させたい」場合は、すべての
axe-ルールを読んでください。 - 「デザインシステムをゼロから構築する」場合は、次の順に読んでください:
config-tokens-css-vars-in-preview、config-story-sort-for-large-libraries、csf-title-hierarchy-for-design-systems、deco-themes-addon-for-multi-brand、build-manager-brand、build-chromatic-modes-multi-theme。次に、ガバナンスとトークン表示のレイヤーについて、docs-component-status-tagsとdocs-design-tokens-as-storiesを読んでください。 - 「複数パッケージのモノレポ型デザインシステムがある」場合は、まず
build-storybook-composition-refsを読み、その後、上記のデザインシステム構築手順を読んでください。 - 「RTL/複数方向のカバレッジが必要」な場合は、
deco-rtl-direction-toggleを読んでからbuild-chromatic-modes-multi-themeを読み、ビジュアルリグレッションに RTL を組み込んでください。 gotchas.mdには、時間とともに判明した失敗パターンが記載されています。原因のわかりにくい問題をデバッグする前に、必ず確認してください。assets/templates/_template.mdを使って、新しいルールを追加してください。
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルールを追加するためのテンプレート |
| gotchas.md | 時間とともに蓄積された失敗パターン |
| metadata.json | バージョン、リファレンス、概要 |
関連スキル
clean-code-ts-react— 基盤となるコンポーネント設計の品質(命名、関数の形、抽象化)。react-testing-library— Storybook 以外で使用する場合の RTL クエリとパターン。web-interface-guidelines— ドキュメント化するコンポーネントに関する Vercel Web Interface Guidelines。
コメント
Markdown 対応