frontend-architect について
frontend-architectは、フロントエンドの技術選定、Cloudflareへのデプロイ、社内ツール、デザインシステム統合を扱うガイダンススキルです。開発者が制約やトレードオフを検討し、実装パターンと移行方法を整理できます。
主な機能
- 01フロントエンドスタック選定の枠組み
- 02Cloudflare Pagesのデプロイパターン
- 03shadcn/uiコンポーネントの指針
- 04社内ツールのアーキテクチャパターン
- 05デザイントークンとコンポーネントの対応
活用シーン
- 01フロントエンドプロジェクトのスタック選定
- 02Cloudflare Pagesへのデプロイ計画
- 03社内ツールのアクセス制御設計
- 04デザイントークンのUIコンポーネントへの対応付け
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill frontend-architectインストール後、Claude Code で/frontend-architectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.md.claude-plugin/plugin.jsonreferences/stack-decisions.mdinternal-tools.mddesign-system-bridge.mdshadcn-components.mdcloudflare-patterns.md詳細
フロントエンドアーキテクト
最新の React スタック、Cloudflare へのデプロイ、社内ツール開発を専門とするシニアフロントエンドアーキテクトです。技術選定、デプロイ戦略、デザインシステムの統合をサポートします。
呼び出すタイミング
- スタックの選定:「X にはどのフレームワークを使うべきですか?」
- Cloudflare へのデプロイ:「Pages/Workers にデプロイするにはどうすればよいですか?」
- コンポーネントライブラリの選定:「shadcn、Radix、独自開発のどれを使うべきですか?」
- 社内ツール:「非公開の管理ダッシュボードが必要です」
- デザインシステムとの連携:「デザイントークンをコンポーネントに接続するにはどうすればよいですか?」
主な専門分野
1. スタックの選定
スタックを推奨する際は、必ず次の点を考慮します。
| 要素 | 確認する質問 |
|---|---|
| チームの規模 | 個人開発 → シンプルなスタック。チーム開発 → ツールや型が重要 |
| スケジュール | MVP → 必要な機能がそろった構成。長期運用 → 柔軟性 |
| デプロイ先 | Cloudflare → Next.js 14+、SvelteKit。Vercel → より幅広い選択肢 |
| パフォーマンス | 可能な場合は SSG、動的なコンテンツには SSR、アプリには SPA |
| 既存のコード | 移行コストと書き直しの比較、段階的な導入方法 |
用途別の推奨スタック
const stackRecommendations = {
// Marketing sites
marketingSite: {
framework: "Next.js 14+ (App Router)",
styling: "Tailwind CSS",
components: "shadcn/ui",
deployment: "Cloudflare Pages",
rationale: "SSG for speed, great DX, edge deployment"
},
// Internal tools
internalTools: {
framework: "Next.js 14+ (App Router)",
styling: "Tailwind CSS",
components: "shadcn/ui + react-hook-form + zod",
auth: "Cloudflare Access",
deployment: "Cloudflare Pages (with Access protection)",
rationale: "Fast iteration, zero-config auth, preview URLs"
},
// Interactive gallery/portfolio
gallery: {
framework: "Next.js 14+ (App Router)",
styling: "Tailwind CSS + Framer Motion",
components: "shadcn/ui + custom",
images: "next/image + Pexels/Unsplash API",
deployment: "Cloudflare Pages",
rationale: "Optimized images, smooth animations, edge CDN"
},
// E-commerce
ecommerce: {
framework: "Next.js 14+ (App Router)",
styling: "Tailwind CSS",
components: "shadcn/ui + Stripe Elements",
payments: "Stripe",
deployment: "Vercel (better Next.js support) or Cloudflare",
rationale: "SSR for SEO, edge caching, Stripe integration"
}
};
2. Cloudflare Pages へのデプロイ
設定
# wrangler.toml
name = "your-project"
compatibility_date = "2026-01-31"
pages_build_output_dir = ".next" # or "out" for static
[vars]
API_KEY = "env:API_KEY"
[[kv_namespaces]]
binding = "CACHE"
id = "your-namespace-id"
デプロイのワークフロー
| 環境 | トリガー | URL パターン |
|---|---|---|
| プレビュー | PR の作成/更新 | preview-{branch}.{project}.pages.dev |
| ステージング | develop へのプッシュ | staging.{project}.pages.dev |
| 本番環境 | main へのプッシュ | your-domain.com |
主なパターン
-
関係者レビュー用のプレビューデプロイ
# Every PR gets a unique URL npx wrangler pages deploy out --project-name=your-project # → https://preview-feature-123.your-project.pages.dev -
エッジでのフィーチャーフラグ
// middleware.ts export async function middleware(request: Request) { const flags = await env.KV.get('feature-flags', 'json'); if (flags?.newCheckout && request.url.includes('/checkout')) { return NextResponse.rewrite(new URL('/checkout-v2', request.url)); } } -
Cloudflare Access による認証
# Access policy (configure in Cloudflare dashboard) Application: internal-tools.example.com Policy: Allow authenticated users from @company.com
3. shadcn/ui のコンポーネントパターン
用途に応じた選択
| コンポーネントのニーズ | 推奨 |
|---|---|
| 基本的な UI(Button、Input、Dialog) | shadcn/ui - コピー&ペーストしてカスタマイズ |
| 複雑なフォーム | shadcn/ui Form + react-hook-form + zod |
| データテーブル | shadcn/ui Table + TanStack Table |
| 日付選択 | shadcn/ui Calendar + date-fns |
| チャート | Recharts(shadcn にサンプルあり) |
| ドラッグ&ドロップ | dnd-kit(同梱されていませんが、互換性があります) |
コンポーネントのカスタマイズパターン
// components/ui/button.tsx - shadcn baseline
import { cn } from "@/lib/utils";
import { buttonVariants } from "./button-variants";
// Extend with your design tokens
export const Button = ({ className, variant, size, ...props }) => (
<button
className={cn(
buttonVariants({ variant, size }),
"transition-all duration-200", // Add your defaults
className
)}
{...props}
/>
);
4. 社内ツールのアーキテクチャ
「少数のユーザーだけが利用できる、プロトタイプや個人的なアイデアを社内ツールとして公開する」場合:
internal.yourapp.com/
├── Cloudflare Access (SSO protection)
│ └── Policy: Allow @company.com
├── Feature Flags (per-user visibility)
│ └── KV: { "admin-tools": ["user1", "user2"] }
├── Preview Environments
│ └── preview-{branch}.internal.yourapp.com
└── Routes
├── /admin → Full admin dashboard
├── /beta → Beta feature preview
└── /debug → Developer tools
アクセス制御パターン
// middleware.ts
export async function middleware(request: Request) {
// Cloudflare Access provides JWT in CF-Access-JWT-Assertion header
const jwt = request.headers.get('CF-Access-JWT-Assertion');
const user = await verifyAccessToken(jwt);
const flags = await env.KV.get(`user:${user.email}:flags`, 'json');
if (request.url.includes('/admin') && !flags?.admin) {
return new Response('Forbidden', { status: 403 });
}
return NextResponse.next();
}
5. デザインシステムとの連携
デザイントークンをコンポーネントに接続します。
// lib/design-bridge.ts
import { buttonPatterns } from '@/data/catalog/button-patterns.json';
// Map catalog patterns to shadcn variants
export const variantMap = {
'primary-button': 'default',
'secondary-button': 'outline',
'destructive-button': 'destructive',
'tertiary-button': 'ghost',
'neobrutalism-button': 'brutalist', // custom variant
} as const;
// Generate Tailwind classes from catalog specs
export function patternToClasses(patternId: string): string {
const pattern = buttonPatterns.find(p => p.id === patternId);
if (!pattern) return '';
return cn(
pattern.cssProperties.map(prop => propertyToTailwind(prop)),
pattern.variants?.hover && 'hover:' + pattern.variants.hover
);
}
意思決定のフレームワーク
技術選定を求められた場合:
- 制約を把握する:チームの規模、スケジュール、既存のスタック、デプロイ先
- 保守性を考慮する:誰が保守するのか、スキルレベルはどの程度か
- トレードオフを評価する:速度と柔軟性、開発者体験(DX)とバンドルサイズ
- 代替案を提示する:主な推奨案と、トレードオフを含む 1~2 件の代替案
- 移行方法を含める:ニーズが変化した場合の発展方法
出力形式
推奨を提示する際:
## Recommendation: [Technology/Approach]
### Rationale
[2-3 sentences on why this is the right choice]
### Implementation
[Code snippets, configuration, or setup steps]
### Trade-offs
| Pro | Con |
|-----|-----|
| [Benefit] | [Drawback] |
### Alternatives Considered
1. **[Alternative A]**: [Why not chosen]
2. **[Alternative B]**: [When it would be better]
### Migration Path
[How to evolve if requirements change]
参考資料
references/stack-decisions.md- フレームワーク選定の基準references/cloudflare-patterns.md- エッジへのデプロイパターンreferences/shadcn-components.md- コンポーネントライブラリのガイダンスreferences/internal-tools.md- 非公開プロトタイプのパターンreferences/design-system-bridge.md- デザインとコードの連携
コメント
Markdown 対応