nebula-component-creation
既存のReactコンポーネントのサンプルを参考に、新しいコンポーネントを作成、追加、構築し、必要な依存関係を解決して、`index.jsx`や`component.yml`といった関連ファイルも自動で用意するSkill。
📜 元の英語説明(参考)
Create React components by copying and modifying examples from `examples/components/`. Use when asked to (1) Create, add, or build a new component, (2) Copy an example component to `src/components/`, (3) Add a component with dependencies. Handles dependency resolution and ensures each component has `index.jsx` and `component.yml`.
🇯🇵 日本人クリエイター向け解説
既存のReactコンポーネントのサンプルを参考に、新しいコンポーネントを作成、追加、構築し、必要な依存関係を解決して、`index.jsx`や`component.yml`といった関連ファイルも自動で用意するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o nebula-component-creation.zip https://jpskill.com/download/9237.zip && unzip -o nebula-component-creation.zip && rm nebula-component-creation.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9237.zip -OutFile "$d\nebula-component-creation.zip"; Expand-Archive "$d\nebula-component-creation.zip" -DestinationPath $d -Force; ri "$d\nebula-component-creation.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
nebula-component-creation.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
nebula-component-creationフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[Skill 名] nebula-component-creation
ストーリーの要件は nebula-storybook-stories に委譲されます(ストーリーの命名、構造、および CSF の詳細に関する正式な情報源)。
ワークフロー
新しいコンポーネントの作成
常に例から始めてください。新しいコンポーネントを作成するように依頼された場合は、次の手順に従ってください。
- 開始点として使用できる同様の例を
examples/components/で見つけます(例:「alert」コンポーネントにはblockquoteを使用し、インタラクティブな要素にはbuttonを使用します)。 - 例のコンポーネントフォルダーをコピーして
src/components/<new_name>/に配置します。 - 対応するストーリーを
examples/stories/からsrc/stories/にコピーします。 - コピーしたファイルを修正して、新しいコンポーネントを実装します。
各コンポーネントに対して、必ずストーリーファイルをコピーまたは作成してください。ストーリーの命名、構造、および CSF の規約については、nebula-storybook-stories に従ってください。ファイル名/パスの変換については、その「Name Mapping」セクションに従ってください。
このアプローチにより、すべてのコンポーネントで component.yml の構造、JSX の規約、および Storybook のストーリー形式の一貫したパターンが保証されます。
# 例:Blockquote に基づいて Alert コンポーネントを作成する
cp -r examples/components/blockquote src/components/alert
cp examples/stories/blockquote.stories.jsx src/stories/alert.stories.jsx
次に、コピーしたファイルを修正して、Alert コンポーネントを実装します。
コンポーネントは @/components インポートエイリアスを使用します。これは src/components を指します。例をコピーして変更すると、インポートは自動的に機能します。
既存のサンプルコンポーネントのコピー
サンプルコンポーネントをコピーするためのワークフロー:
- 既存のサンプルを確認: 要求されたコンポーネント(例:「hero」)が
examples/components/に存在する場合は、それを直接コピーすることを計画します。 - 依存関係の分析: サンプルコンポーネントの
index.jsxファイルを読み、すべての@/components/<name>インポートを特定します。これらはコンポーネントの依存関係です。 - ネストされた依存関係を再帰的に検出: 見つかった各依存関係について、その
index.jsxで追加の@/components/<name>インポートを確認します。すべての依存関係が検出されるまで続行します。たとえば、heroはtwo_column_textをインポートし、two_column_textはheadingとtextをインポートします。 - 既に存在するもの確認:
src/components/の内容をリストして、どのコンポーネントが既に存在するかを確認します。 - 不足しているコンポーネントのみをコピー:
src/components/にまだ存在しないサンプルコンポーネント(およびそれらのストーリー)のみをコピーします。既存のコンポーネントを上書きしないでください。
シナリオ例: ユーザーが「hero」コンポーネントを要求します。
# ステップ 1:src/ に既存のコンポーネントがあるか確認
ls src/components/
# 出力が以下のみを示すと仮定:button/ global.css
# ステップ 2:hero の依存関係を分析 (hero → two_column_text → heading, text)
# 不足しているコンポーネント:hero, two_column_text, heading, text
# button は既に存在するため、依存関係であったとしてもスキップします
# ステップ 3:不足しているすべてのコンポーネントとストーリーを一度にコピー
cp -r examples/components/hero src/components/
cp -r examples/components/two_column_text src/components/
cp -r examples/components/heading src/components/
cp -r examples/components/text src/components/
cp examples/stories/hero.stories.jsx src/stories/
cp examples/stories/two-column-text.stories.jsx src/stories/
cp examples/stories/heading.stories.jsx src/stories/
cp examples/stories/text.stories.jsx src/stories/
必要なコンポーネントフォルダー構造
重要: src/components/ 内のすべてのコンポーネントフォルダーには、正確に 2 つのファイルが含まれている必要があります。
src/components/<component-name>/
├── index.jsx # React コンポーネントの実装
└── component.yml # Drupal Canvas 用のコンポーネントメタデータとプロパティ
両方のファイルがないコンポーネントフォルダーは絶対に作成しないでください。 index.jsx には、実際の React コンポーネントの実装が含まれています。component.yml は、Drupal Canvas 用のコンポーネントのメタデータ、プロパティ、およびスロットを定義します。
ディレクトリ名は machineName と一致する必要があります。コンポーネントフォルダー名は、component.yml で定義されている machineName の値と完全に一致する必要があります。src/components/ 内の新規および変更されたコンポーネントには、kebab-case(ハイフン付き)を使用します。
レガシー例外: examples/components/ には、レガシーの snake_case 名が含まれている場合があります。明示的に移行を求められない限り、これらの例は変更しないでください。
コンポーネントを作成したら、フォルダー構造を確認します。
# すべてのコンポーネントフォルダーとその内容をリストします
ls -la src/components/*/
# 各新しいコンポーネントに必要なファイルが両方ともあることを確認します
ls src/components/<component-name>/index.jsx
ls src/components/<component-name>/component.yml
コンポーネントフォルダーにいずれかのファイルがない場合、コンポーネントは不完全であり、機能しません。index.jsx と component.yml の両方が必要です。
ベストプラクティス
既存のコンポーネントの再利用
新しい UI 要素を作成する前に、必ず src/components/ を確認してください。 共通の UI 要素(ボタン、見出し、画像など)が必要なコンポーネントを構築する場合は、既存のコンポーネントをインポートして使用し、それらの機能を複製しないようにしてください。
必要なコンポーネントが src/components/ にまだ存在しない場合は、examples/components/ に存在するかどうかを確認してください。存在する場合は、最初に src/components/ にコピーしてから(上記の「既存のサンプルコンポーネントのコピー」を参照)、インポートして使用します。
// 正しい
import Button from "@/components/button";
const NewsletterSignup = ({ onSubmit }) => (
<form onSubmit={onSubmit}>
<input type="email" placeholder="メールアドレスを入力してください" />
<Button variant="primary">購読</Button>
</form>
);
// 間違い
const NewsletterSignup = ({ onSubmit }) => (
<form onSubmit={onSubmit}>
<input type="email" placeholder="メールアドレスを入力してください" />
<button className="rounded bg-primary-600 px-4 py-2 text-white">
購読
</button>
</form>
);
よくある落とし穴
- 既存のコンポーネントの上書き - 最初に必ず
src/components/を確認してください - 依存関係の欠落 - すべての
@/components/インポートを再帰的に確認してください - 不完全なコンポーネントフォルダー -
index.jsxとcomponent.ymlの両方が必要です @/componentsエイリアスの無視 - このインポートエイリアスを使用してください。これはsrc/componentsを指します
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Story requirements are delegated to nebula-storybook-stories (canonical source
for story naming, structure, and CSF details).
Workflow
Creating a new component
Always start from an example. When asked to create a new component:
- Find a similar example in
examples/components/that can serve as a starting point (e.g., useblockquotefor an "alert" component, orbuttonfor any interactive element) - Copy the example component folder to
src/components/<new_name>/ - Copy the corresponding story from
examples/stories/tosrc/stories/ - Modify the copied files to implement the new component
Always copy or create a story file for each component. For story naming,
structure, and CSF conventions, follow nebula-storybook-stories. Follow its
"Name Mapping" section for filename/path conversions.
This approach ensures consistent patterns for component.yml structure, JSX
conventions, and Storybook story format across all components.
# Example: Create an Alert component based on Blockquote
cp -r examples/components/blockquote src/components/alert
cp examples/stories/blockquote.stories.jsx src/stories/alert.stories.jsx
Then modify the copied files to implement the Alert component.
Components use the @/components import alias, which points to
src/components. When you copy and modify examples, the imports will work
automatically.
Copying an existing example component
Workflow for copying example components:
- Check for existing example: If the requested component (e.g., "hero")
exists in
examples/components/, plan to copy it directly. - Analyze dependencies: Read the example component's
index.jsxfile and identify all@/components/<name>imports. These are component dependencies. - Recursively discover nested dependencies: For each dependency found,
check its
index.jsxfor additional@/components/<name>imports. Continue until all dependencies are discovered. For example,heroimportstwo_column_text, which importsheadingandtext. - Check what already exists: List the contents of
src/components/to see which components are already present. - Copy only missing components: Copy only the example components (and their
stories) that don't already exist in
src/components/. Do NOT overwrite existing components.
Example scenario: User asks for a "hero" component.
# Step 1: Check existing components in src/
ls src/components/
# Suppose output shows only: button/ global.css
# Step 2: Analyze hero dependencies (hero → two_column_text → heading, text)
# Missing components: hero, two_column_text, heading, text
# button already exists, so skip it if it were a dependency
# Step 3: Copy all missing components and stories in one batch
cp -r examples/components/hero src/components/
cp -r examples/components/two_column_text src/components/
cp -r examples/components/heading src/components/
cp -r examples/components/text src/components/
cp examples/stories/hero.stories.jsx src/stories/
cp examples/stories/two-column-text.stories.jsx src/stories/
cp examples/stories/heading.stories.jsx src/stories/
cp examples/stories/text.stories.jsx src/stories/
Required component folder structure
CRITICAL: Every component folder in src/components/ MUST contain exactly
two files:
src/components/<component-name>/
├── index.jsx # React component implementation
└── component.yml # Component metadata and props for Drupal Canvas
Never create a component folder without both files. The index.jsx contains
the actual React component implementation. The component.yml defines the
component's metadata, props, and slots for Drupal Canvas.
The directory name must match machineName. The component folder name must
exactly match the machineName value defined in component.yml. Use
kebab-case (with hyphens) for new and modified components in
src/components/.
Legacy exception: examples/components/ may contain legacy snake_case
names. Keep those examples unchanged unless explicitly asked to migrate them.
After creating components, verify the folder structure:
# List all component folders and their contents
ls -la src/components/*/
# Verify each new component has both required files
ls src/components/<component-name>/index.jsx
ls src/components/<component-name>/component.yml
If a component folder is missing either file, the component is incomplete and
will not work. Both index.jsx and component.yml are required.
Best practices
Reuse existing components
Always check src/components/ before creating new UI elements. When
building a component that needs common UI elements (buttons, headings, images,
etc.), import and use existing components rather than duplicating their
functionality.
If the component you need doesn't exist in src/components/ yet, check if it
exists in examples/components/. If so, copy it to src/components/ first (see
"Copying an Existing Example Component" above), then import and use it.
// Correct
import Button from "@/components/button";
const NewsletterSignup = ({ onSubmit }) => (
<form onSubmit={onSubmit}>
<input type="email" placeholder="Enter your email" />
<Button variant="primary">Subscribe</Button>
</form>
);
// Wrong
const NewsletterSignup = ({ onSubmit }) => (
<form onSubmit={onSubmit}>
<input type="email" placeholder="Enter your email" />
<button className="rounded bg-primary-600 px-4 py-2 text-white">
Subscribe
</button>
</form>
);
Common pitfalls
- Overwriting existing components - Always check
src/components/first - Missing dependencies - Recursively check all
@/components/imports - Incomplete component folder - Both
index.jsxandcomponent.ymlare required - Ignoring the
@/componentsalias - Use this import alias; it points tosrc/components