Skip to main content ホーム クリエイター beko2210 firstbrain frontend-mobile-development-component-scaffold
frontend-mobile-development-component-scaffold You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, s
インストールへ移動 Skills Marketplace コミュニティが作成したAIスキルを発見・探索
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/BEKO2210/Firstbrain --skill frontend-mobile-development-component-scaffoldコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
Zipをダウンロード ダウンロード中... name frontend-mobile-development-component-scaffold description You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, s type skill created 2026-02-27T00:00:00.000Z domain software-development category frontend risk unknown source community tags ["skill","software-development","frontend","mobile","component"]
React/React Native Component Scaffolding
You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, styles, and documentation following modern best practices.
Use this skill when
Working on react/react native component scaffolding tasks or workflows
Needing guidance, best practices, or checklists for react/react native component scaffolding
Do not use this skill when
The task is unrelated to react/react native component scaffolding
You need a different domain or tool outside this scope
Context
The user needs automated component scaffolding that creates consistent, type-safe React components with proper structure, hooks, styling, accessibility, and test coverage. Focus on reusable patterns and scalable architecture.
Requirements
$ARGUMENTS
Instructions
1. Analyze Component Requirements
interface ComponentSpec {
name : string ;
type : 'functional' | 'page' | 'layout' | 'form' | 'data-display' ;
props : PropDefinition [];
state ?: StateDefinition [];
hooks ?: string [];
styling : 'css-modules' | 'styled-components' | 'tailwind' ;
platform : 'web' | 'native' | 'universal' ;
}
interface PropDefinition {
name : string ;
type : string ;
required : boolean ;
?: ;
: ;
}
{
( : ): {
{
: . (input),
: . (input),
: . (input),
: . (input),
: . (input),
: . (),
: . ()
};
}
}
defaultValue
any
description
string
class
ComponentAnalyzer
parseRequirements
input
string
ComponentSpec
return
name
this
extractName
type
this
inferType
props
this
extractProps
state
this
extractState
hooks
this
identifyHooks
styling
this
detectStylingApproach
platform
this
detectPlatform
2. Generate React Component interface GeneratorOptions {
typescript : boolean ;
testing : boolean ;
storybook : boolean ;
accessibility : boolean ;
}
class ReactComponentGenerator {
generate (spec : ComponentSpec , options : GeneratorOptions ): ComponentFiles {
return {
component : this .generateComponent (spec, options),
types : options.typescript ? this .generateTypes (spec) : null ,
styles : this .generateStyles (spec),
tests : options.testing ? this .generateTests (spec) : null ,
stories : options.storybook ? this .generateStories (spec) : null ,
index : this .generateIndex (spec)
};
}
generateComponent (spec : ComponentSpec , options : GeneratorOptions ): string {
const imports = this .generateImports (spec, options);
const types = options.typescript ? this .generatePropTypes (spec) : '' ;
const component = this .generateComponentBody (spec, options);
const exports = this .generateExports (spec);
return `${imports} \n\n${types} \n\n${component} \n\n${exports } ` ;
}
generateImports (spec : ComponentSpec , options : GeneratorOptions ): string {
const imports = ["import React, { useState, useEffect } from 'react';" ];
if (spec.styling === 'css-modules' ) {
imports.push (`import styles from './${spec.name} .module.css';` );
} else if (spec.styling === 'styled-components' ) {
imports.push ("import styled from 'styled-components';" );
}
if (options.accessibility ) {
imports.push ("import { useA11y } from '@/hooks/useA11y';" );
}
return imports.join ('\n' );
}
generatePropTypes (spec : ComponentSpec ): string {
const props = spec.props .map (p => {
const optional = p.required ? '' : '?' ;
const comment = p.description ? ` /** ${p.description} */\n` : '' ;
return `${comment} ${p.name} ${optional} : ${p.type } ;` ;
}).join ('\n' );
return `export interface ${spec.name} Props {\n${props} \n}` ;
}
generateComponentBody (spec : ComponentSpec , options : GeneratorOptions ): string {
const propsType = options.typescript ? `: React.FC<${spec.name} Props>` : '' ;
const destructuredProps = spec.props .map (p => p.name ).join (', ' );
let body = `export const ${spec.name} ${propsType} = ({ ${destructuredProps} }) => {\n` ;
if (spec.state ) {
body += spec.state .map (s =>
` const [${s.name} , set${this .capitalize(s.name)} ] = useState${options.typescript ? `<${s.type } >` : '' } (${s.initial} );\n`
).join ('' );
body += '\n' ;
}
if (spec.hooks ?.includes ('useEffect' )) {
body += ` useEffect(() => {\n` ;
body += ` // TODO: Add effect logic\n` ;
body += ` }, [${destructuredProps} ]);\n\n` ;
}
if (options.accessibility ) {
body += ` const a11yProps = useA11y({\n` ;
body += ` role: '${this .inferAriaRole(spec.type )} ',\n` ;
body += ` label: ${spec.props.find(p => p.name === 'label' )?.name || `'${spec.name} '` } \n` ;
body += ` });\n\n` ;
}
body += ` return (\n` ;
body += this .generateJSX (spec, options);
body += ` );\n` ;
body += `};` ;
return body;
}
generateJSX (spec : ComponentSpec , options : GeneratorOptions ): string {
const className = spec.styling === 'css-modules' ? `className={styles.${this .camelCase(spec.name)} }` : '' ;
const a11y = options.accessibility ? '{...a11yProps}' : '' ;
return ` <div ${className} ${a11y} >\n` +
` {/* TODO: Add component content */}\n` +
` </div>\n` ;
}
}
3. Generate React Native Component class ReactNativeGenerator {
generateComponent (spec : ComponentSpec ): string {
return `
import React, { useState } from 'react';
import {
View,
Text,
StyleSheet,
TouchableOpacity,
AccessibilityInfo
} from 'react-native';
interface ${spec.name} Props {
${spec.props.map(p => ` ${p.name} ${p.required ? '' : '?' } : ${this .mapNativeType(p.type )} ;` ).join('\n' )}
}
export const ${spec.name} : React.FC<${spec.name} Props> = ({
${spec.props.map(p => p.name).join(',\n ' )}
}) => {
return (
<View
style={styles.container}
accessible={true}
accessibilityLabel="${spec.name} component"
>
<Text style={styles.text}>
{/* Component content */}
</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 16,
backgroundColor: '#fff',
},
text: {
fontSize: 16,
color: '#333',
},
});
` ;
}
mapNativeType (webType : string ): string {
const typeMap : Record <string , string > = {
'string' : 'string' ,
'number' : 'number' ,
'boolean' : 'boolean' ,
'React.ReactNode' : 'React.ReactNode' ,
'Function' : '() => void'
};
return typeMap[webType] || webType;
}
}
4. Generate Component Tests class ComponentTestGenerator {
generateTests (spec : ComponentSpec ): string {
return `
import { render, screen, fireEvent } from '@testing-library/react';
import { ${spec.name} } from './${spec.name} ';
describe('${spec.name} ', () => {
const defaultProps = {
${spec.props.filter(p => p.required).map(p => ` ${p.name} : ${this .getMockValue(p.type )} ,` ).join('\n' )}
};
it('renders without crashing', () => {
render(<${spec.name} {...defaultProps} />);
expect(screen.getByRole('${this .inferAriaRole(spec.type )} ')).toBeInTheDocument();
});
it('displays correct content', () => {
render(<${spec.name} {...defaultProps} />);
expect(screen.getByText(/content/i)).toBeVisible();
});
${spec.props.filter(p => p.type .includes('()' ) || p.name.startsWith('on' )).map(p => `
it('calls ${p.name} when triggered', () => {
const mock${this .capitalize(p.name)} = jest.fn();
render(<${spec.name} {...defaultProps} ${p.name} ={mock${this .capitalize(p.name)} } />);
const trigger = screen.getByRole('button');
fireEvent.click(trigger);
expect(mock${this .capitalize(p.name)} ).toHaveBeenCalledTimes(1);
});` ).join('\n' )}
it('meets accessibility standards', async () => {
const { container } = render(<${spec.name} {...defaultProps} />);
const results = await axe(container);
expect(results).toHaveNoViolations();
});
});
` ;
}
getMockValue (type : string ): string {
if (type === 'string' ) return "'test value'" ;
if (type === 'number' ) return '42' ;
if (type === 'boolean' ) return 'true' ;
if (type .includes ('[]' )) return '[]' ;
if (type .includes ('()' )) return 'jest.fn()' ;
return '{}' ;
}
}
5. Generate Styles class StyleGenerator {
generateCSSModule (spec : ComponentSpec ): string {
const className = this .camelCase (spec.name );
return `
.${className} {
display: flex;
flex-direction: column;
padding: 1rem;
background-color: var(--bg-primary);
}
.${className} Title {
font-size: 1.5rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.5rem;
}
.${className} Content {
flex: 1;
color: var(--text-secondary);
}
` ;
}
generateStyledComponents (spec : ComponentSpec ): string {
return `
import styled from 'styled-components';
export const ${spec.name} Container = styled.div\`
display: flex;
flex-direction: column;
padding: \${({ theme }) => theme.spacing.md};
background-color: \${({ theme }) => theme.colors.background};
\`;
export const ${spec.name} Title = styled.h2\`
font-size: \${({ theme }) => theme.fontSize.lg};
font-weight: 600;
color: \${({ theme }) => theme.colors.text.primary};
margin-bottom: \${({ theme }) => theme.spacing.sm};
\`;
` ;
}
generateTailwind (spec : ComponentSpec ): string {
return `
// Use these Tailwind classes in your component:
// Container: "flex flex-col p-4 bg-white rounded-lg shadow"
// Title: "text-xl font-semibold text-gray-900 mb-2"
// Content: "flex-1 text-gray-700"
` ;
}
}
6. Generate Storybook Stories class StorybookGenerator {
generateStories (spec : ComponentSpec ): string {
return `
import type { Meta, StoryObj } from '@storybook/react';
import { ${spec.name} } from './${spec.name} ';
const meta: Meta<typeof ${spec.name} > = {
title: 'Components/${spec.name} ',
component: ${spec.name} ,
tags: ['autodocs'],
argTypes: {
${spec.props.map(p => ` ${p.name} : { control: '${this .inferControl(p.type )} ', description: '${p.description} ' },` ).join('\n' )}
},
};
export default meta;
type Story = StoryObj<typeof ${spec.name} >;
export const Default: Story = {
args: {
${spec.props.map(p => ` ${p.name} : ${p.defaultValue || this .getMockValue(p.type )} ,` ).join('\n' )}
},
};
export const Interactive: Story = {
args: {
...Default.args,
},
};
` ;
}
inferControl (type : string ): string {
if (type === 'string' ) return 'text' ;
if (type === 'number' ) return 'number' ;
if (type === 'boolean' ) return 'boolean' ;
if (type .includes ('[]' )) return 'object' ;
return 'text' ;
}
}
Output Format
Component File : Fully implemented React/React Native component
Type Definitions : TypeScript interfaces and types
Styles : CSS modules, styled-components, or Tailwind config
Tests : Complete test suite with coverage
Stories : Storybook stories for documentation
Index File : Barrel exports for clean imports
Focus on creating production-ready, accessible, and maintainable components that follow modern React patterns and best practices.
Connections
Domain: [[Software Entwicklung]]
Kategorie: [[Frontend Entwicklung]]
Navigation: [[Skills Uebersicht]], [[Home]]