Anthropic Claudeソフトウェア開発⭐ リポ 299品質スコア 84/100
Frontend Development
Angular、React、Vue、Next.jsなどを使用した、プロフェッショナルレベルのフロントエンド開発ができます。
description の原文を見る
พัฒนา Frontend ด้วย Angular, React, Vue, Next.js อย่างมืออาชีพ
SKILL.md 本文
フロントエンド開発スキル
概要
フロントエンドアプリケーション開発のためのスキルで、4つの主要フレームワークをカバーしており、ベストプラクティスを含みます
Angular
プロジェクト構造
src/
├── app/
│ ├── core/ # Singleton services, guards, interceptors
│ │ ├── services/
│ │ ├── guards/
│ │ └── interceptors/
│ ├── shared/ # Shared components, pipes, directives
│ │ ├── components/
│ │ ├── pipes/
│ │ └── directives/
│ ├── features/ # Feature modules
│ │ ├── auth/
│ │ ├── dashboard/
│ │ └── users/
│ └── app.component.ts
├── assets/
└── environments/
ベストプラクティス
- スタンドアロンコンポーネント - スタンドアロンコンポーネントを使用します(Angular 15+)
- シグナル - リアクティビティのためにシグナルを使用します(Angular 16+)
- スマートコンポーネント vs ダムコンポーネント - コンテナとプレゼンテーションを分離します
- OnPush変更検知 - パフォーマンス向上のために使用します
- 遅延読み込み - 必要に応じてモジュールを読み込みます
共通パターン
// スタンドアロンコンポーネント with シグナル (Angular 17+)
import { toSignal } from "@angular/core/rxjs-interop";
@Component({
selector: "app-user-list",
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
@for (user of users(); track user.id) {
<div>{{ user.name }}</div>
}
`,
})
export class UserListComponent {
private userService = inject(UserService);
// effect() + subscribe の代わりに toSignal() を使用
users = toSignal(this.userService.getUsers(), { initialValue: [] });
}
React
プロジェクト構造
src/
├── components/ # 共有/再利用可能なコンポーネント
│ ├── ui/ # 基本 UI コンポーネント
│ └── layout/ # レイアウトコンポーネント
├── features/ # 機能ベースのモジュール
│ ├── auth/
│ │ ├── components/
│ │ ├── hooks/
│ │ └── api.ts
│ └── users/
├── hooks/ # 共有カスタムフック
├── lib/ # ユーティリティ、ヘルパー
├── services/ # API サービス
└── stores/ # ステート管理 (Zustand/Redux)
ベストプラクティス
- 関数型コンポーネント - 常に関数型コンポーネントを使用します
- カスタムフック - ロジックをフックに抽出します
- React Query/SWR - データフェッチング用
- Zustand/Jotai - シンプルなステート管理用
- エラーバウンダリー - エラーを適切に処理します
共通パターン
// カスタムフックパターン
function useUsers() {
const [users, setUsers] = useState<User[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<Error | null>(null);
useEffect(() => {
fetchUsers()
.then(setUsers)
.catch(setError)
.finally(() => setLoading(false));
}, []);
return { users, loading, error };
}
// React Query パターン
function useUsers() {
return useQuery({
queryKey: ["users"],
queryFn: fetchUsers,
staleTime: 5 * 60 * 1000,
});
}
Vue 3
プロジェクト構造
src/
├── components/ # 共有コンポーネント
│ ├── ui/
│ └── layout/
├── composables/ # Composition API 関数
├── views/ # ページコンポーネント
├── stores/ # Pinia ストア
├── services/ # API サービス
├── router/
└── assets/
ベストプラクティス
- Composition API -
<script setup>構文を使用します - Pinia - ステート管理用
- Composables - 再利用可能なロジックを抽出します
- defineProps/defineEmits - タイプセーフな props とイベント
- Suspense - 非同期コンポーネント用
共通パターン
<script setup lang="ts">
import { ref, computed, onMounted } from "vue";
import { useUserStore } from "@/stores/user";
// Props & Emits
const props = defineProps<{
userId: number;
}>();
const emit = defineEmits<{
(e: "select", user: User): void;
}>();
// Composables
const userStore = useUserStore();
// リアクティブステート
const searchQuery = ref("");
// 算出プロパティ
const filteredUsers = computed(() =>
userStore.users.filter((u) => u.name.includes(searchQuery.value)),
);
// ライフサイクル
onMounted(() => {
userStore.fetchUsers();
});
</script>
Next.js (App Router)
プロジェクト構造
src/
├── app/ # App Router
│ ├── (auth)/ # ルートグループ
│ │ ├── login/
│ │ └── register/
│ ├── dashboard/
│ │ ├── page.tsx
│ │ ├── layout.tsx
│ │ └── loading.tsx
│ ├── api/ # API ルート
│ │ └── users/
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ ├── ui/
│ └── features/
├── lib/ # ユーティリティ
└── services/ # API サービス
ベストプラクティス
- サーバーコンポーネント - デフォルト、データフェッチング用
- クライアントコンポーネント - インタラクティビティが必要な場合のみ
- ルートグループ - ルートをグループ化します
- パラレルルート - 複数のページをレンダリングします
- サーバーアクション - フォーム送信用
共通パターン
// サーバーコンポーネント (デフォルト)
async function UsersPage() {
const users = await fetchUsers(); // サーバーサイド
return (
<div>
<UserList users={users} />
<AddUserButton /> {/* クライアントコンポーネント */}
</div>
);
}
// クライアントコンポーネント
("use client");
function AddUserButton() {
const [open, setOpen] = useState(false);
return <button onClick={() => setOpen(true)}>Add User</button>;
}
// サーバーアクション
async function createUser(formData: FormData) {
"use server";
const name = formData.get("name");
await db.users.create({ name });
revalidatePath("/users");
}
共有ベストプラクティス
CSS/スタイリング
- CSS Modules または Tailwind CSS
- CSS 変数 - テーマ用
- モバイルファースト レスポンシブデザイン
- 一貫したスペーシング (8px グリッドシステム)
パフォーマンス
- 遅延読み込み - コンポーネントとルート
- 画像最適化 (next/image、@angular/common)
- コード分割
- メモ化 (useMemo、React.memo、computed)
アクセシビリティ
- セマンティック HTML
- ARIA ラベル
- キーボードナビゲーション
- 色のコントラスト
- フォーカス管理
フロントエンドチェックリスト
- TypeScript を使用している
- 適切なフォルダ構造
- 優れたコンポーネント設計
- 適切なステート管理
- エラーハンドリング
- ローディング状態
- レスポンシブデザイン
- アクセシビリティ
- パフォーマンス最適化
- テストカバレッジ
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- majiayu000
- ライセンス
- MIT
- 最終更新
- 2026/5/4
Source: https://github.com/majiayu000/claude-skill-registry / ライセンス: MIT