実践: 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" }]
}
}