trpc-scaffolder
Scaffolds tRPC routers, procedures, and Zod schemas with full type safety following DevPrep AI patterns
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o trpc-scaffolder.zip https://jpskill.com/download/17257.zip && unzip -o trpc-scaffolder.zip && rm trpc-scaffolder.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17257.zip -OutFile "$d\trpc-scaffolder.zip"; Expand-Archive "$d\trpc-scaffolder.zip" -DestinationPath $d -Force; ri "$d\trpc-scaffolder.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
trpc-scaffolder.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
trpc-scaffolderフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 6
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
tRPC Scaffolder
Zod の検証を用いて、型安全な tRPC エンドポイントの作成を自動化します。
要約: スクリプトを実行してルーター/スキーマを作成し、_app.ts に登録し、スクリプトで検証します。
自動トリガー
キーワードによって自動的にトリガーされます:
- "new endpoint", "create endpoint", "tRPC procedure"
- "new router", "API", "Zod schema"
簡単な標準
ファイルの場所
lib/trpc/routers/
_app.ts # ここにすべてのルーターを登録します ⚠️
{name}.ts # ルーターファイル
lib/trpc/schemas/
{entity}.schema.ts # Zod スキーマ
ルーターのパターン
export const nameRouter = router({
doThing: publicProcedure
.input(inputSchema)
.output(outputSchema)
.mutation(async ({ input }) => { /* ロジック */ }),
});
スキーマのパターン
export const inputSchema = z.object({
field: z.string().min(1),
});
export type Input = z.infer<typeof inputSchema>; // ⚠️ 必須!
登録 (必須!)
// _app.ts 内
export const appRouter = router({
ai: aiRouter,
name: nameRouter, // ⬅️ ここに新しいルーターを追加します
});
スクリプトの実行
ルーターの作成
./.claude/skills/trpc-scaffolder/scripts/create-router.sh user
# 作成されるファイル: lib/trpc/routers/user.ts
# ⚠️ _app.ts への登録を忘れないでください!
プロシージャの追加
./.claude/skills/trpc-scaffolder/scripts/add-procedure.sh ai getHints query
# ルーターに追加するコードスニペットを出力します
スキーマの作成
./.claude/skills/trpc-scaffolder/scripts/create-schema.sh hint
# 作成されるファイル: lib/trpc/schemas/hint.schema.ts
セットアップの検証
./.claude/skills/trpc-scaffolder/scripts/validate-trpc.sh
# チェック項目: ルーターの登録、型のエクスポート
簡単なリファレンス
Query と Mutation
| Type | Use For | Method |
|---|---|---|
| Query | データの取得 (GET) | .query(async ({ input }) => ...) |
| Mutation | データの変更 (POST/PUT/DELETE) | .mutation(async ({ input }) => ...) |
一般的な Zod パターン
| Type | Pattern | Example |
|---|---|---|
| String | z.string().min(1).max(100) |
名前の検証 |
| Number | z.number().int().min(0).max(10) |
難易度 0-10 |
z.string().email() |
メールアドレスの検証 | |
| Optional | z.string().optional() |
オプションのフィールド |
| Array | z.array(z.string()).min(1) |
少なくとも 1 つのアイテム |
| Enum | z.enum(["a", "b", "c"]) |
固定の選択肢 |
| Object | z.object({ field: z.string() }) |
ネストされたオブジェクト |
命名規則
- ルーター:
{domain}Router(例:aiRouter,userRouter) - プロシージャ:
camelCase(例:generateQuestions,getHints) - スキーマ:
{action}{Entity}{Input\|Output}Schema - ファイル:
{entity}.schema.ts,{domain}.ts
エラーコード
| Code | When | Example |
|---|---|---|
NOT_FOUND |
リソースが存在しない | User not found |
BAD_REQUEST |
無効な入力 | Validation failed |
UNAUTHORIZED |
認証されていない | Login required |
FORBIDDEN |
許可されていない | Access denied |
INTERNAL_SERVER_ERROR |
サーバーエラー | API failure |
よくある修正
ルーターが登録されていない
// ❌ このステップを忘れていました
// ✅ _app.ts に追加:
import { userRouter } from "./user";
export const appRouter = router({ ai: aiRouter, user: userRouter });
型のエクスポートが不足している
// ❌ 型のないスキーマ
export const userSchema = z.object({ name: z.string() });
// ✅ 推論された型を常にエクスポートする
export type User = z.infer<typeof userSchema>;
プロシージャの型が間違っている
// ❌ データの取得に mutation を使用している
getData: publicProcedure.mutation(...)
// ✅ GET 操作には query を使用する
getData: publicProcedure.query(...)
スキーマの検証エラー
// ❌ 検証がない
field: z.string()
// ✅ 制約を追加する
field: z.string().min(1, "Field is required")
追加ドキュメントを読み込むタイミング
SKILL.md は以下について自己完結しています:
- ルーターとスキーマの作成
- スクリプトの実行
- よくあるエラーの修正
必要に応じて追加のドキュメントを読み込んでください:
| Need | Load |
|---|---|
| ステップバイステップのチュートリアル | docs/quick-start-guide.md |
| 高度な Zod パターン | docs/trpc-patterns.md (1-80 行目) |
| エラー処理戦略 | docs/trpc-patterns.md (150-220 行目) |
| テスト手順 | docs/trpc-patterns.md (220-270 行目) |
| コンテキストとミドルウェア | docs/trpc-patterns.md (80-150 行目) |
コード例:
- ✅ 完璧:
examples/good-router.ts,examples/good-schema.ts
完全なプロジェクトドキュメント: Docs/api-design.md, Docs/api-transition/trpc-migration.md
バージョン: 1.0.0 | 更新日: 2025年10月 パターン: 品質レビュー担当者の構造に従う (最適化済み)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
tRPC Scaffolder
Automate creation of type-safe tRPC endpoints with Zod validation.
TL;DR: Run scripts to create routers/schemas, register in _app.ts, validate with scripts.
Auto-Triggers
Auto-triggered by keywords:
- "new endpoint", "create endpoint", "tRPC procedure"
- "new router", "API", "Zod schema"
Quick Standards
File Locations
lib/trpc/routers/
_app.ts # Register all routers here ⚠️
{name}.ts # Router files
lib/trpc/schemas/
{entity}.schema.ts # Zod schemas
Router Pattern
export const nameRouter = router({
doThing: publicProcedure
.input(inputSchema)
.output(outputSchema)
.mutation(async ({ input }) => { /* logic */ }),
});
Schema Pattern
export const inputSchema = z.object({
field: z.string().min(1),
});
export type Input = z.infer<typeof inputSchema>; // ⚠️ Required!
Registration (Required!)
// In _app.ts
export const appRouter = router({
ai: aiRouter,
name: nameRouter, // ⬅️ Add new routers here
});
Run Scripts
Create Router
./.claude/skills/trpc-scaffolder/scripts/create-router.sh user
# Creates: lib/trpc/routers/user.ts
# ⚠️ Remember to register in _app.ts!
Add Procedure
./.claude/skills/trpc-scaffolder/scripts/add-procedure.sh ai getHints query
# Outputs code snippet to add to router
Create Schema
./.claude/skills/trpc-scaffolder/scripts/create-schema.sh hint
# Creates: lib/trpc/schemas/hint.schema.ts
Validate Setup
./.claude/skills/trpc-scaffolder/scripts/validate-trpc.sh
# Checks: router registration, type exports
Quick Reference
Query vs Mutation
| Type | Use For | Method |
|---|---|---|
| Query | Fetch data (GET) | .query(async ({ input }) => ...) |
| Mutation | Modify data (POST/PUT/DELETE) | .mutation(async ({ input }) => ...) |
Common Zod Patterns
| Type | Pattern | Example |
|---|---|---|
| String | z.string().min(1).max(100) |
Name validation |
| Number | z.number().int().min(0).max(10) |
Difficulty 0-10 |
z.string().email() |
Email validation | |
| Optional | z.string().optional() |
Optional field |
| Array | z.array(z.string()).min(1) |
At least 1 item |
| Enum | z.enum(["a", "b", "c"]) |
Fixed choices |
| Object | z.object({ field: z.string() }) |
Nested object |
Naming Conventions
- Routers:
{domain}Router(e.g.,aiRouter,userRouter) - Procedures:
camelCase(e.g.,generateQuestions,getHints) - Schemas:
{action}{Entity}{Input\|Output}Schema - Files:
{entity}.schema.ts,{domain}.ts
Error Codes
| Code | When | Example |
|---|---|---|
NOT_FOUND |
Resource doesn't exist | User not found |
BAD_REQUEST |
Invalid input | Validation failed |
UNAUTHORIZED |
Not authenticated | Login required |
FORBIDDEN |
Not authorized | Access denied |
INTERNAL_SERVER_ERROR |
Server error | API failure |
Common Fixes
Router Not Registered
// ❌ Forgot this step
// ✅ Add to _app.ts:
import { userRouter } from "./user";
export const appRouter = router({ ai: aiRouter, user: userRouter });
Missing Type Exports
// ❌ Schema without types
export const userSchema = z.object({ name: z.string() });
// ✅ Always export inferred types
export type User = z.infer<typeof userSchema>;
Wrong Procedure Type
// ❌ Using mutation for fetching data
getData: publicProcedure.mutation(...)
// ✅ Use query for GET operations
getData: publicProcedure.query(...)
Schema Validation Error
// ❌ No validation
field: z.string()
// ✅ Add constraints
field: z.string().min(1, "Field is required")
When to Load Additional Docs
SKILL.md is self-sufficient for:
- Creating routers and schemas
- Running scripts
- Fixing common errors
Load additional docs when needed:
| Need | Load |
|---|---|
| Step-by-step tutorial | docs/quick-start-guide.md |
| Advanced Zod patterns | docs/trpc-patterns.md (lines 1-80) |
| Error handling strategies | docs/trpc-patterns.md (lines 150-220) |
| Testing procedures | docs/trpc-patterns.md (lines 220-270) |
| Context & middleware | docs/trpc-patterns.md (lines 80-150) |
Code examples:
- ✅ Perfect:
examples/good-router.ts,examples/good-schema.ts
Full project docs: Docs/api-design.md, Docs/api-transition/trpc-migration.md
Version: 1.0.0 | Updated: October 2025 Pattern: Follows quality-reviewer structure (optimized)
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (4,874 bytes)
- 📎 README.md (2,217 bytes)
- 📎 scripts/add-procedure.sh (2,495 bytes)
- 📎 scripts/create-router.sh (2,066 bytes)
- 📎 scripts/create-schema.sh (2,196 bytes)
- 📎 scripts/validate-trpc.sh (3,693 bytes)