jpskill.com
🛠️ 開発・MCP コミュニティ

ck:frontend-development

React/TypeScriptでモダンなフロントエンドを構築し、コンポーネント設計、遅延ロード、MUI v7、TanStack Routerなどを活用して、パフォーマンスを最適化するSkill。

📜 元の英語説明(参考)

Build React/TypeScript frontends with modern patterns. Use for components, Suspense, lazy loading, useSuspenseQuery, MUI v7 styling, TanStack Router, performance optimization.

🇯🇵 日本人クリエイター向け解説

一言でいうと

React/TypeScriptでモダンなフロントエンドを構築し、コンポーネント設計、遅延ロード、MUI v7、TanStack Routerなどを活用して、パフォーマンスを最適化するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o ck-frontend-development.zip https://jpskill.com/download/23646.zip && unzip -o ck-frontend-development.zip && rm ck-frontend-development.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/23646.zip -OutFile "$d\ck-frontend-development.zip"; Expand-Archive "$d\ck-frontend-development.zip" -DestinationPath $d -Force; ri "$d\ck-frontend-development.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して ck-frontend-development.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → ck-frontend-development フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

フロントエンド開発ガイドライン

目的

本ガイドラインは、Suspenseベースのデータフェッチ、遅延読み込み、適切なファイル構成、パフォーマンス最適化を重視した、モダンなReact開発のための包括的なガイドです。

このスキルを使用するタイミング

  • 新しいコンポーネントやページを作成する時
  • 新しい機能を構築する時
  • TanStack Queryでデータをフェッチする時
  • TanStack Routerでルーティングを設定する時
  • MUI v7でコンポーネントをスタイリングする時
  • パフォーマンス最適化を行う時
  • フロントエンドのコードを整理する時
  • TypeScriptのベストプラクティスを適用する時

クイックスタート

新規コンポーネントチェックリスト

コンポーネントを作成する際は、このチェックリストに従ってください。

  • [ ] TypeScriptでReact.FC<Props>パターンを使用する
  • [ ] 重いコンポーネントの場合は遅延読み込みする: React.lazy(() => import())
  • [ ] ローディング状態のために<SuspenseLoader>でラップする
  • [ ] データフェッチにはuseSuspenseQueryを使用する
  • [ ] インポートエイリアスを使用する: @/, ~types, ~components, ~features
  • [ ] スタイル: 100行未満ならインライン、100行以上なら別ファイル
  • [ ] 子コンポーネントに渡すイベントハンドラにはuseCallbackを使用する
  • [ ] デフォルトエクスポートはファイルの最後に記述する
  • [ ] ローディングスピナーによる早期リターンはしない
  • [ ] ユーザー通知にはuseMuiSnackbarを使用する

新規機能チェックリスト

機能を作成する際は、この構造を設定してください。

  • [ ] features/{feature-name}/ディレクトリを作成する
  • [ ] サブディレクトリを作成する: api/, components/, hooks/, helpers/, types/
  • [ ] APIサービスファイルを作成する: api/{feature}Api.ts
  • [ ] types/にTypeScriptの型を設定する
  • [ ] routes/{feature-name}/index.tsxにルートを作成する
  • [ ] 機能コンポーネントを遅延読み込みする
  • [ ] Suspense境界を使用する
  • [ ] 機能のindex.tsからパブリックAPIをエクスポートする

インポートエイリアス クイックリファレンス

エイリアス 解決先
@/ src/ import { apiClient } from '@/lib/apiClient'
~types src/types import type { User } from '~types/user'
~components src/components import { SuspenseLoader } from '~components/SuspenseLoader'
~features src/features import { authApi } from '~features/auth'

定義場所: vite.config.ts 180-185行目


よく使うインポート チートシート

// React & Lazy Loading
import React, { useState, useCallback, useMemo } from 'react';
const Heavy = React.lazy(() => import('./Heavy'));

// MUI Components
import { Box, Paper, Typography, Button, Grid } from '@mui/material';
import type { SxProps, Theme } from '@mui/material';

// TanStack Query (Suspense)
import { useSuspenseQuery, useQueryClient } from '@tanstack/react-query';

// TanStack Router
import { createFileRoute } from '@tanstack/react-router';

// Project Components
import { SuspenseLoader } from '~components/SuspenseLoader';

// Hooks
import { useAuth } from '@/hooks/useAuth';
import { useMuiSnackbar } from '@/hooks/useMuiSnackbar';

// Types
import type { Post } from '~types/post';

トピックガイド

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

モダンなReactコンポーネントは以下を使用します:

  • 型安全のためのReact.FC<Props>
  • コード分割のためのReact.lazy()
  • ローディング状態のためのSuspenseLoader
  • 名前付きconst + デフォルトエクスポートパターン

主要な概念:

  • 重いコンポーネント(DataGrid、チャート、エディタ)は遅延読み込みする
  • 遅延コンポーネントは常にSuspenseでラップする
  • SuspenseLoaderコンポーネント(フェードアニメーション付き)を使用する
  • コンポーネント構造: Props → Hooks → Handlers → Render → Export

📖 完全ガイド: resources/component-patterns.md


📊 データフェッチ

主要パターン: useSuspenseQuery

  • Suspense境界と共に使用する
  • キャッシュファースト戦略(APIの前にグリッドキャッシュを確認)
  • isLoadingチェックを置き換える
  • ジェネリクスによる型安全

APIサービスレイヤー:

  • features/{feature}/api/{feature}Api.tsを作成する
  • apiClient axiosインスタンスを使用する
  • 機能ごとにメソッドを一元化する
  • ルート形式: /form/route/api/form/routeではない)

📖 完全ガイド: resources/data-fetching.md


📁 ファイル構成

features/ と components/ の違い:

  • features/: ドメイン固有(投稿、コメント、認証など)
  • components/: 真に再利用可能(SuspenseLoader、CustomAppBarなど)

機能サブディレクトリ:

features/
  my-feature/
    api/          # APIサービスレイヤー
    components/   # 機能コンポーネント
    hooks/        # カスタムフック
    helpers/      # ユーティリティ関数
    types/        # TypeScriptの型

📖 完全ガイド: resources/file-organization.md


🎨 スタイリング

インライン vs 別ファイル:

  • 100行未満: インライン const styles: Record<string, SxProps<Theme>>
  • 100行以上: 別ファイル .styles.ts

主要な方法:

  • MUIコンポーネントにはsxプロップを使用する
  • SxProps<Theme>による型安全
  • テーマへのアクセス: (theme) => theme.palette.primary.main

MUI v7 Grid:

<Grid size={{ xs: 12, md: 6 }}>  // ✅ v7構文
<Grid xs={12} md={6}>             // ❌ 古い構文

📖 完全ガイド: resources/styling-guide.md


🛣️ ルーティング

TanStack Router - フォルダーベース:

  • ディレクトリ: routes/my-route/index.tsx
  • コンポーネントを遅延読み込みする
  • createFileRouteを使用する
  • ローダーにブレッドクラムデータを含める

例:

import { createFileRoute } from '@tanstack/react-router';
import { lazy } from 'react';

const MyPage = lazy(() => import('@/features/my-feature/components/MyPage'));

export const Route = createFileRoute('/my-route/')({
    component: MyPage,
    loader: () => ({ crumb: 'My Route' }),
});

📖 完全ガイド: resources/routing-guide.md


⏳ ローディングとエラー状態

重要なルール: 早期リターンはしない

// ❌ 絶対にしない - レイアウトシフトを引き起こす
if (isLoading) {
    return <LoadingSpinner />;
}

// ✅ 常にこれを行う - 一貫したレイアウト
<SuspenseLoader>
    <Content />
</SuspenseLoader>

理由: Cumulative Layout Shift (CLS) を防ぎ、UXを向上させます。

エラーハンドリング:

  • ユーザーフィードバックにはuseMuiSnackbarを使用する
  • react-toastify絶対に使用しない
  • TanStack QueryのonErrorコールバックを使用する

[📖 完全ガイド: resources/loading-and-error-states.md](resources/loadi

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Frontend Development Guidelines

Purpose

Comprehensive guide for modern React development, emphasizing Suspense-based data fetching, lazy loading, proper file organization, and performance optimization.

When to Use This Skill

  • Creating new components or pages
  • Building new features
  • Fetching data with TanStack Query
  • Setting up routing with TanStack Router
  • Styling components with MUI v7
  • Performance optimization
  • Organizing frontend code
  • TypeScript best practices

Quick Start

New Component Checklist

Creating a component? Follow this checklist:

  • [ ] Use React.FC<Props> pattern with TypeScript
  • [ ] Lazy load if heavy component: React.lazy(() => import())
  • [ ] Wrap in <SuspenseLoader> for loading states
  • [ ] Use useSuspenseQuery for data fetching
  • [ ] Import aliases: @/, ~types, ~components, ~features
  • [ ] Styles: Inline if <100 lines, separate file if >100 lines
  • [ ] Use useCallback for event handlers passed to children
  • [ ] Default export at bottom
  • [ ] No early returns with loading spinners
  • [ ] Use useMuiSnackbar for user notifications

New Feature Checklist

Creating a feature? Set up this structure:

  • [ ] Create features/{feature-name}/ directory
  • [ ] Create subdirectories: api/, components/, hooks/, helpers/, types/
  • [ ] Create API service file: api/{feature}Api.ts
  • [ ] Set up TypeScript types in types/
  • [ ] Create route in routes/{feature-name}/index.tsx
  • [ ] Lazy load feature components
  • [ ] Use Suspense boundaries
  • [ ] Export public API from feature index.ts

Import Aliases Quick Reference

Alias Resolves To Example
@/ src/ import { apiClient } from '@/lib/apiClient'
~types src/types import type { User } from '~types/user'
~components src/components import { SuspenseLoader } from '~components/SuspenseLoader'
~features src/features import { authApi } from '~features/auth'

Defined in: vite.config.ts lines 180-185


Common Imports Cheatsheet

// React & Lazy Loading
import React, { useState, useCallback, useMemo } from 'react';
const Heavy = React.lazy(() => import('./Heavy'));

// MUI Components
import { Box, Paper, Typography, Button, Grid } from '@mui/material';
import type { SxProps, Theme } from '@mui/material';

// TanStack Query (Suspense)
import { useSuspenseQuery, useQueryClient } from '@tanstack/react-query';

// TanStack Router
import { createFileRoute } from '@tanstack/react-router';

// Project Components
import { SuspenseLoader } from '~components/SuspenseLoader';

// Hooks
import { useAuth } from '@/hooks/useAuth';
import { useMuiSnackbar } from '@/hooks/useMuiSnackbar';

// Types
import type { Post } from '~types/post';

Topic Guides

🎨 Component Patterns

Modern React components use:

  • React.FC<Props> for type safety
  • React.lazy() for code splitting
  • SuspenseLoader for loading states
  • Named const + default export pattern

Key Concepts:

  • Lazy load heavy components (DataGrid, charts, editors)
  • Always wrap lazy components in Suspense
  • Use SuspenseLoader component (with fade animation)
  • Component structure: Props → Hooks → Handlers → Render → Export

📖 Complete Guide: resources/component-patterns.md


📊 Data Fetching

PRIMARY PATTERN: useSuspenseQuery

  • Use with Suspense boundaries
  • Cache-first strategy (check grid cache before API)
  • Replaces isLoading checks
  • Type-safe with generics

API Service Layer:

  • Create features/{feature}/api/{feature}Api.ts
  • Use apiClient axios instance
  • Centralized methods per feature
  • Route format: /form/route (NOT /api/form/route)

📖 Complete Guide: resources/data-fetching.md


📁 File Organization

features/ vs components/:

  • features/: Domain-specific (posts, comments, auth)
  • components/: Truly reusable (SuspenseLoader, CustomAppBar)

Feature Subdirectories:

features/
  my-feature/
    api/          # API service layer
    components/   # Feature components
    hooks/        # Custom hooks
    helpers/      # Utility functions
    types/        # TypeScript types

📖 Complete Guide: resources/file-organization.md


🎨 Styling

Inline vs Separate:

  • <100 lines: Inline const styles: Record<string, SxProps<Theme>>
  • 100 lines: Separate .styles.ts file

Primary Method:

  • Use sx prop for MUI components
  • Type-safe with SxProps<Theme>
  • Theme access: (theme) => theme.palette.primary.main

MUI v7 Grid:

<Grid size={{ xs: 12, md: 6 }}>  // ✅ v7 syntax
<Grid xs={12} md={6}>             // ❌ Old syntax

📖 Complete Guide: resources/styling-guide.md


🛣️ Routing

TanStack Router - Folder-Based:

  • Directory: routes/my-route/index.tsx
  • Lazy load components
  • Use createFileRoute
  • Breadcrumb data in loader

Example:

import { createFileRoute } from '@tanstack/react-router';
import { lazy } from 'react';

const MyPage = lazy(() => import('@/features/my-feature/components/MyPage'));

export const Route = createFileRoute('/my-route/')({
    component: MyPage,
    loader: () => ({ crumb: 'My Route' }),
});

📖 Complete Guide: resources/routing-guide.md


⏳ Loading & Error States

CRITICAL RULE: No Early Returns

// ❌ NEVER - Causes layout shift
if (isLoading) {
    return <LoadingSpinner />;
}

// ✅ ALWAYS - Consistent layout
<SuspenseLoader>
    <Content />
</SuspenseLoader>

Why: Prevents Cumulative Layout Shift (CLS), better UX

Error Handling:

  • Use useMuiSnackbar for user feedback
  • NEVER react-toastify
  • TanStack Query onError callbacks

📖 Complete Guide: resources/loading-and-error-states.md


⚡ Performance

Optimization Patterns:

  • useMemo: Expensive computations (filter, sort, map)
  • useCallback: Event handlers passed to children
  • React.memo: Expensive components
  • Debounced search (300-500ms)
  • Memory leak prevention (cleanup in useEffect)

📖 Complete Guide: resources/performance.md


📘 TypeScript

Standards:

  • Strict mode, no any type
  • Explicit return types on functions
  • Type imports: import type { User } from '~types/user'
  • Component prop interfaces with JSDoc

📖 Complete Guide: resources/typescript-standards.md


🔧 Common Patterns

Covered Topics:

  • React Hook Form with Zod validation
  • DataGrid wrapper contracts
  • Dialog component standards
  • useAuth hook for current user
  • Mutation patterns with cache invalidation

📖 Complete Guide: resources/common-patterns.md


📚 Complete Examples

Full working examples:

  • Modern component with all patterns
  • Complete feature structure
  • API service layer
  • Route with lazy loading
  • Suspense + useSuspenseQuery
  • Form with validation

📖 Complete Guide: resources/complete-examples.md


Navigation Guide

Need to... Read this resource
Create a component component-patterns.md
Fetch data data-fetching.md
Organize files/folders file-organization.md
Style components styling-guide.md
Set up routing routing-guide.md
Handle loading/errors loading-and-error-states.md
Optimize performance performance.md
TypeScript types typescript-standards.md
Forms/Auth/DataGrid common-patterns.md
See full examples complete-examples.md

Core Principles

  1. Lazy Load Everything Heavy: Routes, DataGrid, charts, editors
  2. Suspense for Loading: Use SuspenseLoader, not early returns
  3. useSuspenseQuery: Primary data fetching pattern for new code
  4. Features are Organized: api/, components/, hooks/, helpers/ subdirs
  5. Styles Based on Size: <100 inline, >100 separate
  6. Import Aliases: Use @/, ~types, ~components, ~features
  7. No Early Returns: Prevents layout shift
  8. useMuiSnackbar: For all user notifications

Quick Reference: File Structure

src/
  features/
    my-feature/
      api/
        myFeatureApi.ts       # API service
      components/
        MyFeature.tsx         # Main component
        SubComponent.tsx      # Related components
      hooks/
        useMyFeature.ts       # Custom hooks
        useSuspenseMyFeature.ts  # Suspense hooks
      helpers/
        myFeatureHelpers.ts   # Utilities
      types/
        index.ts              # TypeScript types
      index.ts                # Public exports

  components/
    SuspenseLoader/
      SuspenseLoader.tsx      # Reusable loader
    CustomAppBar/
      CustomAppBar.tsx        # Reusable app bar

  routes/
    my-route/
      index.tsx               # Route component
      create/
        index.tsx             # Nested route

Modern Component Template (Quick Copy)

import React, { useState, useCallback } from 'react';
import { Box, Paper } from '@mui/material';
import { useSuspenseQuery } from '@tanstack/react-query';
import { featureApi } from '../api/featureApi';
import type { FeatureData } from '~types/feature';

interface MyComponentProps {
    id: number;
    onAction?: () => void;
}

export const MyComponent: React.FC<MyComponentProps> = ({ id, onAction }) => {
    const [state, setState] = useState<string>('');

    const { data } = useSuspenseQuery({
        queryKey: ['feature', id],
        queryFn: () => featureApi.getFeature(id),
    });

    const handleAction = useCallback(() => {
        setState('updated');
        onAction?.();
    }, [onAction]);

    return (
        <Box sx={{ p: 2 }}>
            <Paper sx={{ p: 3 }}>
                {/* Content */}
            </Paper>
        </Box>
    );
};

export default MyComponent;

For complete examples, see resources/complete-examples.md


Related Skills

  • error-tracking: Error tracking with Sentry (applies to frontend too)
  • backend-dev-guidelines: Backend API patterns that frontend consumes

Skill Status: Modular structure with progressive loading for optimal context management