Communitygithub.com

Express.js & Fastify 開発スキル

Express.js と Fastify のパターン:ミドルウェア、ルート構成、Zod によるバリデーション、エラーハンドリング、プラグインシステム、リクエストライフサイクル、TypeScript 設定。

Express.js & Fastify 開発スキル とは?

このスキルは、Express.js と Fastify のベストプラクティスをまとめたものです。ルートをドメインごとに整理し、Zod を用いてすべての入力をバリデーションする方法、集中型エラーハンドラー(Express の catch-all ミドルウェア、Fastify の setErrorHandler)による一貫したエラー応答形式、TypeScript のジェネリクスを活用した型安全なリクエスト/レスポンスの定義方法をカバーします。また、CORS、ボディパーサー、認証、レート制限などのミドルウェアの適切な順序、async ルートハンドラによるエラー伝搬、Fastify のプラグインシステムによるルートとデコレータのカプセル化、JSON Schema または @fastify/type-provider-zod を用いた高速なバリデーションとシリアライゼーションについて詳しく説明しています。ヘルスチェックエンドポイントやグレースフルシャットダウンの実装パターンも含まれており、プロダクション環境での堅牢なサーバー構築に役立ちます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/express-fastify

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Express & Fastify

ルール

  • ルートはドメインごとに整理する:routes/users.ts、routes/orders.ts — リソースごとに1つのルーター
  • すべての入力を Zod でバリデーションする:処理の前に req.body、req.params、req.query をパースする
  • エラーハンドラーを一元化する:Express では catch-all ミドルウェア、Fastify では setErrorHandler
  • 一貫したエラー形式を返す:{ error: { code: string, message: string, details?: unknown } }
  • TypeScript:ジェネリクスでリクエスト/レスポンスを型付けする — Request<Params, ResBody, ReqBody, Query>
  • ミドルウェアの順序:CORS、ボディパーサー、認証、レート制限、ルート、エラーハンドラー
  • async ルートハンドラーを使用する — エラーキャッチでラップするか、express-async-errors を使用する
  • Fastify:プラグインシステムを使用してルートとデコレータをカプセル化する — fastify.register()
  • Fastify スキーマ:JSON Schema を定義するか、@fastify/type-provider-zod を使用してバリデーションとシリアライゼーションを行う
  • ヘルスチェック:GET /health — DB/Redis の接続状態を含めて 200 を返す
  • グレースフルシャットダウン:SIGTERM をリッスンし、新しい接続を停止し、処理中のリクエストを完了させる

パターン

// Express + Zod validation
import { Router } from "express";
import { z } from "zod";

const router = Router();
const CreateUserSchema = z.object({ email: z.string().email(), name: z.string().min(1) });

router.post("/users", async (req, res, next) => {
  try {
    const body = CreateUserSchema.parse(req.body);
    const user = await createUser(body);
    res.status(201).json(user);
  } catch (err) { next(err); }
});
// Fastify + Zod type provider
import Fastify from "fastify";
import { serializerCompiler, validatorCompiler, ZodTypeProvider } from "fastify-type-provider-zod";

const app = Fastify().withTypeProvider<ZodTypeProvider>();
app.setValidatorCompiler(validatorCompiler);
app.setSerializerCompiler(serializerCompiler);

app.post("/users", { schema: { body: CreateUserSchema } }, async (req) => {
  return createUser(req.body); // fully typed
});

避けるべきこと

  • ルートハンドラーにビジネスロジックを置かない — サービス/ドメインレイヤーに抽出する
  • Express での async エラーハンドリングを忘れない — ハンドルされていない拒否はプロセスをクラッシュさせる
  • すべてのルートを1つのファイルにインポートしない — モジュール化のために router.use() や Fastify プラグインを使用する
  • 「フロントエンドでバリデーションしているから」とサーバーサイドのバリデーションを省略しない — 常にサーバーサイドでバリデーションする

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

cmdk integration, Cmd+K trigger, fuzzy search, grouped actions, keyboard navigation, and dynamic action registration.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Threaded comments, @mentions, reactions, moderation queue, optimistic UI, and cursor pagination.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Drizzle schema definition, push vs migrate, type-safe queries, relations, transactions, and prepared statements.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

関連スキル