Communityコーディング&開発github.com

jakirhussainkhan/dev-skills

バックエンド開発(サーバーロジック、認証、マイクロサービス、サーバーレス関数、ミドルウェア、バックグラウンドジョブ、キャッシュ戦略、アーキテクチャパターン)のためのスキルです。キーワード: backend, server, API endpoint, middleware, authentication, authorization, microservice, serverless, background job, queue, caching, session でトリガー。

dev-skills とは?

このスキルは、Node.js/TypeScriptを中心としたバックエンド開発のベストプラクティスを集約したものです。開発者はこれを参照することで、ステートレスサービス設計、フェイルファスト原則、べき等性の確保、そして可観測性の実装といったコア原則に従ったコードを生成できます。具体的には、JWTやセッションベースの認証、サービス層での認可チェック、エラーハンドリング階層、バックグラウンドジョブ(キュー、デッドレター、リトライ)、ミドルウェア設定、環境設定のバリデーションなど、本番運用に必要な設計パターンを網羅しています。Claude CodeなどのAIエージェントは、このスキルに含まれる構造化されたガイドライン(例:「リクエストライフサイクルはレート制限→認証→認可→バリデーションの順序を守る」「エラーはAppError階層で統一する」「設定は必ず環境変数から取得し、起動時にバリデーションする」)をコード生成の基準として活用できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jakirhussainkhan/dev-skills/tree/HEAD/.github/skills/backend-dev

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

ドキュメント


name: backend-dev description: バックエンド開発(サーバーロジック、認証、マイクロサービス、サーバーレス関数、ミドルウェア、バックグラウンドジョブ、キャッシュ戦略、アーキテクチャパターン)のためのスキルです。キーワード: backend, server, API endpoint, middleware, authentication, authorization, microservice, serverless, background job, queue, caching, session でトリガー。

バックエンド開発

核となる原則

  • ステートレスサービス — セッション状態をメモリに保存せず、Redisまたはデータベースを使用する
  • フェイルファスト — 入力は境界で検証し、エラーは早期に返す
  • べき等性 — POST/PUTエンドポイントは複数回呼び出しても安全であること
  • 可観測性 — すべてのサービスにログ、メトリクス、トレースが必要

APIエンドポイントの構造

リクエストライフサイクル

リクエスト → レート制限 → 認証 → 認可 → バリデーション → ビジネスロジック → レスポンス

この順序を決して省略しないこと。認証はビジネスロジックより前に、バリデーションは処理より前に実行する。

レスポンス標準

// 成功
{ "data": { ... }, "meta": { "page": 1, "total": 100 } }

// エラー
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "人間が読める説明",
    "details": [{ "field": "email", "issue": "Invalid format" }]
  }
}

認証パターン

JWTのベストプラクティス

  • アクセストークンのTTLは短く(15分)、リフレッシュトークンは長く(7日)設定
  • リフレッシュトークンはhttpOnlyクッキーに保存し(localStorageは使わない)、署名、有効期限、発行者、対象者を検証する
  • リフレッシュトークンは使用ごとにローテーション
  • 失効リストを維持するか、短命トークンのみを使用

セッションベースの認証

  • セッションIDをhttpOnly、Secure、SameSiteクッキーに保存
  • セッションデータはTTL付きでRedisに保存
  • ログイン後にセッションIDを再生成(セッション固定化防止)

認可

// 認可チェックはルートだけでなく、サービス層でも行う
async function getOrder(userId: string, orderId: string) {
  const order = await db.orders.findById(orderId)
  if (!order) throw new NotFoundError()
  // 認可チェック — ユーザーは自身の注文のみ閲覧可能
  if (order.userId !== userId) throw new ForbiddenError()
  return order
}

バックグラウンドジョブとキュー

キューは以下の用途に使用する:

  • メール送信
  • 画像/ファイル処理
  • 同期的である必要のない外部API呼び出し
  • 長時間実行タスク

ジョブパターン

ファイア・アンド・フォーゲット: エンキューしてすぐに返却
スケジュール: 特定の時刻に実行(cron)
遅延: X分/時間後に実行
リトライ: 失敗時にバックオフ付きで再試行

常に以下を実装すること:

  • 失敗したジョブのためのデッドレターキュー
  • 重複処理を防ぐためのべき等性キー
  • ジョブごとのタイムアウト
  • 最大リトライ回数

エラーハンドリング

// 構造化されたエラー階層
class AppError extends Error {
  constructor(
    public message: string,
    public statusCode: number,
    public code: string
  ) { super(message) }
}

class ValidationError extends AppError {
  constructor(details: ValidationDetail[]) {
    super('Validation failed', 400, 'VALIDATION_ERROR')
    this.details = details
  }
}

// グローバルエラーハンドラー
app.use((err, req, res, next) => {
  if (err instanceof AppError) {
    return res.status(err.statusCode).json({ error: err })
  }
  // 予期しないエラーをログ出力
  logger.error('Unexpected error', { err, req })
  res.status(500).json({ error: { code: 'INTERNAL_ERROR' } })
})

ミドルウェアチェックリスト

すべての本番APIに必要なもの:

  • リクエストログ(メソッド、パス、ステータス、期間)
  • レート制限(IPごと、ユーザーごと、エンドポイントごと)
  • CORS設定(明示的なホワイトリスト)
  • Helmet / セキュリティヘッダー
  • リクエストIDの伝播(分散トレーシング用)
  • ボディサイズ制限
  • タイムアウト処理

環境設定

// 設定をハードコードしない — 常に環境変数から取得
const config = {
  db: {
    url: process.env.DATABASE_URL,      // 必須
    poolSize: parseInt(process.env.DB_POOL_SIZE ?? '10')
  },
  jwt: {
    secret: process.env.JWT_SECRET,     // 必須
    expiresIn: process.env.JWT_TTL ?? '15m'
  }
}

// 必須設定は起動時にバリデーション — フェイルファスト
const required = ['DATABASE_URL', 'JWT_SECRET']
for (const key of required) {
  if (!process.env[key]) throw new Error(`Missing required env: ${key}`)
}

Individual skills in this repo

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

jakirhussainkhan/dev-skills

Use this skill when building AI agents, designing multi-agent systems, integrating LLMs into applications, building RAG pipelines, working with vector databases, implementing MCP servers, or designing agent communication and orchestration patterns. Trigger on keywords like: agent, LLM, RAG, embeddings, vector DB, orchestration, tool use, memory, intent clarification, MCP, LangChain, LangGraph, CrewAI, AutoGen, Microsoft Agent Framework.

jakirhussainkhan/dev-skills

Use this skill when using AI to learn new technologies, navigate unfamiliar codebases, do interview prep, identify skill gaps, or build a personal learning system. Also use when helping someone learn rather than just doing the work for them. Trigger on keywords: learn, learning, understand, explain, teach me, how does X work, unfamiliar codebase, interview prep, skill gap, study, tutorial.

jakirhussainkhan/dev-skills

Use this skill when designing how an AI agent should communicate with developers — intent clarification, progress reporting, ambiguity handling, confirmation before irreversible actions, error communication, self-correction, task tracking, and plan mode. Also use when building agent UX or defining agent behavior rules. Trigger on keywords: agent communication, intent clarification, plan mode, agent behavior, task tracking, confirmation, agent UX, agentic workflow, agent protocol.

jakirhussainkhan/dev-skills

Use this skill when designing or reviewing APIs — REST, GraphQL, tRPC, or gRPC. Trigger on keywords: API design, REST, GraphQL, tRPC, gRPC, endpoint, schema, route, OpenAPI, Swagger, API versioning, pagination, API contract, HTTP methods.

関連スキル