🌱 初心者向けIT基礎シリーズ|第3章

バックエンド入門【2026】サーバーサイド・データベース・認証とAIエージェントの司令塔

チャット画面に質問を打ち込むと、数秒後にAIの答えが返ってくる。その「数秒」の間、画面の裏では質問を受け取り、ユーザーを確認し、AIに問い合わせ、必要なら道具を使い、履歴を保存して、答えを返すという仕事が行われています。この裏方こそがバックエンドです。第3章では、AIエージェントの「司令塔」にあたるバックエンドを、コードを1行ずつ読みながらやさしく解説します。

🔬
調査・編集:AIエージェント研究所 編集部
運営=広告運用・生成AIエージェント導入支援の現役コンサル。このサイト自体も、AIエージェントと一緒に作り・公開・運用しています。

現場で実際に使っている構成を例に、未経験の方にも分かる言葉で解説します。→ 運営者・編集方針について

公開:2026年9月26日/最終更新:2026年9月26日
この記事の結論(要点まとめ)
  • バックエンドはレストランの厨房。お客さん(ブラウザ)からは見えない場所で、注文を受け、材料(データ)を出し、料理(結果)を作って返す
  • AIのAPIキーは必ずバックエンドの環境変数に置く。ブラウザ側のコードに書くと誰でも盗める
  • AIエージェントの「AIに聞く→ツールを実行→結果を返す」のループ(エージェントループ)はバックエンドで回す。だからバックエンドは「司令塔」
  • 最初の一歩はPythonのFastAPIかTypeScriptのHono・Next.jsで、Claude APIを呼ぶ小さなAPIを1本作ること

バックエンドとは?レストランの厨房で考える

第2章で学んだフロントエンドは、ブラウザの中で動く「目に見える部分」でした。これに対してバックエンドは、インターネットの向こう側にあるコンピューター(サーバー)の上で動く「目に見えない部分」です。サーバーサイドとも呼びます。

いちばん分かりやすいたとえはレストランです。

レストランWebサービス役割
客席・メニュー表フロントエンド(画面)お客さんが見て、選んで、注文する場所
ホール係・注文票API(第4章)決まった書式で注文を厨房に伝える窓口
厨房バックエンド注文を受けて調理し、料理を返す
冷蔵庫・食材庫データベース材料(データ)を保管し、必要な分だけ取り出す
店員証・会員カードの確認認証・認可「誰が来たか」「何をしてよいか」を確かめる
仕入れ先への発注外部API(AIのAPIなど)自分の店にないものを外から取り寄せる

お客さんは厨房の中を見られません。だからこそ、秘密のレシピ(APIキーやパスワード)は厨房に置くのです。客席のテーブルに金庫の暗証番号を貼っておく店はありませんよね。これがバックエンドのいちばん大事な考え方の1つです。

バックエンドが担う仕事を整理すると、おおむね次の5つです。

  1. 受け付ける:ブラウザやスマホアプリから届いたリクエスト(依頼)を受け取る
  2. 確かめる:ログインしている人か、その操作をしてよい人か、入力が正しい形かをチェックする
  3. 処理する:計算する、外部のAPI(AIなど)を呼ぶ、ファイルを作る
  4. 保存・取り出す:データベースに書き込む、読み出す
  5. 返す:結果をJSONなどの形でブラウザに返す
助手アイ
助手アイChatGPTやClaudeの画面で質問したときも、この5つが裏で動いているんですか?
エージェント博士
エージェント博士その通りじゃ。ログイン確認、AIモデルへの問い合わせ、会話の保存……画面は入口にすぎん。AIサービスの本体はほとんどが厨房、つまりバックエンド側にあるんじゃぞ

言語とフレームワーク:何で書くの?

フロントエンドはブラウザが理解できるJavaScript(とHTML・CSS)でほぼ決まりでしたが、バックエンドはサーバーの上で動きさえすれば言語は自由です。そのため選択肢がたくさんあります。AIエージェント開発でよく使われるものを紹介します。

言語代表的なフレームワーク向いている場面
PythonFastAPI、Django、FlaskAI・データ処理との相性が抜群。AI関連のライブラリや解説記事が最も多い
TypeScript(Node.js)Express、Hono、Next.js(Route Handlers)フロントエンドと同じ言語で書ける。Webアプリ全体を1つの言語でそろえたいとき
Go標準ライブラリ(net/http)、Gin など速くて軽い。大量のリクエストをさばくサーバーや社内ツールに
その他Ruby on Rails、Java(Spring)、PHP(Laravel)など既存の業務システムで多く使われている

フレームワークとは「よくある作業をまとめた土台」のことです。レストランでいえば、調理台・コンロ・シンクがすでに配置された業務用キッチンのセット。ゼロから配管工事をしなくても、すぐに料理(処理)を始められます。

  • FastAPI(Python):型(データの形)を書くだけで入力チェックと説明書(APIドキュメント)を自動で作ってくれる。AIのAPIサーバーの定番
  • Express(Node.js):Node.jsの古株で情報が多い。Honoは軽くて速く、Cloudflare Workersなど色々な実行環境で動くのが特徴
  • Next.js の Route Handlers:Reactの画面とAPIを1つのプロジェクトに同居させられる。app/api/chat/route.ts のようなファイルを置くだけでAPIになる
AIエージェントを作るならどれ? Anthropic(Claude)もOpenAIも、PythonとTypeScriptの公式SDKを提供しています。SDKとは「APIを簡単に呼ぶための公式の道具箱」です。迷ったらPython+FastAPIかTypeScript+Hono/Next.jsのどちらかを選べば、情報に困ることはまずありません。

最小のAPIサーバーを読む(FastAPI × Claude API)

いよいよコードです。ここでは、ブラウザから届いた質問を受け取り、サーバー側でClaude APIに問い合わせ、答えを返すだけの、いちばん小さなAPIサーバーを作ります。「チャット画面の裏側」の最小形です。

まず、必要な道具(ライブラリ)をインストールし、APIキーを環境変数にセットします。環境変数とは、プログラムの外側(OSやサーバーの設定)に置いておく「名前付きのメモ」のこと。コードの中に秘密を書かずに済みます(詳しくは第5章)。

ターミナルShell
# ライブラリをインストール
pip install anthropic fastapi "uvicorn[standard]"

# APIキーを環境変数にセット(macOS / Linux の例。キーは自分のものに置き換え)
export ANTHROPIC_API_KEY="sk-ant-..."

次に、サーバー本体です。ファイル名は main.py とします。

main.pyPython
import anthropic
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
client = anthropic.Anthropic()  # 環境変数 ANTHROPIC_API_KEY を自動で読む

class ChatRequest(BaseModel):
    message: str  # 受け取るデータの形:文字列の message

@app.post("/api/chat")
def chat(req: ChatRequest):
    response = client.messages.create(
        model="claude-opus-5",
        max_tokens=16000,
        system="あなたは親切なアシスタントです。",
        messages=[{"role": "user", "content": req.message}],
    )
    reply = "".join(b.text for b in response.content if b.type == "text")
    return {"reply": reply}

1行ずつ意味を見ていきましょう。

  • import anthropic ほか:AnthropicのSDK、FastAPI本体、入力の形を決める道具(Pydantic)を読み込む
  • app = FastAPI():厨房(アプリ)を1つ用意する
  • client = anthropic.Anthropic():Claudeに注文を出すための「発注係」を用意する。APIキーは書いていないのがポイント。SDKが環境変数 ANTHROPIC_API_KEY から自動で読み取る
  • class ChatRequest:「注文票には message という文字列が入っている」と決める。形が違うリクエストが来たら、FastAPIが自動でエラー(422)を返してくれる
  • @app.post("/api/chat"):「/api/chat というURLにPOST(データを送る)で来た注文は、下の関数で処理する」という宣言。この入口をエンドポイントと呼ぶ
  • client.messages.create(...):Claude APIを呼ぶ本体。model は使うモデル、max_tokens は返答の長さの上限、system はAIへの役割設定、messages は会話の中身
  • "".join(...):返ってきた content(中身のリスト)から、テキストの部分だけをつなげる
  • return {"reply": reply}:結果をJSONにしてブラウザへ返す

起動して、別のターミナルから試してみます。

ターミナルShell
# サーバーを起動(main.py の app を動かす。--reload は保存するたび自動で再起動)
uvicorn main:app --reload

# 別のターミナルから質問を送る
curl -X POST http://127.0.0.1:8000/api/chat \
  -H "content-type: application/json" \
  -d '{"message": "バックエンドを一言で説明して"}'

{"reply":"画面の裏側で、データの処理や保存を担当する部分です。..."}

ブラウザで http://127.0.0.1:8000/docs を開くと、FastAPIが自動で作ったAPIの説明書(試し打ちもできる画面)が表示されます。フロントエンドのチャット画面は、この /api/chat に fetch で質問を送り、返ってきた reply を表示するだけでよくなります。

ブラウザfetchで送るAPIキーなしバックエンドFastAPIAPIキー環境変数Claude API答えを生成① POST/api/chat② キーで呼ぶ③ JSON④ replyキーはバックエンドの中だけにあり、ブラウザには出ない
① ブラウザがfetchで POST /api/chat に質問を送り、② バックエンド(FastAPI)が環境変数に置いたAPIキーでClaude APIを呼びます。③ Claude APIが答えをJSONで返し、④ ブラウザはreplyを画面に表示します。APIキーはブラウザ側に一度も出てきません。
これは「最小」の例です 本番で公開するなら、このままでは足りません。ログインしていない人でも無制限に呼べてしまうため、第三者に使われればAPI料金がどんどん増えます。後半で説明する認証と回数制限、そしてエラー処理(APIが混雑していたときの対応など)を必ず加えます。料金や仕様は執筆時点(2026年9月)のもので、最新はAnthropic公式ドキュメントで確認してください。

データベース入門:RDB・NoSQL・ベクトルDB

データベース(DB)は、データを整理してしまっておき、必要なときにすばやく取り出すための仕組みです。厨房の冷蔵庫と食材庫にあたります。プログラムの変数はサーバーを再起動すると消えてしまいますが、DBに入れたデータは残り続けます。

RDB(リレーショナルデータベース)とSQL

最も広く使われているのがRDBです。Excelのような表(テーブル)でデータを管理し、表同士を「ユーザーIDでつなぐ」といった関係(リレーション)で結びつけます。代表例はPostgreSQL、MySQL、SQLiteです。

RDBへの命令にはSQLという専用の言葉を使います。たとえば「会話ID 42 のメッセージを古い順に取り出す」はこう書きます。

query.sqlSQL
-- messages テーブルから、会話ID 42 のメッセージを古い順に取り出す
SELECT role, content
FROM messages
WHERE conversation_id = 42
ORDER BY created_at;

SELECT(どの列を)→ FROM(どの表から)→ WHERE(どんな条件で)→ ORDER BY(どの順に)と、英語の文章のように読めます。SQLはAIエージェントにも書かせやすく、「こういうデータがほしい」と日本語で頼むとかなり正確なSQLを出してくれます。ただし削除や更新のSQLは、実行前に必ず人間が中身を確認しましょう。

NoSQL

表の形にこだわらず、JSONのような自由な形でデータを保存するDBをまとめてNoSQLと呼びます。MongoDB、Firebase の Firestore、Amazon DynamoDB、高速なキー・バリュー型の Redis などがあります。形が決まっていないデータや、とにかく大量の読み書きをさばきたい場面で使われます。

ベクトルDBとRAG

AI時代に一気に注目されたのがベクトルDBです。文章を「意味を表す数字の並び(ベクトル)」に変換して保存し、意味が近いものを探せるDBです。「返品したい」と「キャンセルの方法は?」は文字は違っても意味が近い、と判断できます。

これを使うのがRAG(検索拡張生成)という手法です。

① 質問有給の申請方法は?質問+段落カンニングペーパーベクトルDB社内規程の段落AI③ 生成④ 回答規程に基づく答え② 意味で検索近い段落添えて質問
RAG(検索拡張生成)では、① 質問を受けたら ② ベクトルDBから意味の近い社内規程の段落を探し、③ 見つけた段落を「カンニングペーパー」として質問に添えてAIに渡します。AIは自社の規程を知らなくても、④ 規程に基づいた答えを返せます。

AIモデルは自社の社内規程を知りません。そこで「カンニングペーパー」を探してきて、質問と一緒に渡すのがRAGです。ベクトル検索の専用サービス(Pinecone など)もありますが、PostgreSQLの拡張機能 pgvector を使えば、普段のRDBでベクトル検索を始めることもできます。

種類得意なことAIエージェントでの使い道
RDB(PostgreSQLなど)表形式・正確な集計・データ同士の関係ユーザー、会話履歴、利用回数、請求
NoSQL(MongoDB、Redisなど)自由な形・大量の高速な読み書きセッション、一時データ、キャッシュ
ベクトルDB(pgvector、Pineconeなど)意味の近さで探すRAG(社内文書検索)、似た問い合わせ探し

会話履歴の保存:AIは「覚えていない」

意外に思うかもしれませんが、Claude APIのようなAIのAPIは、基本的に前回の会話を覚えていません。1回1回の呼び出しは独立していて、「さっきの話の続き」をしてほしければ、これまでの会話をまるごと毎回送り直す必要があります。

messages の中身(イメージ)Python
messages = [
    {"role": "user", "content": "おすすめの本を教えて"},
    {"role": "assistant", "content": "ジャンルの希望はありますか?"},
    {"role": "user", "content": "ミステリーで"},  # ← 最新の質問
]

role が user(人間)と assistant(AI)で交互に並んでいます。この履歴をどこに保存しておくかを決めるのがバックエンドの仕事です。よくある形は次の流れです。

  1. 質問が届いたら、DBの messages テーブルから、その会話の過去のやりとりを取り出す(先ほどのSQL)
  2. 過去の履歴+新しい質問を messages にしてClaude APIへ送る
  3. 返ってきた答えと新しい質問を、DBに書き足す

会話が長くなるほど、毎回送るデータ(=トークン)が増えて料金も上がります。そのため、古い部分を要約して短くしたり、変わらない部分をプロンプトキャッシュで安くしたりする工夫をします。トークンと料金の考え方は第4章で詳しく説明します。

個人情報に注意 会話履歴には、ユーザーが入力した名前・連絡先・社内の情報などが含まれることがあります。「何を」「どれくらいの期間」保存するかを決め、プライバシーポリシーに書いておくのもバックエンド設計の一部です。

認証・認可と秘密情報の守り方

認証と認可は別もの

似た言葉ですが、意味が違います。

  • 認証(Authentication):あなたは誰?を確かめること。ログイン(メールとパスワード、Googleアカウントでログインなど)がこれ
  • 認可(Authorization):あなたは何をしてよい?を決めること。「一般ユーザーは自分の会話だけ見られる」「管理者は全員の利用状況を見られる」など

ホテルでたとえると、フロントで身分証を見せてチェックインするのが認証、渡されたカードキーで自分の部屋だけ開けられるのが認可です。

ログインした後は、毎回パスワードを送るわけにはいかないので、サーバーは「この人はログイン済み」という通行証を発行します。ブラウザのCookieに入れるセッションIDや、署名付きの JWT(JSON Web Token)などが使われます。「Googleでログイン」のような仕組みは OAuth(オーオース)という標準の手順に基づいています。

認証を一から自作するのは難しく、危険も伴います。最近は Supabase Auth、Firebase Authentication、Auth0、Clerk といった認証サービスを使うのが一般的です。AIエージェントに実装を頼むときも「認証は○○を使って」と指定するほうが安全です。

APIキーの秘匿と環境変数

AIのAPIキーは「あなたの財布と直結したカード」です。漏れると、他人があなたのお金でAIを使い放題になります。守るべきルールは3つです。

  1. ブラウザ側(フロントエンド)のコードに書かない:ブラウザのコードは誰でも開発者ツールで読めます
  2. ソースコードに直接書かない:.env ファイルや、クラウドの「環境変数・シークレット」設定に置き、コードからは名前で読む
  3. .env をGitに入れない:.gitignore に書いて、GitHubに上がらないようにする(第7章)
助手アイ
助手アイでも、テストのときだけならフロントに書いても大丈夫ですよね……?
エージェント博士
エージェント博士その「ちょっとだけ」が事故のもとじゃ。テストのつもりが公開され、GitHubにも残る……というのはよくある話じゃぞ。最初からバックエンド経由にしておくのが、結局いちばんの近道なんじゃ
自社事例

このサイトには「バックエンドがない」という選択

実はいま読んでいるAIエージェント研究所は、HTMLとCSSだけの静的サイトで、常に動いているバックエンドを持っていません。ログインもDBもないため、守るべき秘密や攻撃される入口がそもそも少ない構成です。記事にはバックエンドが必須の機能がないので、あえて持たないという判断をしています。

  • 共通フッターを全ページに流し込む build.js は、公開前に手元で一度だけ動かすNode.jsスクリプト。フッターを入れられないページがあると exit 1 で止まり、表記漏れを防ぐ
  • .gitignore で .env・*.key・credentials.json などの秘密情報をコミットしない設定にしている

「必要になるまでバックエンドを作らない」のも立派な設計判断です。チャット機能のように秘密のAPIキーを使う処理が必要になった時点で、初めてバックエンドの出番がやってきます。

AIエージェントの司令塔=エージェントループ

ここがこの章のいちばん大事なところです。ただのチャットボットは「質問→答え」の1往復で終わりますが、AIエージェントは、目的を達成するために自分で道具(ツール)を選んで使い、その結果を見て次の行動を決めることを繰り返します。

たとえば「明日の東京の天気を調べて、雨なら会議をオンラインに変更して」と頼まれたとします。

最終回答Claude頭脳バックエンド司令塔天気APIカレンダーAPIend_turn① 依頼+道具一覧② tool_use④ 結果を返す③ 呼ぶ雨次の道具終わりの合図まで①〜④をくり返す
① バックエンドがClaudeに依頼とツール一覧を渡すと、② Claudeは「天気APIを東京で呼んで」とお願い(tool_use)を返します。③ 実際に天気APIを呼ぶのはバックエンドで、④ 結果「雨」をClaudeに渡すと、Claudeは次のお願い(カレンダーAPIで会議を変更など)をします。やることがなくなる(end_turn)と最終回答を返します。

AIは「天気APIを呼んで」とお願いするだけで、実際に呼ぶのはバックエンドです。結果を受け取ったAIは「次はカレンダーAPIで会議を変更して」と次のお願いをし、やることがなくなったら最終回答を返します。この繰り返しをエージェントループと呼びます。

agent_loop.py(骨組みだけ)Python
while True:
    response = client.messages.create(
        model="claude-opus-5", max_tokens=16000,
        tools=tools, messages=messages,       # 使える道具の一覧も渡す
    )
    if response.stop_reason == "end_turn":  # AIが「もう終わり」と判断
        break
    messages.append({"role": "assistant", "content": response.content})
    tool_results = [
        {"type": "tool_result", "tool_use_id": b.id, "content": run(b.name, b.input)}
        for b in response.content if b.type == "tool_use"  # AIのお願いを実行
    ]
    messages.append({"role": "user", "content": tool_results})  # 結果を返す
  • while True:終わりの合図が来るまで繰り返す
  • stop_reason == "end_turn":AIが「回答が完成した」と判断したら抜ける。ツールを使いたいときは "tool_use" になる
  • run(b.name, b.input):AIが指定したツール名と入力で、バックエンドが実際に処理を実行する(ここは自分で書く関数)
  • 結果を tool_result として会話に追加し、もう一度AIに聞く

このループがバックエンドで回る理由は明確です。

  • 秘密を持っている:AIのAPIキーも、天気APIやカレンダーAPIのキーも、DBのパスワードもバックエンドにある
  • 権限を判断できる:「このユーザーにこのツールを使わせてよいか」を認可の仕組みでチェックできる
  • 記録が残せる:どのツールをいつ何回呼んだかをログやDBに残し、問題があったときに追跡できる
  • 止められる:無限ループや高額な処理に上限(最大回数など)をかけられる
エージェント博士
エージェント博士AIは頭脳、APIやツールは手足、そしてバックエンドは両者をつなぐ司令塔じゃ。AIが「あれを取って」と言っても、手足を実際に動かし、危ない指示を止めるのは司令塔の役目なんじゃよ

ツール呼び出しの詳しい仕組み(AIがどうやってツールを選ぶのか、JSONで何が返ってくるのか)は第4章 API・JSON入門で図解します。実務での使い方まで踏み込みたい方は、開発者向けのClaude Code×広告媒体API連携入門や、AIに渡す道具を自作するMCPサーバー開発の記事をどうぞ。なお、このループをSDK側で自動化する Tool Runner(ベータ)や、ループと実行環境ごとAnthropic側がホストする Managed Agents(ベータ)といった選択肢も登場しています。

長い処理は「非同期」と「キュー」で

AIエージェントの処理は、ときに数十秒〜数分かかります。ウェブ検索を何度もしたり、長い資料を読んだり、レポートを作ったりするからです。ところが、Webのリクエストにはタイムアウト(待ち時間の上限)があり、あまり長く待たせると途中で切れてしまいます。

そこで使うのが非同期処理とキューです。レストランでいえば「番号札」の仕組みです。

画面利用者① 受付バックエンド完成レポート依頼② 番号札123すぐ返す③ キュー(処理待ちの行列)125124123並べるワーカー裏の作業係順に処理④ 完了を通知(または画面から「123番は完成?」と確認)
レストランの番号札と同じ仕組みです。① 受付は依頼を受けると ② すぐに番号札を返して待たせず、③ 依頼をキュー(行列)に並べます。裏の作業係(ワーカー)が順に処理し、④ 完成したら通知するか、画面が「123番は完成?」と確認しに来ます。
  • キュー:処理待ちの仕事を並べておく「行列」。Amazon SQS、Google Cloud Tasks、Redisを使ったBullMQ(Node.js)やCelery(Python)などが代表例
  • ワーカー:行列から仕事を取り出して処理する「裏の作業係」。混んできたら作業係を増やせばよい
  • ストリーミング:答えを少しずつ画面に流す方法。ChatGPTやClaudeで文字がパラパラ表示されるのはこれ。「待たされている感」を減らせる

また、急がない大量の処理(例:1万件の問い合わせを分類する)なら、Claude APIのBatch APIのように、まとめて預けて後で結果を受け取る仕組みを使うと、通常より安く(執筆時点で約50%)処理できます。

用語まとめ表

用語ひとことでレストランでいうと
バックエンド(サーバーサイド)サーバー上で動く、画面の裏側の処理厨房
フレームワークよくある処理をまとめた土台(FastAPI、Honoなど)業務用キッチンのセット
エンドポイントAPIの入口となるURL(例:/api/chat)注文を受ける窓口
SDKAPIを簡単に呼ぶための公式の道具箱仕入れ先の専用発注用紙
データベース(DB)データを整理して保存・取り出す仕組み冷蔵庫・食材庫
SQLRDBに命令するための言葉食材庫への在庫問い合わせ
ベクトルDB/RAG意味の近さで探し、AIの回答に添えるレシピ本から近いページを探してくる
認証/認可誰か確かめる/何をしてよいか決める会員証の確認/入れる部屋の制限
環境変数コードの外に置く設定値・秘密情報厨房の金庫
エージェントループAIに聞く→ツール実行→結果を返す、の繰り返し料理長の指示で何度も仕込みを往復
キュー/ワーカー処理待ちの行列と、それをさばく係番号札と調理係

🤖 AIエージェントとやってみよう

ChatGPTやClaudeに、次のプロンプトをそのまま貼り付けて試してみてください。コードを「作ってもらう」だけでなく、説明させて理解するのがコツです。

プロンプト①:最小APIサーバーを作って説明してもらうPrompt
あなたはプログラミング初心者に教える講師です。
Python の FastAPI で、POST /api/chat に {"message": "..."} を受け取り、
サーバー側で Claude API(anthropic SDK)を呼んで {"reply": "..."} を返す最小のコードを書いてください。
条件:
- APIキーは環境変数 ANTHROPIC_API_KEY から読むこと(コードに直接書かない)
- 各行に日本語コメントをつけること
- 起動方法と、curl での動作確認方法も教えること
- 本番公開する前に足りないもの(認証・回数制限・エラー処理)を箇条書きで挙げること
プロンプト②:会話履歴のテーブル設計を相談するPrompt
AIチャットアプリの会話履歴を PostgreSQL に保存したいです。
users、conversations、messages の3つのテーブルを設計し、
CREATE TABLE 文と、各列が何のためにあるかを表で説明してください。
「ある会話の履歴を古い順に取り出す SELECT 文」も書いてください。
個人情報の保存について注意すべき点があれば最後に教えてください。
プロンプト③:エージェントループを図解してもらうPrompt
AIエージェントの「エージェントループ(AIに聞く→ツール実行→結果を返す)」を、
「明日の天気を調べて、雨なら会議をオンラインに変更する」という例で、
1ステップずつ、バックエンド・AI・外部APIの間で何が送られるかを表にして説明してください。
なぜこのループをブラウザではなくバックエンドで動かすべきなのかも、理由を3つ挙げてください。
AIの答えをチェックするポイント
  • APIキーをコードやフロントエンドに直接書いていないか
  • モデル名や書き方が古くないか(AIの知識は古いことがあるので、公式ドキュメントと照らし合わせる)
  • DBを消す・書き換えるコードが含まれていないか、実行前に中身を読む

よくあるつまずき

症状よくある原因対処
「APIキーが見つからない」「401 Unauthorized」環境変数をセットしたのと別のターミナルでサーバーを起動している/キーの打ち間違い同じターミナルで export してから起動。.env を使うなら読み込み処理があるか確認
「422 Unprocessable Entity」送ったJSONの形がサーバーの期待と違う(キー名の違いなど)/docs 画面で期待される形を確認。message のつづりをチェック
ブラウザから呼ぶと「CORSエラー」画面とAPIのドメインやポートが違い、ブラウザが安全のためにブロックバックエンド側で許可するオリジンを設定(第1章参照)。* で全部許可は避ける
「429 Too Many Requests」短時間にAPIを呼びすぎた(レート制限)少し待って再試行。SDKは自動で数回リトライする。詳しくは第4章
途中で接続が切れる・タイムアウトAIの処理が長く、Webリクエストの待ち時間の上限を超えたストリーミングで少しずつ返す、またはキューで非同期にする
AIが前の話を覚えていない毎回、最新の質問だけを送っているDBから履歴を取り出して messages に含める
料金が思ったより高い認証なしで公開して第三者に使われた/履歴が長くなりすぎたログイン必須・回数制限を付ける。管理画面で使用上限を設定

よくある質問

バックエンドの言語は何から学べばいい?

AIエージェントを作る目的なら、PythonかTypeScript(Node.js)のどちらかがおすすめです。どちらもClaudeやOpenAIの公式SDKがあり、情報も豊富です。データ処理や機械学習にも触れたいならPython、フロントエンドと同じ言語でそろえたいならTypeScriptを選ぶと迷いません。

フロントエンドから直接AIのAPIを呼んではいけないの?

本番のサービスでは避けるべきです。ブラウザで動くコードは誰でも中身を見られるため、APIキーを書けば盗まれて不正利用される恐れがあります。APIキーはバックエンドの環境変数に置き、ブラウザはバックエンドに頼み、バックエンドがAIのAPIを呼ぶ形にするのが基本です。

データベースはどれを選べばいい?

迷ったら、まずはPostgreSQLなどのリレーショナルデータベース(RDB)を選ぶのが無難です。ユーザー・会話履歴・注文のような表形式のデータに強く、pgvectorなどの拡張を使えばRAG用のベクトル検索も同じDBで始められます。量や用途が特殊になってから専用DBを検討すれば十分です。

バックエンドを自分で書かずにAIエージェントを作れる?

ノーコードツールや、AnthropicのManaged Agents(ベータ)のようにエージェントの実行環境をサービス側が用意してくれる選択肢も増えています。ただし、APIキーの管理、ユーザー認証、データの保存場所といった判断は必ず残るため、バックエンドの考え方を知っておくと安全に選べます。

まとめ|バックエンドはAIエージェントの「司令塔」

バックエンドは、お客さんからは見えない厨房です。注文(リクエスト)を受け、会員証を確かめ(認証・認可)、食材庫(データベース)から材料を出し、仕入れ先(AIのAPI)に発注し、料理(レスポンス)を返します。そしてAIエージェントでは、「AIに聞く→ツールを実行→結果を返す」というエージェントループを回す司令塔になります。

覚えておきたいのは次の3点です。

  • APIキーなどの秘密はバックエンドの環境変数に置き、フロントやGitには絶対に入れない
  • AIは会話を覚えていないので、履歴の保存と受け渡しはバックエンドの仕事
  • AIが道具を使うとき、実際に動かし、権限を確かめ、記録し、止めるのはバックエンド

次の第4章「API・JSON入門」では、厨房と外の世界をつなぐAPIと、そのやりとりに使うJSONを、実際のClaude APIのリクエスト・レスポンスを読みながら学びます。AIが道具を選んで呼ぶ「ツール呼び出し」や、話題のMCPもここで登場します。

基礎を身につけたら、次は「仕事」につなげる

独学で進めるのも十分可能ですが、「最短で実務レベルにしたい」「転職・副業につなげたい」なら、次の記事も参考にしてください。

AIスキル・プログラミングが学べるオンラインスクール比較8選【2026】独学で詰まる前に。給付金の対象コースで費用を抑える方法も
記事を読む

次の一歩

姉妹サイトの記事で、次に気になりやすいことを調べられます。