本文へ移動
cccskills
無料GitHub で公開日本語紹介

trpc-router

サーバー側のtRPCルーターや手続きを追加するときに、入力検証、認証済みモデルの受け渡し、応答形式、エラー処理を既存の規約に沿って組み立てるためのガイドです。

原文原文の説明を見る

Use for server TRPC routers, procedures and API endpoints in apps/server/src/routers.

lobehub/lobehubスター 83,506(GitHub 83,506 + cccskills 0)

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • サーバーにクエリや更新処理を追加したいとき
  • 入力値をZodで検証したいとき
  • 関連データをまとめて返したいとき
  • APIの応答とエラー処理を揃えたいとき

日本語での紹介

できること

サーバー側のtRPCルーター、クエリやミューテーションなどの手続きを追加するときに、ファイル配置や実装の基本形を確認できます。入力はZodスキーマで検証し、データモデルはミドルウェアでコンテキストに渡してから手続き内で利用します。クエリと更新処理の応答形式、TRPCErrorの扱い、ログの付け方、ルーター内の手続き名の並べ方も示されています。複数の関連データをまとめて返す詳細取得では、並列に読み込む例も確認できます。

こんなときに便利

新しいAPI手続きを追加する際に、プロジェクト内のルールを踏まえて実装したい場合に向いています。毎回モデルを作成する方法を避け、共通のミドルウェア経由で扱いたいときや、予期しないエラーを一定の形式で処理したいときにも役立ちます。画面やCLIで必要な関連情報を一度に取得するエンドポイントを設計する際にも参照できます。

使い方の例

  • 「このドメインの一覧取得クエリを、既存のルーター規約に合わせて追加して」
  • 「関連データもまとめて返すdetail手続きを作って」
  • 「このミューテーションの入力検証とエラー処理をガイドに沿って整えて」

注意点

対象はapps/server/src/routers配下のサーバー側tRPCルーターです。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

資料チェック

SKILL.md の記述から、注意が要る操作と導入の前提を AI が確認しました。点数は実際に動かした結果(実行検証)だけで付けています。

安全面送信・削除・コマンド実行などの扱いが明示されているか
A良好ログ出力とエラー変換を示し、外部送信や削除などの操作は記載されていない。
導入のしやすさ必要なツールや API キーが少ないか、書かれているか
A良好Zodとサーバー側ルーターを前提とするが、追加のキーや導入手順は不要とされる。

点数には入れていません。 2026年10月26日 時点で AI(OpenAI Codex)が判定しました。目安なので、入れる前に原文も確認してください。

評価が違うと思ったら、見直しを依頼する

どの項目が、なぜ違うと思うかを書いてください。ログインは不要です。内容を SKILL.md と照らし合わせて評価を作り直し、この欄に反映します。

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

含まれるファイル(1)

  • SKILL.md3.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

TRPC Router Guide

File Location

  • Routers: apps/server/src/routers/lambda/<domain>.ts
  • Helpers: apps/server/src/routers/lambda/_helpers/
  • Schemas: apps/server/src/routers/lambda/_schema/

Router Structure

Imports

import { TRPCError } from '@trpc/server';
import { z } from 'zod';

import { SomeModel } from '@/database/models/some';
import { authedProcedure, router } from '@/libs/trpc/lambda';
import { serverDatabase } from '@/libs/trpc/lambda/middleware';

Middleware: Inject Models into ctx

Always use middleware to inject models into ctx instead of creating new Model(ctx.serverDB, ctx.userId) inside every procedure.

const domainProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
  const { ctx } = opts;
  return opts.next({
    ctx: {
      fooModel: new FooModel(ctx.serverDB, ctx.userId),
      barModel: new BarModel(ctx.serverDB, ctx.userId),
    },
  });
});

Then use ctx.fooModel in procedures:

// Good
const model = ctx.fooModel;

// Bad - don't create models inside procedures
const model = new FooModel(ctx.serverDB, ctx.userId);

Exception: When a model needs a different userId (e.g., watchdog iterating over multiple users' tasks), create it inline.

Procedure Pattern

export const fooRouter = router({
  // Query
  find: domainProcedure.input(z.object({ id: z.string() })).query(async ({ input, ctx }) => {
    try {
      const item = await ctx.fooModel.findById(input.id);
      if (!item) throw new TRPCError({ code: 'NOT_FOUND', message: 'Not found' });
      return { data: item, success: true };
    } catch (error) {
      if (error instanceof TRPCError) throw error;
      console.error('[foo:find]', error);
      throw new TRPCError({
        cause: error,
        code: 'INTERNAL_SERVER_ERROR',
        message: 'Failed to find item',
      });
    }
  }),

  // Mutation
  create: domainProcedure.input(createSchema).mutation(async ({ input, ctx }) => {
    try {
      const item = await ctx.fooModel.create(input);
      return { data: item, message: 'Created', success: true };
    } catch (error) {
      if (error instanceof TRPCError) throw error;
      console.error('[foo:create]', error);
      throw new TRPCError({
        cause: error,
        code: 'INTERNAL_SERVER_ERROR',
        message: 'Failed to create',
      });
    }
  }),
});

Aggregated Detail Endpoint

For views that need multiple related data, create a single detail procedure that fetches everything in parallel:

detail: domainProcedure.input(idInput).query(async ({ input, ctx }) => {
  const item = await resolveOrThrow(ctx.fooModel, input.id);

  const [children, related] = await Promise.all([
    ctx.fooModel.findChildren(item.id),
    ctx.barModel.findByFooId(item.id),
  ]);

  return {
    data: { ...item, children, related },
    success: true,
  };
}),

This avoids the CLI or frontend making N sequential requests.

Conventions

  • Return shape: { data, success: true } for queries, { data?, message, success: true } for mutations
  • Error handling: re-throw TRPCError, wrap others with console.error + new TRPCError
  • Input validation: use zod schemas, define at file top
  • Router name: export const fooRouter = router({ ... })
  • Procedure names: alphabetical order within the router object
  • Log prefix: [domain:procedure] format, e.g. [task:create]

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

acceptance

無料概要あり

実際の製品を操作して、利用者が確認できる動作証拠を集め、検証計画に沿った受け入れレポートとして公開するスキルです。

  • 変更後の製品動作を実地で検証したいとき
  • 画面キャプチャなどの証拠を集めたいとき
  • 検証計画とレポートを作成したいとき
lobehub/lobehub8.4万2026年10月26日 更新

add-model-provider

無料概要あり

LobeHubにAIモデルプロバイダーを追加し、実行時連携からモデル表示、設定、ブランド表記、文書化、動作確認まで進めるスキルです。

  • 新しいAIモデルプロバイダーを追加したいとき
  • プロバイダーの設定手順や説明文を更新したいとき
  • 既存プロバイダーへのモデル追加要件を見極めたいとき
lobehub/lobehub8.4万2026年10月26日 更新

add-setting-env

無料概要あり

ユーザー設定の初期値をサーバー側の環境変数で切り替えるため、型定義や設定の組み立て、ユーザーストアへの反映、環境変数の例と説明書きを追加する手順です。

  • 設定の初期値を環境変数で変えたいとき
  • 設定項目をサーバー設定に追加したいとき
  • 環境変数の例と説明を更新したいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-runtime-hooks

無料概要あり

エージェント実行中の各段階をフックで監視し、ツール呼び出しの模擬・制御や人の承認、圧縮、サブエージェント処理に介入する仕組みを扱います。

  • エージェントの実行状況を記録したいとき
  • ツール結果をテスト用に模擬したいとき
  • Webhookでツール実行を許可・拒否したいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-signal

無料概要あり

イベントを起点にエージェントのバックグラウンド処理を組み立て、ソース・シグナル・アクション・ポリシーの役割分担や非同期連携を実装するためのスキルです。

  • イベント起点の処理を追加したいとき
  • バックグラウンド処理を非同期化したいとき
  • 重複実行を防ぐ仕組みを整えたいとき
lobehub/lobehub8.4万2026年10月26日 更新

agent-testing-bot

無料概要あり

DiscordやSlackなどの実際のチャットアプリでボットにメッセージを送り、応答を画面で確認する受け入れテストを行うスキルです。

  • 実際のDiscordでボット応答を確かめたいとき
  • SlackやTelegramの会話経路をテストしたいとき
  • macOSアプリ上の操作結果を画面で記録したいとき
lobehub/lobehub8.4万2026年10月26日 更新

lobehub のスキルをすべて見る

このスキルの問題を報告する