mcpField
T
trpc

trpc

github.com/oakoss開発21104 回インストール12 週間前に更新
リポジトリ

trpc について

tRPCは、TypeScriptのフルスタックアプリ向けの型安全なAPIフレームワークです。コード生成やスキーマなしでサーバーの手続きからクライアント型を推論し、APIの迅速な変更やリアルタイム購読に対応します。

主な機能

  1. 01共有型によるAPI推論
  2. 02クエリ、ミューテーション、購読
  3. 03入出力の検証
  4. 04ミドルウェアとリクエストコンテキスト
  5. 05Reactとバニラクライアント
  6. 06バッチ処理と複数のトランスポートリンク

活用シーン

  1. 01TypeScriptフルスタックアプリのAPI構築
  2. 02monorepoでのAPI型共有
  3. 03WebSocketまたはSSE購読の実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill trpc

インストール後、Claude Code で/trpcを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
adapter-setup.md
error-handling.md
middleware-context.md
react-integration.md
router-procedures.md
server-callers.md
subscriptions.md
testing-patterns.md

詳細

tRPC

概要

tRPC は、コード生成やスキーマを使わずに、サーバーとクライアント間で TypeScript の型を共有することで、エンドツーエンドの型安全な API を実現します。サーバーはルーター内でプロシージャ(クエリ、ミューテーション、サブスクリプション)を定義し、クライアントはエクスポートされた AppRouter 型からすべての型を推論します。

使用する場合: 型安全な API レイヤーが必要な TypeScript のフルスタックアプリ、型を共有するモノレポ、リアルタイムサブスクリプション、OpenAPI/GraphQL のオーバーヘッドなしで API を迅速に反復開発する場合。

使用しない場合: TypeScript 以外のクライアントが利用する公開 API(REST/GraphQL を使用)、多言語バックエンド、OpenAPI 仕様の生成を主要な出力として必要とするプロジェクト。

クイックリファレンス

パターンAPI主なポイント
初期化initTRPC.context<Ctx>().create()単一のエントリーポイントで、一度だけ設定します
ルーターt.router({ ... })t.mergeRouters() でルーターをネストします
クエリt.procedure.input(schema).query(fn)読み取り操作で、クライアントによってキャッシュされます
ミューテーションt.procedure.input(schema).mutation(fn)書き込み操作
サブスクリプションt.procedure.subscription(fn)WebSocket または SSE によるリアルタイム通信
ミドルウェアt.middleware(fn).use() でチェーンし、next({ ctx }) でコンテキストを拡張します
スタンドアロンミドルウェアexperimental_standaloneMiddleware<{}>()明示的な型制約を指定して再利用できます
コンテキストcreateContext({ req, res })リクエストごとに作成され、すべてのプロシージャに渡されます
サーバー側コーラーt.createCallerFactory(router)型安全なサーバー側プロシージャ呼び出し
エラーthrow new TRPCError({ code, message })HTTP ステータスコードにマッピングされます
エラーフォーマッターinitTRPC.create({ errorFormatter })エラーの形状をカスタマイズし、Zod エラーを公開します
入力検証.input(zodSchema)複数の .input() 呼び出しはマージされます(共通部分)
出力検証.output(zodSchema)レスポンスから余分なフィールドを除外します
React フックtrpc.useQuery() / trpc.useMutation()@tanstack/react-query を基盤としています
React ユーティリティtrpc.useUtils()キャッシュの無効化、プリフェッチ、setData を実行します
Suspense クエリtrpc.useSuspenseQuery()Suspense に対応したデータ取得
React サブスクリプションtrpc.useSubscription(input, opts)リアルタイムイベント用の onData コールバック
Vanilla クライアントcreateTRPCClient<AppRouter>({ links })React への依存なし
バッチリンクhttpBatchLink({ url })1 回の HTTP 呼び出しにリクエストをまとめます
ストリームリンクhttpBatchStreamLink({ url })レスポンスを準備でき次第ストリーミングします
WS リンクwsLink({ client: wsClient })サブスクリプション用の WebSocket トランスポート
スプリットリンクsplitLink({ condition, true, false })操作を異なるトランスポートに振り分けます
ロガーリンクloggerLink()開発環境でリクエスト/レスポンスをデバッグします
データトランスフォーマーinitTRPC.create({ transformer })日付、Map、Set をシリアライズします(superjson)
Fetch アダプターfetchRequestHandler({ endpoint, req })Cloudflare Workers、Deno、Bun、Next.js
プロシージャのチェーン化publicProcedure.use(auth).use(rateLimit)再利用可能なプロシージャの基盤を構築します

よくある間違い

間違い正しいパターン
t オブジェクト全体をエクスポートするt.router、t.procedure、t.middleware、t.createCallerFactory のみをエクスポートする
プロシージャ内でコンテキストを作成するアダプターのセットアップ時にコンテキストを作成します。自動的に受け渡されます
コンテキスト型に any を使用するinitTRPC.context<MyContext>().create() でコンテキスト型を定義する
プロシージャ内でエラーを捕捉するエラーを伝播させます。アダプターの onError またはエラーフォーマッターを使用します
クライアントでサーバーコードをインポートするtype AppRouter のみをインポートし、実行時のサーバーコードはインポートしない
本番環境のリクエストハンドラーで createCaller を使用する型安全で再利用可能な呼び出し元には createCallerFactory を使用する
検証せずに入力を定義する常に Zod、Valibot、または ArkType のスキーマで検証する
ルーターを誤った方法でネストするキーにはドット記法または t.mergeRouters() を使用し、深くネストしない
クライアントとサーバーで異なるトランスフォーマーを使用する両側で同じトランスフォーマー(例:superjson)を使用する
コンポーネントのレンダー内で QueryClient を作成するコンポーネントの外で一度だけ作成するか、useState の初期化関数を使用する
フックに TypeScript のジェネリクスを手動で指定するルーターのプロシージャに型を付け、クライアントには型推論を適用させる
queryFn の fetch に signal を渡さないtRPC React が中断シグナルを自動的に処理します

インストール

pnpm add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query zod

サブスクリプションには、ws(サーバー)を追加し、wsLink(クライアント)を設定します。SSE ベースのサブスクリプションには、代わりに httpBatchStreamLink を使用します。

委任

  • プロシージャの検出:Explore エージェントを使用します
  • ルーターアーキテクチャのレビュー:Task エージェントを使用します
  • コードレビュー:code-reviewer エージェントに委任します

tanstack-query スキルが利用可能な場合は、クエリ/ミューテーションのキャッシュ、無効化、楽観的更新のパターンをこのスキルに委任します。 zod-validation スキルが利用可能な場合は、入力スキーマの設計と検証のパターンをこのスキルに委任します。 drizzle-orm スキルが利用可能な場合は、プロシージャ内のデータベースクエリのパターンをこのスキルに委任します。 vitest-testing スキルが利用可能な場合は、テストランナーの設定とアサーションのパターンをこのスキルに委任します。 hono スキルが利用可能な場合は、Hono フレームワークのルーティングとミドルウェアのパターンをこのスキルに委任します。

参考資料

コメント