mcpField
F
fastify-best-practise

fastify-best-practise

github.com/thecodepace開発13342 回インストール2 週間前に更新
リポジトリ

fastify-best-practise について

Fastifyアプリケーションの構築やレビューを行うエージェント向けのルール集です。トピック別に、誤った例と適切な例、影響度、公式ドキュメントへの参照をまとめています。

主な機能

  1. 01トピック別のFastifyルール
  2. 02誤例と適切な例
  3. 03ルールの影響度表示
  4. 04本番運用に関する指針
  5. 05タスクに応じたルール選択

活用シーン

  1. 01新しいFastifyプロジェクトの構築
  2. 02ルートやスキーマのパターン確認
  3. 03認証とエラー処理の設計
  4. 04テストとデプロイの準備

インストール

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

$npx skills add https://github.com/thecodepace/fastify-skills --skill fastify-best-practise

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

同梱ファイル

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

rules/
_template.md
authentication.md
autoload.md
clean-architecture.md
configuration.md
content-type-parser.md
cors-security.md
create-plugin.md
create-server.md
database-integration.md
database-migrations.md
decorators.md
delay-accepting-requests.md
deployment.md
encapsulation.md
error-handling.md
hooks-lifecycle.md
http-proxy.md
http-query.md
http2.md
logging.md
multipart.md
performance.md
rate-limiting.md
route-best-practices.md
schema-validation-zod.md
serialization-zod.md
serialization.md
test-containers.md
testing.md

詳細

Fastify のベストプラクティス

本番環境に対応した Fastify アプリケーションを構築するための、厳選されたルールとパターンです。各ルールには、説明付きの誤った例と正しい例が含まれています。

仕組み

  1. エージェントは、ユーザーが Fastify を使用している、または Fastify のパターンについて質問していることを特定します
  2. トピック(ルート、バリデーション、カプセル化など)に基づいて、関連するルールファイルが読み込まれます
  3. コードの生成またはレビュー時に、エージェントはそのルールのベストプラクティスを適用します

ルール

ルールは rules/ ディレクトリ内でトピックごとに整理されています。各ルールは、影響度の評価、誤った例と正しい例、公式ドキュメントへの参照を含む一貫した形式に従っています。

ルールファイル影響説明
設定configuration.mdHIGH環境設定、ロガーのセットアップ、セキュリティオプション、グレースフルシャットダウン
サーバーの作成create-server.mdLOW-MEDIUM再利用可能でテストしやすいサーバーセットアップには、buildServer() ファクトリー関数を使用します
プラグインの作成create-plugin.mdLOW-MEDIUMfastify-plugin を使用して、再利用可能な機能をプラグインにカプセル化します
自動読み込みautoload.mdHIGH@fastify/autoload を使用して、ファイルシステムからプラグインとルートを自動的に読み込みます
ルートのベストプラクティスroute-best-practices.mdMEDIUMプラグイン/プレフィックスでルートを整理し、非同期ハンドラーとすべてのルートオプションを使用します
スキーマ検証(Zod)schema-validation-zod.mdHIGHZod と fastify-type-provider-zod による型安全な検証
シリアライズ(Zod)serialization-zod.mdHIGHZod スキーマによる型安全なレスポンスのシリアライズ、出力検証、互換性に関する注意事項
カプセル化encapsulation.mdHIGH適切なスコープ分離と、fastify-plugin を使用する場面
エラー処理error-handling.mdHIGHカスタムエラーハンドラー、@fastify/error、404 の処理、構造化レスポンス
フックとライフサイクルhooks-lifecycle.mdMEDIUMすべてのリクエスト/返信およびアプリケーションフック:onRequest、preParsing、preValidation、preHandler、preSerialization、onError、onSend、onResponse、onReady、onClose
ロギングlogging.mdHIGH組み込みの Pino ロガー、リクエストの関連付け、機密情報のマスキング、子ロガー
認証authentication.mdHIGH@fastify/jwt による JWT 認証、@fastify/auth による複数の認証方式
テストtesting.mdHIGHinject()、buildServer パターン、vitest/node:test によるテスト
TypeScripttypescript-integration.mdMEDIUM型プロバイダー、モジュールの拡張、型付きデコレーター
デコレーターdecorators.mdMEDIUMdecorate/decorateRequest/decorateReply で Fastify インスタンス、リクエスト、返信を拡張します
コンテンツタイプパーサーcontent-type-parser.mdHIGHカスタムコンテンツタイプパーサー、ボディ制限、マルチパートアップロード、包括的な照合と正規表現による照合
マルチパートとファイルアップロードmultipart.mdHIGH@fastify/multipart によるファイルアップロード、ストリーミング、サイズ制限、MIME 検証
WebSocketwebsockets.mdHIGH@fastify/websocket によるリアルタイム双方向接続、ライフサイクル処理、ブロードキャスト、認証
HTTP プロキシhttp-proxy.mdHIGH@fastify/http-proxy と @fastify/reply-from による API ゲートウェイ/BFF パターン、認証フック、エラー処理、複数のアップストリームへのルーティング
HTTP QUERY メソッドhttp-query.mdHIGHFastify 5.11+ のネイティブな RFC 10008 QUERY ルート、ボディとメディアタイプの検証、安全で冪等なハンドラー、キャッシュと CORS の制約
型プロバイダーtype-providers.mdHIGHTypeBox、json-schema-to-ts、Zod プロバイダーの比較、.withTypeProvider<T>()、プラグイン内のスコープ付きプロバイダー、プロバイダー固有のプラグイン型
デプロイdeployment.mdHIGHclose-with-grace によるグレースフルシャットダウン、生存/準備プローブ、0.0.0.0 でのリッスン、trustProxy、マルチステージ Dockerfile、AWS Lambda アダプター
HTTP/2http2.mdMEDIUMHTTP/1.1 フォールバック付きの TLS 上での HTTP/2(h2)、または内部サービス向けのプレーンテキスト h2c を有効化。型付き buildServer ファクトリー
CORS とセキュリティヘッダーcors-security.mdHIGH@fastify/cors の許可リスト(静的および動的)、@fastify/helmet の CSP/HSTS、登録順序、統合セキュリティプラグイン
リクエスト受付の遅延delay-accepting-requests.mdHIGH依存関係の準備が整うまで 503 でリクエストを拒否。Kubernetes の生存プローブと準備プローブ
データベース統合database-integration.mdHIGHpg プールを Fastify プラグインとして登録し、安全なクエリには @nearform/sql を使用します
データベースマイグレーションdatabase-migrations.mdHIGH起動時に Postgrator の SQL マイグレーションを実行し、適用済みファイルは決して変更しません
テストコンテナーtest-containers.mdHIGH統合テスト用に Testcontainers で実際の Postgres コンテナーを起動します
クリーンアーキテクチャclean-architecture.mdHIGH純粋なサービス層関数と薄いルートハンドラー、明示的な依存性注入
単体テストunit-testing.mdHIGHモックのデータベーススタブを使用し、サービス関数を分離して単体テストします
パフォーマンスperformance.mdHIGHスキーマの事前コンパイル、シリアライズ、負荷制御、ストリーミング、ベンチマーク
レート制限rate-limiting.mdHIGH@fastify/rate-limit による API の保護、ルートごとの上書き、Redis ストア、カスタムキー
シリアライズserialization.mdHIGHJSON Schema と fast-json-stringify によるレスポンスのシリアライズ

使い方

Fastify のコードを生成する際は、対象のトピックに関連するルールファイルを読み、記載されたパターンを適用してください。新しいプロジェクトでは、すべてのルールが該当します。特定のタスクでは、必要なものだけを読み込んでください。

  • 新しいプロジェクトのセットアップ:create-server.md、configuration.md、autoload.md、encapsulation.md、typescript-integration.md
  • ルートの追加:route-best-practices.md、autoload.md、schema-validation-zod.md、serialization-zod.md、serialization.md
  • 共有サービスの追加:create-plugin.md、autoload.md、encapsulation.md
  • 設定/環境:configuration.md
  • エラー処理:error-handling.md
  • 認証/ミドルウェア:authentication.md、hooks-lifecycle.md、encapsulation.md
  • レート制限:rate-limiting.md、hooks-lifecycle.md
  • カスタムデコレーター:decorators.md、typescript-integration.md
  • ロギング:logging.md
  • ボディー解析/ファイルアップロード:content-type-parser.md、multipart.md
  • スキーマ/型プロバイダー:schema-validation-zod.md、serialization-zod.md、serialization.md、type-providers.md
  • HTTP/2/TLS:http2.md、configuration.md
  • CORS/セキュリティヘッダー:cors-security.md、rate-limiting.md
  • 本番環境へのデプロイ:deployment.md、delay-accepting-requests.md、configuration.md
  • リアルタイム通信/WebSocket:websockets.md、authentication.md、hooks-lifecycle.md
  • API ゲートウェイ/プロキシ:http-proxy.md、hooks-lifecycle.md、error-handling.md
  • 起動/ヘルスチェック:delay-accepting-requests.md、hooks-lifecycle.md、configuration.md
  • パフォーマンスのチューニング:performance.md、schema-validation-zod.md
  • テストの作成:testing.md、create-server.md
  • データベースのセットアップ:database-integration.md、database-migrations.md
  • 実際の DB を使った統合テスト:test-containers.md、testing.md
  • 関心事の明確な分離:clean-architecture.md、unit-testing.md
  • ビジネスロジックの単体テスト:unit-testing.md、clean-architecture.md
  • ボディーを含む安全なクエリ(QUERY メソッド):http-query.md、schema-validation-zod.md、cors-security.md
  • レスポンスのシリアライズ:serialization.md、serialization-zod.md、schema-validation-zod.md

推奨プロジェクト構成

@fastify/autoload を使用すると、プラグインとルートが各ディレクトリから自動的に読み込まれます。

src/
  plugins/          # Autoloaded — shared plugins (use fastify-plugin)
    db.ts           # Database client (pg/Drizzle/Prisma) + lifecycle
    auth.ts
    config.ts
  routes/           # Autoloaded — encapsulated route plugins (NO fastify-plugin)
    _hooks.ts       # Global route hooks (with autoHooks: true)
    users/
      index.ts      # → /users  (thin handler — calls services/users.ts)
      _hooks.ts     # Hooks for /users scope only
      schema.ts     # Zod schemas
    posts/
      index.ts      # → /posts
      schema.ts
  services/         # Pure business logic — no Fastify imports, injectable deps
    users.ts
    posts.ts
  db/
    migrate.ts      # runMigrations() helper (uses Postgrator)
  server.ts         # buildServer() with autoload registration
  app.ts            # Entry point — runMigrations() then server.listen()
migrations/         # Raw SQL files (committed to git): 001.do.*.sql, 001.undo.*.sql
test/
  services/
    users.test.ts   # Unit tests — pure functions, mock db
  routes/
    users.test.ts   # Integration tests — inject() + real schema
  helpers/
    server.ts       # createTestServer() / createIntegrationServer()
    db.ts           # startTestDatabase() via Testcontainers

結果をユーザーに提示する

これらのベストプラクティスを適用した場合は、どのルールに従ったかを伝えてください。

Fastify のベストプラクティスを適用しました:

  • ルートの構成:ルートをリソースごとにグループ化し、プレフィックスを付与
  • Zod によるバリデーションとシリアライズ:型推論と出力バリデーションを備えたリクエスト/レスポンスのスキーマ
  • カプセル化:共有プラグインでは fastify-plugin を使用し、ルートはスコープ内に維持
  • エラー処理:@fastify/error を使用したカスタムエラーハンドラー
  • パフォーマンス:レスポンススキーマ、共有スキーマ参照、負荷遮断、ストリーミング、ベンチマークのガイダンス
  • データベース:共有プールとライフサイクル管理のため、クライアントを fastify-plugin を使用したプラグインとして登録
  • マイグレーション:サーバー起動前に Postgrator(runMigrations())で適用し、未加工の SQL ファイルは git で追跡
  • クリーンアーキテクチャ:ビジネスロジックは純粋なサービス関数に置き、ルートハンドラーは薄く保つ
  • 単体テスト:サービス関数をモック DB スタブで分離してテスト
  • HTTP QUERY メソッド:Fastify 5.11+ のネイティブな RFC 10008 ルート。ボディーとメディアタイプのバリデーション、安全で冪等なハンドラー、ボディーを考慮したキャッシュキー、オプションのディスカバリー/リソースヘッダー、CORS プリフライトへの対応
  • 統合テスト:Testcontainers を使用した実際の Postgres コンテナー

参考資料

コメント