💻 Claude Code入門
📖 約25分で読めます
Claude CodeでREST APIを設計・実装する
要件定義からテストまでAPI開発の全工程をAIと進める
API開発をClaude Codeで加速する
REST APIの開発は、要件定義、エンドポイント設計、データモデル設計、実装、認証、バリデーション、エラーハンドリング、ドキュメント作成、テストと多くの工程を含みます。Claude Codeはこれらすべての工程を対話的にサポートできるため、API開発のスピードと品質を大幅に向上させます。
Claude CodeによるAPI開発の利点
- 設計段階から支援: RESTfulな設計原則に基づくエンドポイント設計を提案
- ボイラープレート削減: ルーティング、ミドルウェア、バリデーション等の定型コードを自動生成
- ベストプラクティス適用: セキュリティ、エラーハンドリング、ページネーション等の実装を標準化
- テスト自動生成: エンドポイントに対応するテストコードを自動作成
ステップ1: 要件定義をClaude Codeと整理する
API開発の最初のステップは要件を明確にすることです。Claude Codeに要件を伝えて、整理してもらいましょう。
要件定義の会話例
あなた: タスク管理アプリのバックエンドAPIを作りたいです。
機能は以下の通りです。
- ユーザー登録・ログイン(JWT認証)
- プロジェクトのCRUD
- タスクのCRUD(プロジェクトに紐づく)
- タスクにはステータス(未着手/進行中/完了)がある
- タスクの担当者アサイン
Express + TypeScript + Prismaで実装してください。
Claude Code: 要件を整理しました。以下のリソースとエンドポイントを
提案します。
## リソース一覧
| リソース | 説明 |
|---------|------|
| User | ユーザー(認証主体) |
| Project | プロジェクト(タスクのグループ) |
| Task | タスク(作業単位) |
## エンドポイント設計
### 認証 (/api/auth)
- POST /api/auth/register - ユーザー登録
- POST /api/auth/login - ログイン(JWTトークン発行)
- POST /api/auth/refresh - トークンリフレッシュ
### プロジェクト (/api/projects)
- GET /api/projects - 一覧取得
- POST /api/projects - 新規作成
- GET /api/projects/:id - 詳細取得
- PATCH /api/projects/:id - 更新
- DELETE /api/projects/:id - 削除
### タスク (/api/projects/:projectId/tasks)
- GET /api/projects/:projectId/tasks - 一覧取得
- POST /api/projects/:projectId/tasks - 新規作成
- GET /api/projects/:projectId/tasks/:id - 詳細取得
- PATCH /api/projects/:projectId/tasks/:id - 更新
- DELETE /api/projects/:projectId/tasks/:id - 削除
- PATCH /api/projects/:projectId/tasks/:id/assign - 担当者変更
この設計で進めてよろしいですか?
ステップ2: データモデルの設計
エンドポイントが決まったら、データモデルを設計します。Prisma、TypeORM、Sequelizeなどお好みのORMのスキーマを生成してもらいましょう。
Prismaスキーマの生成
あなた: 上記のエンドポイント設計に基づいて、Prismaスキーマを生成してください。
タスクのステータスはenumで定義してください。
Claude Code: Prismaスキーマを生成します。
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum TaskStatus {
TODO
IN_PROGRESS
DONE
}
model User {
id String @id @default(cuid())
email String @unique
name String
password String
projects Project[]
tasks Task[] @relation("assignee")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Project {
id String @id @default(cuid())
name String
description String?
owner User @relation(fields: [ownerId], references: [id])
ownerId String
tasks Task[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Task {
id String @id @default(cuid())
title String
description String?
status TaskStatus @default(TODO)
project Project @relation(fields: [projectId], references: [id])
projectId String
assignee User? @relation("assignee", fields: [assigneeId], references: [id])
assigneeId String?
dueDate DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([projectId])
@@index([assigneeId])
@@index([status])
}
ステップ3: 実装 ― ルーティングとコントローラー
スキーマが決まったら、Express(またはFastAPI等)のルーティングとコントローラーを実装します。
コントローラーの生成依頼
あなた: タスクのCRUDコントローラーを実装してください。
以下の要件を含めてください。
- バリデーション(zodを使用)
- エラーハンドリング
- ページネーション(一覧取得時)
Claude Code: タスクコントローラーを実装します。
// src/controllers/taskController.ts
import { Request, Response, NextFunction } from 'express';
import { z } from 'zod';
import { prisma } from '../lib/prisma';
import { AppError } from '../utils/errors';
const createTaskSchema = z.object({
title: z.string().min(1).max(200),
description: z.string().optional(),
status: z.enum(['TODO', 'IN_PROGRESS', 'DONE']).optional(),
assigneeId: z.string().optional(),
dueDate: z.string().datetime().optional(),
});
export const createTask = async (
req: Request, res: Response, next: NextFunction
) => {
try {
const { projectId } = req.params;
const data = createTaskSchema.parse(req.body);
// プロジェクトの存在確認
const project = await prisma.project.findUnique({
where: { id: projectId }
});
if (!project) throw new AppError(404, 'Project not found');
const task = await prisma.task.create({
data: { ...data, projectId },
include: { assignee: { select: { id: true, name: true } } }
});
res.status(201).json({ data: task });
} catch (error) { next(error); }
};
// ... getTasks, getTask, updateTask, deleteTask も同様に実装
ステップ4: 認証とミドルウェア
| ミドルウェア | 目的 | 適用範囲 |
|---|---|---|
| authenticate | JWTトークン検証 | 認証が必要な全エンドポイント |
| authorize | リソース所有者チェック | 更新・削除系エンドポイント |
| validate | リクエストボディ検証 | POST・PATCHエンドポイント |
| rateLimit | レートリミット | 認証系エンドポイント |
| errorHandler | 統一エラーレスポンス | 全エンドポイント(グローバル) |
認証実装の依頼プロンプト
あなた: JWT認証ミドルウェアを実装してください。
- アクセストークン(15分)とリフレッシュトークン(7日)
- トークンはAuthorizationヘッダーのBearerスキームで送信
- リフレッシュトークンはhttpOnly cookieに保存
- 不正なトークンには401、期限切れには適切なメッセージを返す
ステップ5: エラーハンドリングの統一
APIのエラーレスポンスは統一されたフォーマットで返すべきです。Claude Codeにエラーハンドリングの実装を依頼しましょう。
統一エラーレスポンスの実装
あなた: エラーレスポンスを統一したいです。以下のフォーマットにしてください。
{
"error": {
"code": "VALIDATION_ERROR",
"message": "入力内容に誤りがあります",
"details": [...]
}
}
Claude Code: グローバルエラーハンドラーを実装します。
// src/middleware/errorHandler.ts
export const errorHandler = (err, req, res, next) => {
if (err instanceof z.ZodError) {
return res.status(400).json({
error: {
code: 'VALIDATION_ERROR',
message: '入力内容に誤りがあります',
details: err.errors.map(e => ({
field: e.path.join('.'),
message: e.message
}))
}
});
}
if (err instanceof AppError) {
return res.status(err.statusCode).json({
error: { code: err.code, message: err.message }
});
}
// 予期しないエラー
console.error('Unexpected error:', err);
res.status(500).json({
error: {
code: 'INTERNAL_ERROR',
message: 'サーバー内部エラーが発生しました'
}
});
};
ステップ6: テストの自動生成
実装が完了したら、テストコードを生成してもらいます。Claude Codeは実装コードを理解した上で、適切なテストケースを提案してくれます。
テスト生成の依頼
あなた: タスクAPIのテストを書いてください。
Jest + supertestを使用し、以下のケースをカバーしてください。
- 正常系: CRUD操作がすべて動作する
- 異常系: バリデーションエラー、認証エラー、存在しないリソース
- エッジケース: 空文字、長い文字列、不正なステータス値
Claude Code: テストを生成します。
// src/__tests__/tasks.test.ts
describe('Tasks API', () => {
describe('POST /api/projects/:id/tasks', () => {
it('タスクを正常に作成できる', async () => {
const res = await request(app)
.post(`/api/projects/${projectId}/tasks`)
.set('Authorization', `Bearer ${token}`)
.send({ title: 'テストタスク', status: 'TODO' });
expect(res.status).toBe(201);
expect(res.body.data.title).toBe('テストタスク');
});
it('タイトルが空の場合400を返す', async () => {
const res = await request(app)
.post(`/api/projects/${projectId}/tasks`)
.set('Authorization', `Bearer ${token}`)
.send({ title: '' });
expect(res.status).toBe(400);
expect(res.body.error.code).toBe('VALIDATION_ERROR');
});
it('認証なしの場合401を返す', async () => {
const res = await request(app)
.post(`/api/projects/${projectId}/tasks`)
.send({ title: 'テスト' });
expect(res.status).toBe(401);
});
});
// ... 他のテストケースも同様
});
API開発ワークフローのまとめ
- 要件定義: 機能要件をClaude Codeに伝えてエンドポイント設計を提案してもらう
- データモデル: ORM(Prisma等)のスキーマを生成してもらう
- 実装: コントローラー、ミドルウェア、バリデーションを段階的に実装
- 認証: JWT認証やロールベースアクセス制御を組み込む
- テスト: 正常系・異常系・エッジケースを網羅するテストを自動生成
- ドキュメント: OpenAPI/Swagger仕様書を生成してもらう
プロのヒント: API開発では「1エンドポイントずつ」完成させていくのが効果的です。設計→実装→テスト→次のエンドポイントというサイクルを回すことで、手戻りを最小化できます。Claude Codeとの会話もこのサイクルに合わせて進めましょう。
Claude Code入門の他のガイド
Claude Code導入ガイド ― Windows/Mac完全対応
Claude Codeのインストールから初回起動まで、OS別に完全対応 ・ 約30分
Claude Codeの主要スラッシュコマンドと活用法
16個のスラッシュコマンドを完全網羅。使い方・実行例・組み合わせテクニックまで ・ 約15分
Claude Codeの権限設定(パーミッション)完全ガイド
セキュリティと利便性を両立する権限管理の全知識 ・ 約18分
Claude Codeのモデル切り替え活用術 ― Opus・Sonnet・Haikuの使い分け
タスクに応じた最適なモデル選択でコストと品質を両立する方法 ・ 約15分
Claude Codeのセッション管理術 ― 効率的な作業の進め方
セッションの開始・継続・再開を使いこなして、長期プロジェクトを効率的に進める ・ 約12分
Claude Codeのコマンドラインオプション完全リファレンス
全CLIオプションを網羅。起動時に使える引数を徹底解説 ・ 約20分
Claude Codeのプロジェクト設定(.claude/)完全ガイド
.claudeディレクトリとCLAUDE.mdを使いこなしてチーム開発を効率化 ・ 約15分
Claude Codeの出力フォーマットとパイプ活用術
--printモードとパイプを使った自動化・スクリプト連携の実践テクニック ・ 約15分
Claude Codeのキーボードショートカットと操作効率化
知っておくべきショートカットキーと入力テクニックで作業速度を2倍に ・ 約12分
Claude Codeのアップデートとバージョン管理
最新版への更新方法からダウングレード、トラブル対処まで ・ 約10分
Claude Codeの/doctorコマンドとトラブル診断
問題発生時の診断フローとよくあるエラーの解決方法 ・ 約12分
CLAUDE.mdの書き方完全ガイド ― プロジェクト指示書のベストプラクティス
プロジェクトの文脈をAIに正確に伝える設定ファイルの書き方 ・ 約20分
Claude Codeのメモリ機能 ― 会話をまたいだ記憶の活用法
プロジェクト固有の知識を永続化して効率を最大化する ・ 約18分
.claude/settings.jsonの設定項目一覧と活用法
Claude Codeの動作を細かく制御する設定ファイルの全貌 ・ 約15分
プロジェクト別CLAUDE.mdテンプレート集 ― コピペで使える10パターン
React・Next.js・Python・PHP・WordPress等、主要技術スタック別テンプレート ・ 約25分
チーム開発でのCLAUDE.md運用術
チーム全員がAIを最大限活用するための共有設定と運用ルール ・ 約20分
Claude CodeでGitを使いこなす ― 基本操作編
自然な日本語でGitを操作する方法を基本から解説 ・ 約20分
Claude Codeでコミットメッセージを自動生成する
変更内容を分析して最適なコミットメッセージを提案してくれるAI活用術 ・ 約18分
Claude CodeでPR(プルリクエスト)を作成・レビューする
AI支援によるPR作成からコードレビューまでの実践的ワークフロー ・ 約20分
Claude Codeでブランチ戦略を実践する
Git Flow・GitHub Flow・トランクベースを理解し、AIで効率的にブランチを管理 ・ 約20分
Claude Codeでコンフリクト解決をAIに任せる
マージの衝突が起きても慌てない。AIによるコンフリクト解決の実践ガイド ・ 約18分
Claude Codeでgit logを分析して変更履歴を理解する
コミット履歴からバグの原因特定やプロジェクトの変遷を把握する ・ 約22分
Claude Codeでリリースノートを自動生成する
コミット履歴からユーザー向け・開発者向けリリースノートを作成する ・ 約20分
Claude Codeのコンテキスト節約術 ― トークンを無駄にしない10の方法
コンテキストウィンドウを理解し、トークン消費を最適化するテクニック集 ・ 約18分
/compactコマンド徹底解説 ― 会話を圧縮して作業を続ける
/compactの仕組み・使いどころ・カスタム指示を完全網羅 ・ 約15分
大規模プロジェクトでのClaude Code活用戦略
大規模コードベースでの効率的なAI活用パターンとベストプラクティス ・ 約20分
.gitignoreとClaude Code ― 読み込みファイルの最適制御
ファイル探索の仕組みを理解し、ノイズを減らして精度を上げる ・ 約14分
効率的なタスク分割術 ― 1セッションの最適な使い方
タスク境界の見極めとセッション計画で生産性を最大化 ・ 約16分
Claude CodeのSkills機能入門 ― カスタムコマンドで作業を効率化
組み込みスキルからカスタムワークフローまで完全ガイド ・ 約15分
Claude Codeのフック(Hooks)でワークフローを自動化する
PreToolUse・PostToolUseフックで品質と安全性を自動で担保 ・ 約18分
カスタムスラッシュコマンドの作り方 ― 自分だけのワークフローを構築
.claude/commands/ディレクトリで独自コマンドを定義する方法 ・ 約16分
MCPサーバーでClaude Codeを拡張する ― 外部ツール連携ガイド
Model Context Protocolで無限の拡張性を手に入れる ・ 約18分
Claude CodeとVS Code・JetBrainsの連携活用法
ターミナルAIとIDEを組み合わせた最強の開発環境構築 ・ 約15分
Claude Codeでウェブサイトを0から作る実践ガイド
プロジェクト作成からデプロイまでの完全チュートリアル ・ 約20分
Claude Codeでテストコードを書かせるテクニック
単体テストからE2Eテストまで、AIによるテスト自動生成 ・ 約22分
Claude Codeでリファクタリングを効率化する
安全なコード改善をAIと一緒に進める方法 ・ 約22分
Claude Codeでドキュメントを自動生成する
README・API文書・コードコメントを効率的に作成 ・ 約20分
Claude Codeでバグを素早く見つけて修正するテクニック
エラー解析からホットフィックスまでのデバッグワークフロー ・ 約20分
Claude Codeでデータベース設計を相談・実装する
ER図からマイグレーションまでDB設計をAIに相談 ・ 約22分
Claude Codeで既存プロジェクトを分析・理解する
新しいコードベースのオンボーディングをAIで加速 ・ 約22分