← スキル一覧に戻る

api-usecase
by bayamasa
⭐ 0🍴 0📅 2026年1月12日
SKILL.md
name: api-usecase description: Hono + Drizzle ORMを使用したAPIエンドポイント作成を支援。Usecaseパターンでビジネスロジックをルートから分離。(1)新しいAPIエンドポイント追加、(2)ビジネスロジック実装、(3)エラーハンドリング定義で使用。トリガー:「APIを作成」「エンドポイント追加」「ユースケース作成」「ビジネスロジック実装」
API Usecase Pattern
Overview
ビジネスロジックをルート定義から分離し、テスト可能で再利用可能なコードを作成するためのパターン。
ディレクトリ構造
backend/src/usecases/{domain}/{operation}.ts
例:
usecases/auth/signup.tsusecases/tour/getTours.tsusecases/user/createProfile.ts
Usecase ファイルの構造
各 usecase ファイルは以下の4つの要素で構成:
1. Input Interface
export interface {Operation}Input {
// リクエストから受け取るパラメータ
}
2. Output Interface
export interface {Operation}Output {
// レスポンスとして返すデータ
}
返却値がない場合は Promise<void> を直接使用(型エイリアスは作成しない)。
3. Error Classes
export class {ErrorName}Error extends Error {
constructor() {
super('エラーメッセージ')
this.name = '{ErrorName}Error'
}
}
4. Execute Function
export async function execute(input: {Operation}Input): Promise<{Operation}Output> {
// ビジネスロジック
}
Route からの呼び出し
import * as signupUsecase from '@/usecases/auth/signup'
import { EmailAlreadyExistsError } from '@/usecases/auth/signup'
auth.openapi(signupRoute, async (c) => {
const input = c.req.valid('json')
try {
const output = await signupUsecase.execute(input)
return c.json({ message: '成功', data: output }, 201)
} catch (error) {
if (error instanceof EmailAlreadyExistsError) {
return c.json({ error: error.message }, 409)
}
throw error
}
})
Import ルール
- 内部サービス:
@/services/xxxを使用 - DB:
@db/index,@db/schemaを使用 - Drizzle ORM:
drizzle-ormから直接 import
References
詳細なテンプレートと例: references/usecase-template.md
スコア
総合スコア
60/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です