← inaro.devAI駆動開発 学習ツール

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が生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。