mcpField
R
react-coder

react-coder

github.com/majesticlabs-dev開発5063 回インストール7 週間前に更新
リポジトリ

react-coder について

react-coderは、TypeScript、フック、保守しやすいパターンでモダンなReactコンポーネントを作るコーディングスキルです。コンポーネント構成やパフォーマンス手法に加え、実装内容の報告形式も示します。

主な機能

  1. 01フックを使った関数コンポーネント
  2. 02Propsとイベントハンドラーの型付け
  3. 03再利用可能なコンポーネント構成
  4. 04メモ化とコード分割
  5. 05実装内容の報告形式

活用シーン

  1. 01型付きReact UIコンポーネントの作成
  2. 02コンポーネントファイルの整理
  3. 03再レンダーの最適化
  4. 04コンポーネント実装の説明準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill react-coder

インストール後、Claude Code で/react-coderを入力して読み込まれたか確認します。

詳細

React コーダー

TypeScript、フック、ベストプラクティスを使用して、モダンな React コンポーネントを作成します。クリーンでパフォーマンスに優れ、保守しやすいコードを作成します。

技術スタックの前提

技術デフォルト
React18+(並行機能を使用)
TypeScript型安全性のために使用
コンポーネントフックを使った関数コンポーネント
パッケージマネージャーpnpm
ビルドツールVite または Next.js
スタイリングTailwind CSS
テストVitest または Jest

コンポーネントのパターン

基本的な関数コンポーネント
import { FC } from 'react';

interface ButtonProps {
  label: string;
  onClick: () => void;
  variant?: 'primary' | 'secondary';
  disabled?: boolean;
}

export const Button: FC<ButtonProps> = ({
  label,
  onClick,
  variant = 'primary',
  disabled = false
}) => {
  const baseClasses = 'px-4 py-2 rounded-md font-medium transition-colors';
  const variantClasses = {
    primary: 'bg-blue-600 text-white hover:bg-blue-700 disabled:bg-gray-400',
    secondary: 'bg-white text-gray-700 border border-gray-300 hover:bg-gray-50'
  };

  return (
    <button
      onClick={onClick}
      disabled={disabled}
      className={`${baseClasses} ${variantClasses[variant]}`}
    >
      {label}
    </button>
  );
};
子要素を持つコンポーネント
import { FC, ReactNode } from 'react';

interface CardProps {
  title: string;
  children: ReactNode;
  footer?: ReactNode;
}

export const Card: FC<CardProps> = ({ title, children, footer }) => {
  return (
    <div className="bg-white shadow rounded-lg overflow-hidden">
      <div className="px-6 py-4 border-b border-gray-200">
        <h3 className="text-lg font-medium text-gray-900">{title}</h3>
      </div>
      <div className="px-6 py-4">{children}</div>
      {footer && (
        <div className="px-6 py-4 bg-gray-50 border-t border-gray-200">
          {footer}
        </div>
      )}
    </div>
  );
};

TypeScript のパターン

ジェネリクスを使った Props
interface SelectProps<T> {
  options: T[];
  value: T;
  onChange: (value: T) => void;
  getLabel: (option: T) => string;
  getValue: (option: T) => string;
}

export function Select<T>({ options, value, onChange, getLabel, getValue }: SelectProps<T>) {
  return (
    <select
      value={getValue(value)}
      onChange={(e) => {
        const selected = options.find(opt => getValue(opt) === e.target.value);
        if (selected) onChange(selected);
      }}
    >
      {options.map((option) => (
        <option key={getValue(option)} value={getValue(option)}>
          {getLabel(option)}
        </option>
      ))}
    </select>
  );
}
イベントハンドラーの型
import { MouseEvent, ChangeEvent, KeyboardEvent } from 'react';

const handleClick = (e: MouseEvent<HTMLButtonElement>) => { ... }
const handleChange = (e: ChangeEvent<HTMLInputElement>) => { ... }
const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => { ... }

ファイル構成

src/
├── components/
│   ├── ui/              # Reusable UI components
│   │   ├── Button.tsx
│   │   ├── Card.tsx
│   │   └── Input.tsx
│   ├── forms/           # Form components
│   └── layout/          # Layout components
├── hooks/               # Custom hooks
│   ├── useApi.ts
│   ├── useForm.ts
│   └── useLocalStorage.ts
├── pages/               # Page components
├── types/               # TypeScript types
└── utils/               # Utility functions

パフォーマンスの最適化

手法使用例
useMemoコストの高い計算(並べ替え、フィルタリング)
useCallbackメモ化された子コンポーネントに渡す関数
memo同じ Props で頻繁に再レンダリングされる純粋コンポーネント
lazy + Suspenseルートや大規模なコンポーネントのコード分割

出力形式

コンポーネントを作成した後、以下を示します。

  1. 作成したファイル - パスを含む新規ファイルの一覧
  2. コンポーネント - 主なコンポーネントとその目的
  3. フック - 作成したカスタムフック
  4. 型 - 定義した TypeScript のインターフェース/型
  5. 次のステップ - テスト、統合、スタイリング

コメント