用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Fandhe-AI/template-frontend-react_router --skill create-component命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Chakra UI v3 API リファレンス。 コンポーネント, レイアウト, フォーム, オーバーレイ, チャート, テーマ, レシピ, スタイルプロップ, レスポンシブ, ダークモード, ブロック (Chakra UI Pro テンプレート)
Feature Sliced Design (FSD) の新しいスライスを作成する。パッケージ構造、tsconfig、package.json を自動生成する
Biome (formatter/linter) API リファレンス。 biome.json, biome check, biome lint, biome format, ルール設定, eslint/prettier 移行, suppressions
基于 SOC 职业分类
正在显示 SKILL.md
| name | create-component |
| description | UI コンポーネントを新規作成する。配置先パッケージの決定、Chakra UI 統合、FSD 規約に準拠したコンポーネントを生成する |
| argument-hint | <component-name> [--package <package>] [--client] [--chakra] (例: badge, accordion --chakra --client) |
UI コンポーネントを新規作成する。
/create-component <component-name> [options]
$ARGUMENTS[0]: コンポーネント名(kebab-case、例: badge, accordion, breadcrumb)--package <package>: 配置先パッケージ(例: shared-ui, widgets-header)。省略時は自動判定--client: "use client" を付与する--chakra: Chakra UI コンポーネントをベースにする--package が指定されていない場合、以下のルールで配置先を決定する:
| コンポーネントの種類 | 配置先パッケージ | 例 |
|---|---|---|
| 汎用 UI パーツ(Button, Badge, Card 等) | @repo/shared-ui | packages/shared/ui/ |
| 特定ドメインの UI | 該当レイヤーのスライス | packages/widgets/<slice>/ |
判断に迷う場合はユーザーに確認する。
配置先パッケージが存在しない場合は、先に /create-slice でスライスを作成するか、shared パッケージを手動で作成する。
component-analyzer エージェントに分析を委譲する:
--chakra オプションの情報all(再利用候補 + パターン参照 + 共通コード検出)分析結果に基づいて:
chakra-ui MCP でコンポーネント情報を取得する分析結果の「推奨事項」に従い、Step 3 のテンプレート選択と実装に反映する。
以下のファイル構成で作成する:
packages/<path>/src/ui/<component-name>/
├── index.tsx # コンポーネント本体
├── index.stories.tsx # Storybook stories
└── index.test.tsx # Vitest テスト
import type { ComponentProps } from "react";
interface Props extends ComponentProps<"div"> {}
/**
* コンポーネントの概要(1 文)。
*
* @example
* ```tsx
* <ComponentName />
* ```
*
* @category UI
*/
const ComponentName = ({ className, ...rest }: Props) => {
return <div className={className} {...rest} />;
};
export default ComponentName;
--chakra 指定時)Chakra UI MCP(mcp__chakra-ui__get_component_example 等)でコンポーネント情報を取得し、プロジェクトの規約に合わせてラップする。
"use client";
import { Box } from "@chakra-ui/react";
import type { ComponentProps } from "react";
interface Props extends ComponentProps<typeof Box> {}
/**
* コンポーネントの概要(1 文)。
*
* @remarks
* Chakra UI ベースのコンポーネント。
*
* @example
* ```tsx
* <ComponentName />
* ```
*
* @category UI
*/
const ComponentName = (props: Props) => {
return <Box {...props} />;
};
export default ComponentName;
import type { Meta, StoryObj } from "storybook";
import ComponentName from ".";
const meta = {
title: "ui/ComponentName",
component: ComponentName,
} satisfies Meta<typeof ComponentName>;
export default meta;
type Story = StoryObj<typeof meta>;
/**
* デフォルト表示。
*/
export const Default: Story = {};
--chakra 指定時:
"use client";
import type { Meta, StoryObj } from "storybook";
import ComponentName from ".";
const meta = {
title: "ui/ComponentName",
component: ComponentName,
} satisfies Meta<typeof ComponentName>;
export default meta;
type Story = StoryObj<typeof meta>;
/**
* デフォルト表示。
*/
export const Default: Story = {};
import { cleanup, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, test } from "vitest";
import ComponentName from ".";
describe("ComponentName", () => {
afterEach(() => {
cleanup();
});
test("正しくレンダリングされる", () => {
render(<ComponentName />);
expect(screen.getByRole("...")).toBeInTheDocument();
});
});
Note:
getByRole("...")のロールは実際のコンポーネントに合わせて変更する。
複数パーツがある場合はパーツごとにファイルを分割する:
packages/<path>/src/ui/<component-name>/
├── index.tsx # 名前空間 export(import * as Xxx from "...")
├── index.stories.tsx # Storybook stories
├── index.test.tsx # Vitest テスト
├── root.tsx # XxxRoot — export default
├── trigger.tsx # XxxTrigger — export default
├── content.tsx # XxxContent — export default
└── ...
index.tsx の例:
export { default as Root } from "./root";
export { default as Trigger } from "./trigger";
export { default as Content } from "./content";
消費側: import * as Dialog from "@repo/<package>/ui/dialog";
必要な依存関係を追加する:
# Chakra UI(--chakra 指定時、未インストールの場合)
pnpm add @chakra-ui/react --filter @repo/<package>
バージョンはピン留め(semver range なし)。パッケージに既にインストール済みの場合はスキップ。
pnpm install の実行新規依存関係を追加した場合は pnpm install を実行してワークスペースリンクを更新する。
作成するコンポーネントは以下に準拠すること:
export default + arrow functionimport type で型と値の import を分離"use client" は必要な場合のみ)"use client" が必要なケース: Chakra UI 使用時、useState/useEffect/イベントハンドラ使用時forwardRef は不要、ref は通常の prop として受け取るuseSortedClasses 順に整列@types/* は devDependencies に配置/** */、コンポーネント定義に概要・@example・@category)package.json の exports に "./ui/*" パターンが既にある場合、追加設定は不要index.stories.tsx が存在すること(satisfies Meta<typeof Component> パターン)index.test.tsx が存在すること(describe + test パターン、afterEach(() => { cleanup(); }) を含む)title はパッケージ内のパスに対応(例: "ui/ComponentName")className でスタイリングしてよい@chakra-ui/react の Slot / asChild パターンでコンポーネント合成が可能/tdd スキルを参照し、テストを先に書く(Red-Green-Refactor サイクル)