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

quetrex-architect

Use when implementing new features in Quetrex. Ensures TDD, TypeScript strict mode, Next.js App Router patterns, ShadCN UI components, and security best practices are followed. Updated for November 2025 standards.

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

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

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

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

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して quetrex-architect.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → quetrex-architect フォルダができる
  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 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Quetrex アーキテクチャ・エンフォーサー

どのような時に使うか

  • 新規機能の作成時
  • 既存コードのリファクタリング時
  • PR のレビュー時
  • パターン準拠の確認時

プロセス

  1. プロジェクトのコンテキストについて CLAUDE.md を読む
  2. アーキテクチャパターンについて .quetrex/memory/patterns.md を読む (存在する場合)
  3. 機能が正しいパターンを使用しているか確認する:
    • TypeScript strict (any なし、@ts-ignore なし)
    • API ルートに対する Zod バリデーション
    • Server Components と Client Components の使い分け
    • ストリーミングに対する SSE パターン
  4. 違反が見つかった場合、正しいパターンを説明する
  5. TDD に従って実装をガイドする

強制するパターン

TypeScript Strict Mode

// ✅ 良い例: 明示的な型
function calculateTotal(items: CartItem[]): number {
  return items.reduce((sum, item) => sum + item.price, 0)
}

// ❌ 悪い例: 'any' の使用
function processData(data: any) { }

// ✅ 良い例: 型ガードの使用
function isCartItem(obj: unknown): obj is CartItem {
  return typeof obj === 'object' && obj !== null && 'price' in obj
}

Next.js App Router パターン

// ✅ 良い例: Server Component (デフォルト)
export default async function DashboardPage() {
  const projects = await prisma.project.findMany()
  return <ProjectList projects={projects} />
}

// ✅ 良い例: Client Component (必要な場合)
'use client'
export function InteractiveButton() {
  const [count, setCount] = useState(0)
  return <button onClick={() => setCount(count + 1)}>{count}</button>
}

// ❌ 悪い例: Async Client Component
'use client'
export default async function BadComponent() { } // エラー

Zod バリデーション

// ✅ 良い例: すべての API 入力を検証する
import { z } from 'zod'

const createProjectSchema = z.object({
  name: z.string().min(1).max(100),
  description: z.string().optional(),
})

export async function POST(request: Request) {
  const body = await request.json()
  const validated = createProjectSchema.parse(body) // 無効な場合はエラーをスロー
  // ... 検証済みのデータを使用
}

// ❌ 悪い例: 検証されていない入力
export async function POST(request: Request) {
  const { name, description } = await request.json() // バリデーションなし
}

ShadCN UI パターン (2025年11月標準)

// ✅ 良い例: ShadCN UI コンポーネントを使用する
import { Button } from "@/components/ui/button"
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"
import { Form, FormField, FormItem, FormLabel, FormControl } from "@/components/ui/form"

// ✅ 良い例: DialogTrigger を asChild と共に使用する
<DialogTrigger asChild>
  <Button>Open</Button>
</DialogTrigger>

// ❌ 悪い例: ShadCN なしでカスタムボタンを作成する
<button className="px-4 py-2 bg-blue-500">Bad</button>

// ✅ 良い例: React Hook Form + Zod と共に Form コンポーネントを使用する
const form = useForm<z.infer<typeof schema>>({
  resolver: zodResolver(schema),
})

<Form {...form}>
  <FormField ... />
</Form>

// ❌ 悪い例: アンコントロールドフォームを使用する
<form>
  <input name="email" /> {/* バリデーションなし */}
</form>

→ 参照: 完全なコンポーネントライブラリについては、shadcn-ui-patterns skill を参照してください

セキュリティパターン

// ❌ 悪い例: ハードコードされたシークレット
const apiKey = 'sk_live_abc123'

// ✅ 良い例: 環境変数
const apiKey = process.env.OPENAI_API_KEY
if (!apiKey) throw new Error('OPENAI_API_KEY not configured')

// ❌ 悪い例: SQL インジェクション
const query = `SELECT * FROM users WHERE email = '${email}'`

// ✅ 良い例: パラメータ化されたクエリ (Drizzle)
const user = await db.query.users.findFirst({ where: eq(users.email, email) })

TDD の要件

  1. 最初にテストを書く
  2. テストが失敗することを確認する
  3. 実装を書く
  4. テストが成功することを確認する
  5. 必要に応じてリファクタリングする

カバレッジの閾値

  • 全体: 75% 以上
  • ビジネスロジック (src/services/): 90% 以上
  • ユーティリティ (src/utils/): 90% 以上
  • UI コンポーネント: 60% 以上

よくある間違い

  • 'any' 型の使用 (明示的な型または unknown を推奨)
  • @ts-ignore の使用 (根本的な問題の修正を推奨)
  • Async Client Components (Server Component または async の削除を推奨)
  • API ルートでの Zod バリデーションの欠落
  • ハードコードされたシークレット (環境変数を推奨)
  • 本番コードでの console.log (適切なロガーを推奨)

出力フォーマット

違反が見つかった場合:

  1. ファイルと行番号と共に各違反をリストする
  2. なぜそれが違反なのかを説明する
  3. 正しいパターンを示す
  4. それを修正するためのコード例を提供する
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Quetrex Architecture Enforcer

When to Use

  • Creating new features
  • Refactoring existing code
  • Reviewing PRs
  • Ensuring pattern compliance

Process

  1. Read CLAUDE.md for project context
  2. Read .quetrex/memory/patterns.md for architectural patterns (if exists)
  3. Check if feature uses correct patterns:
    • TypeScript strict (no any, no @ts-ignore)
    • Zod validation for API routes
    • Server Components vs Client Components
    • SSE pattern for streaming
  4. If violations found, explain correct pattern
  5. Guide implementation following TDD

Patterns to Enforce

TypeScript Strict Mode

// ✅ DO: Explicit types
function calculateTotal(items: CartItem[]): number {
  return items.reduce((sum, item) => sum + item.price, 0)
}

// ❌ DON'T: Using 'any'
function processData(data: any) { }

// ✅ DO: Use type guards
function isCartItem(obj: unknown): obj is CartItem {
  return typeof obj === 'object' && obj !== null && 'price' in obj
}

Next.js App Router Patterns

// ✅ DO: Server Component (default)
export default async function DashboardPage() {
  const projects = await prisma.project.findMany()
  return <ProjectList projects={projects} />
}

// ✅ DO: Client Component (when needed)
'use client'
export function InteractiveButton() {
  const [count, setCount] = useState(0)
  return <button onClick={() => setCount(count + 1)}>{count}</button>
}

// ❌ DON'T: Async Client Component
'use client'
export default async function BadComponent() { } // ERROR

Zod Validation

// ✅ DO: Validate all API input
import { z } from 'zod'

const createProjectSchema = z.object({
  name: z.string().min(1).max(100),
  description: z.string().optional(),
})

export async function POST(request: Request) {
  const body = await request.json()
  const validated = createProjectSchema.parse(body) // Throws if invalid
  // ... use validated data
}

// ❌ DON'T: Unvalidated input
export async function POST(request: Request) {
  const { name, description } = await request.json() // No validation
}

ShadCN UI Patterns (November 2025 Standard)

// ✅ DO: Use ShadCN UI components
import { Button } from "@/components/ui/button"
import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"
import { Form, FormField, FormItem, FormLabel, FormControl } from "@/components/ui/form"

// ✅ DO: Use DialogTrigger with asChild
<DialogTrigger asChild>
  <Button>Open</Button>
</DialogTrigger>

// ❌ DON'T: Create custom buttons without ShadCN
<button className="px-4 py-2 bg-blue-500">Bad</button>

// ✅ DO: Use Form component with React Hook Form + Zod
const form = useForm<z.infer<typeof schema>>({
  resolver: zodResolver(schema),
})

<Form {...form}>
  <FormField ... />
</Form>

// ❌ DON'T: Use uncontrolled forms
<form>
  <input name="email" /> {/* No validation */}
</form>

→ See: shadcn-ui-patterns skill for complete component library

Security Patterns

// ❌ DON'T: Hardcoded secrets
const apiKey = 'sk_live_abc123'

// ✅ DO: Environment variables
const apiKey = process.env.OPENAI_API_KEY
if (!apiKey) throw new Error('OPENAI_API_KEY not configured')

// ❌ DON'T: SQL injection
const query = `SELECT * FROM users WHERE email = '${email}'`

// ✅ DO: Parameterized queries (Drizzle)
const user = await db.query.users.findFirst({ where: eq(users.email, email) })

TDD Requirements

  1. Write tests FIRST
  2. Verify tests FAIL
  3. Write implementation
  4. Verify tests PASS
  5. Refactor as needed

Coverage Thresholds

  • Overall: 75%+
  • Business Logic (src/services/): 90%+
  • Utilities (src/utils/): 90%+
  • UI Components: 60%+

Common Mistakes to Catch

  • Using 'any' type (suggest explicit types or unknown)
  • Using @ts-ignore (suggest fixing underlying issue)
  • Async Client Components (suggest Server Component or remove async)
  • Missing Zod validation on API routes
  • Hardcoded secrets (suggest environment variables)
  • console.log in production code (suggest proper logger)

Output Format

When violations found:

  1. List each violation with file and line number
  2. Explain why it's a violation
  3. Show correct pattern
  4. Provide code example to fix it