第1章 登場人物 — ブラウザ・自分のサーバー・LLM・データベース

📖 この章のゴール:ChatGPTのようなアプリが、4人の登場人物の連携で動いていることが分かる。とくに 「なぜ自分のサーバーを間に挟むのか」 が腹落ちする。 ← 目次・はじめにへもどる


📱 ChatGPTではこう見える

ChatGPTを開いて、メッセージを打って送ると——

  • すぐに返事が、1文字ずつスルスルと出てきます。
  • 「さっきの話だけど」と続けると、前のやりとりを覚えているように話が続きます。
  • 左側には、過去の会話がいくつも並んでいて、開けば続きから話せます。
  • たくさん使うと、ときどき「しばらく待ってね」と制限がかかります。

あたりまえに使っていますが、この裏側では何が起きているのでしょう? ここが分かると、これから作るものが「魔法」ではなく「部品の組み合わせ」に見えてきます。


🤔 登場人物は4人(🟢 基礎)

LLMを使うアプリは、ざっくり 4人の登場人物 で動いています。第1弾と同じ レストラン のたとえに、新しい登場人物が1人加わります。

登場人物 役割 レストランでいうと
ブラウザ(画面) あなたが見て・打って・送る画面 席に座っているお客さん(あなた)
自分のサーバー(Express) 注文を受け、外の頭脳に頼み、会話を記録する司令塔 お店そのもの(レジ+ホール)
LLM(OpenAI / Anthropic) 文章を考える外部の頭脳。賢いが ①使うたびにお金がかかり ②毎回忘れる 電話で頼む外部の天才シェフ
データベース(Supabase) 会話を覚えておく倉庫+ログイン 注文の台帳・会員名簿

ひとつずつ、もう少しだけ。

  • ブラウザ(Chrome や Safari)… あなたの目の前の画面。プレーンな TS/JS で作れます(React などの道具を使ってもOK)。
  • 自分のサーバー(Express=えくすぷれす)… ネットの向こうで動く、あなたのお店の司令塔。お客さんと外部シェフのあいだに立ちます。
  • LLM(えるえるえむ=大規模言語モデル)… 文章を考えるAIの頭脳。OpenAIの GPT、Anthropicの Claude など。あなたのアプリの外にいて、API(窓口)越しに「答えて」と頼みます。
  • データベース(DB)… 会話をしまう倉庫。第1弾と同じ Supabase を使います。

🔑 なぜ「自分のサーバー」を間に挟むの?(🟢 基礎)

「ブラウザから直接LLMに頼めば、お店(サーバー)なんていらないのでは?」——いい質問です。でも、それをやってはいけない理由が3つあります。これがこの教材の背骨そのものです。

  1. 🔐 鍵を隠すため LLMは秘密の合鍵(APIキー)で使います。これをブラウザに置くと、ページを見れば誰でも盗めます。盗まれた鍵で使われた分は、あなたに請求されます。→ だからお店(サーバー)が鍵を預かり、お客さんには渡しません。(第2章)
  2. 💰 財布を守るため LLMは使った分だけお金がかかります。誰が・どれだけ使ったかを数えて上限をかけないと、いたずらや暴走で請求が無限に膨らみます。→ お店がログインを確認し、人ごとに「今日はここまで」を管理します。(第6章)
  3. 🧠 記憶を作るため 外部シェフ(LLM)は注文のたびに前の会話を忘れます。続きを話すには、これまでの会話を毎回まとめて渡す必要があります。→ それを台帳(DB)に書いて、毎回そろえて渡すのがお店の仕事です。(第4章)

🍔 たとえ話:あなた(お客さん)は、天才シェフに直接電話しません。お店(サーバー)に注文すると、お店が①シェフの電話番号(鍵)を隠したまま電話し、②あなたが頼みすぎていないか確認し、③「さっきはこういう話でした」と前回までの流れをシェフに伝えてくれる。お客さんがシェフの番号を知らない——これが安全と節約の出発点です。


🔁 「あなたのメッセージが返事になるまで」

メッセージを1回送ると、4人がこう動きます。

あなた(ブラウザ)
   │  「これに答えて」とメッセージを送る
   ▼
自分のサーバー(Express)
   │  ① ログイン確認(誰?)+使った量チェック(上限こえてない?)
   │  ② これまでの会話+新しい発言をまとめる(シェフは忘れるから)
   │  ③ 秘密の鍵をつけて LLM に送る
   ▼
LLM(OpenAI / Anthropic)
   │  文章を考えて返す(1文字ずつ流れてくる)
   ▼
自分のサーバー(Express)
   │  ④ 返事を台帳(DB)に保存/使った量を記録
   ▼
あなたの画面に、返事が1文字ずつ表示される

ポイントは、賢い部分(LLM)はあなたのアプリの外にいること。あなたが作るのは、お客さん(画面)と、あいだに立つお店(サーバー)です。


🛠 何を自分で作る?(🟢 基礎)

この教材で あなたが作るのは2つ——ブラウザ(画面)自分のサーバー(Express) です。賢い頭脳はLLMに、会話の保存とログインはSupabaseに任せます。

あなたが作る                          借りて使う
┌───────────┐    ┌──────────────┐    ┌──────────────┐
│  ブラウザ   │──▶│  自分のサーバー  │──▶│   LLM の API   │ (OpenAI / Anthropic)
│  (画面)    │◀──│   (Express)    │◀──│  文章を考える   │
└───────────┘    └──────┬───────┘    └──────────────┘
                          │ 会話の保存・ログイン
                          ▼
                    ┌───────────┐
                    │  Supabase  │ (データベース+認証)
                    └───────────┘
  • ブラウザ(画面):メッセージを打つ・送る・返事を表示する画面。プレーンな TS/JS で最小限に(React 等でもOK)。
  • 自分のサーバー(Express):鍵・財布・記憶を預かる司令塔。この教材の主役です。
  • LLM・Supabase:自分では作らず、API越しに「お願い」するだけ。

💡 第1弾(Twitter編)では、サーバーもDBも丸ごとSupabaseに任せました。今回は 「自分のサーバー(Express)を1枚はさむ」 のが新しいところ。理由は上の3つ(鍵・財布・記憶)です。


⚠️ ハマりどころ

  • 「ブラウザから直接 OpenAI / Anthropic を呼べばいいのでは?」 → それをやると 秘密の鍵がページに丸見え になり、誰でもあなたの財布で使えてしまいます。必ず自分のサーバーを通す——これが鉄則です(第2章でじっくり)。
  • 「LLMは会話を覚えている」と思い込む → 実は 毎回こちらが会話の全部を送り直しています。覚えているのは“こちら側(DB)”。ここを誤解すると、第4章以降の「記憶を作る」話がピンと来ません。
  • 「サーバー=LLM」だと思う → 別物です。自分のサーバー=司令塔(あなたが作る)LLM=外注の頭脳(外にいる)。役割がちがいます。

🤖 AIに頼むなら(Vibe codingのコツ)

AIに「ChatGPTみたいなの作って」とだけ頼むと、鍵をブラウザに直書きした危ないコードが出てくることがあります。登場人物を意識して頼むと、安全なコードに誘導でき、出てきたものも読めるようになります。

🗣 プロンプト例: 「TypeScript + Express のサーバーと、素の TS/JS のブラウザ画面で、超シンプルなチャットUIを作って。LLM(OpenAI など)の呼び出しはサーバー側だけに置いて、APIキーがブラウザに出ないようにして。どこがブラウザで、どこがサーバーかをコメントで分けて説明して」

出てきたコードを見るときの確認ポイント:

  • APIキーがブラウザ側(React)のコードに出ていないか?(出ていたらアウト)
  • LLMに送る前に、これまでの会話をまとめている部分はどこか?
  • ブラウザ → サーバー → LLM、の3段の流れになっているか?

📝 ことばメモ

  • LLM(えるえるえむ):大規模言語モデル。文章を考えるAIの頭脳。GPT(OpenAI)・Claude(Anthropic)など
  • API(えーぴーあい):他のサービスにお願いする窓口。ここではLLMに「答えて」と頼む窓口
  • Express(えくすぷれす):Node.js で自分のサーバーを手早く作る道具
  • React(りあくと):ブラウザの画面を作る道具の一つ(この教材では必須ではありません。素の TS/JS でもOK)
  • APIキー:そのLLMを使うための「秘密の合鍵」。料金はこの鍵の持ち主に請求される
  • ステートレス:呼ぶたびにまっさら(前回を覚えていない)こと。LLMのAPIはこれ

➡️ 次の章へ

第2章では、3つの理由のうち最初の 【守り①】秘密のAPIキーを守る を扱います。なぜブラウザに鍵を置いてはいけないのか、どう隠すのか——いちばん最初に固めるべき安全の土台です。

← 目次・はじめにへもどる