さとまたwiki
🔌

実践: API開発

RESTful APIをHono + Drizzleで作る

技術スタック

Hono

軽量Webフレームワーク

Drizzle ORM

型安全ORM

SQLite

データベース

Zod

バリデーション

1 プロジェクトセットアップ

# Claude Codeへの指示

"ブログAPIを作成して。
技術スタック: Hono, Drizzle ORM, SQLite, Zod, TypeScript。
Bun or Node.jsで動作するように。
プロジェクト名: blog-api"

2 データベース設計

# スキーマ定義

"Drizzleスキーマを作成して。
テーブル:
- users: id, email, name, passwordHash, createdAt
- posts: id, title, content, slug, published, authorId, createdAt, updatedAt
- comments: id, content, postId, authorId, createdAt
リレーションも定義して。db/schema.tsに作成。"

3 認証API

# 認証実装

"JWT認証を実装して。
エンドポイント:
- POST /auth/register: 新規登録
- POST /auth/login: ログイン(JWTトークン発行)
- GET /auth/me: 現在のユーザー情報
パスワードはbcryptでハッシュ化。
認証ミドルウェアも作成して。"

4 Posts API(CRUD)

# 記事CRUD

"投稿のCRUD APIを実装して。
- GET /posts: 一覧取得(ページネーション対応)
- GET /posts/:slug: 記事取得
- POST /posts: 新規作成(認証必須)
- PUT /posts/:id: 更新(自分の記事のみ)
- DELETE /posts/:id: 削除(自分の記事のみ)
Zodでリクエストボディのバリデーション。"

5 エラーハンドリング & ドキュメント

# 仕上げ

"以下を追加して完成させて:
- グローバルエラーハンドラー(統一的なエラーレスポンス)
- リクエストログ(ミドルウェア)
- CORS設定
- OpenAPI/Swagger ドキュメント生成
- ヘルスチェックエンドポイント"

良いAPIを作るポイント

一貫したレスポンス形式

{
  "success": true,
  "data": { ... },
  "meta": { "page": 1, "total": 100 }
}

適切なHTTPステータスコード

200 OK, 201 Created, 400 Bad Request, 401 Unauthorized, 404 Not Found, 500 Internal Server Error

バリデーションエラーの詳細

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "details": [{ "field": "email", "message": "Invalid email" }]
  }
}

この記事はClaude Opus 4.6によって作成されました