AI機能の製品設計
なぜ学ぶか: このカリキュラムの総仕上げ。動くAIデモを作るのは簡単ですが、公開して人に使わせる『製品』にするには別の設計が要ります。コスト・乱用・エラー — この3つに向き合えたとき、あなたは『AIが書くコードを読み・判断し・ディレクションできるエンジニア』になっています。
コストは設計時から
公開アプリは不特定多数が使い、消費が読めません。1リクエストの上限(max_tokens)・利用回数制限・キャッシュを最初から設計に入れます。
乱用対策=レート制限と入力制限
『1人が短時間に大量リクエスト』を防ぐレート制限、入力の長さ上限。これがないと悪意ある1人で課金が暴発します。
エラー処理=失敗する前提で作る
APIは落ちる・遅れる・拒否します。try/catchで受け、ユーザーに『失敗しました、再試行を』と伝えるまでが機能です。
『動く』の先へ=このカリキュラムの結論
動くデモ→使える製品の差は、コスト・安全・失敗への配慮。読む力(Phase 01〜06)とAI駆動の作法(Phase 07〜08)が、その差を埋めます。
コード例
// 「使える機能」にするための骨格(Route Handler)
import Anthropic from "@anthropic-ai/sdk";
import { z } from "zod";
const client = new Anthropic();
const Body = z.object({ message: z.string().min(1).max(1000) }); // 入力制限
export async function POST(request: Request) {
// 1. 乱用対策: ここでレート制限チェック(1ユーザーあたりの回数など)
// if (await isRateLimited(request)) return Response.json({ error: "混雑中" }, { status: 429 });
// 2. 入力を検証(信じない)
const parsed = Body.safeParse(await request.json());
if (!parsed.success) return Response.json({ error: "入力が不正です" }, { status: 400 });
// 3. エラー処理: 失敗する前提で try/catch
try {
const res = await client.messages.create({
model: "claude-opus-4-8",
max_tokens: 512, // コスト上限
messages: [{ role: "user", content: parsed.data.message }],
});
const text = res.content.find((b) => b.type === "text");
return Response.json({ reply: text?.type === "text" ? text.text : "" });
} catch (e) {
// レート制限・過負荷などはここに来る。ユーザーに次の行動を伝える
return Response.json({ error: "AIの応答に失敗しました。時間をおいて再試行してください。" }, { status: 502 });
}
}入力制限・レート制限・コスト上限・エラー処理 — この4つが『動くデモ』と『使える機能』の差です。ここまで設計できれば、AI機能を安心して世に出せます。
ステップ 1 / 2
※ カリキュラムの内容はAIが生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。