Lecture 11技術理解 — 第 3

Lecture 11LLMやデータベース操作をAPIレイヤーで行う理由

AIやデータベースをブラウザから直接扱わない理由を理解します。

読了の目安 約 6 分図解 準備中難易度

前回、API Keyは 家の鍵と同じ だと整理しました。 では、その鍵を どこで使うか はもっと大事な話です。 結論から言うと、AI APIやデータベースは ブラウザから直接呼ばない。 必ずサーバー側の APIレイヤー を経由させます。

このレクチャーでは、なぜ直接呼んではいけないのか、APIレイヤーは何をしているのかを レストランのホールと厨房に例えながら整理します。

1ブラウザに置いた情報はユーザーに見える

まず大前提として、ブラウザで動くコードはユーザーが覗ける と思ってください。 開発者ツールを開けばJavaScriptはそのまま読めますし、通信内容も全部見えます。 つまりブラウザは お店のレジ裏が丸見えのカウンター のような場所です。

だから「ユーザーには見せたくないもの」(API Key、DBの接続情報、社内ロジックなど)を ブラウザのコードに書くのは、金庫の暗証番号をレジに貼る のと同じことになります。

2悪い例:ブラウザから直接LLM/DBを呼ぶ

初心者が一番やりがちなのが、ブラウザの画面コードから直接 OpenAI API や データベースを呼んでしまう構成です。 動くことは動くのですが、3つの被害 が一気に降りかかります。

  • API Keyが漏れる:ブラウザに鍵を置いた瞬間、誰でもコピーできる状態になる。
  • DBが危険にさらされる:秘密の接続情報や管理用の鍵が漏れると、知らない人にデータを読まれたり書き換えられたりする。
  • 料金が爆発する:鍵を拾った誰かがAI APIを叩き続け、月末に高額請求が届く。
Note

公開してよい鍵もあります

サービスによっては、ブラウザで使う前提の「公開用キー」があります。 ただし、OpenAIのAPI KeyやDBの管理用キーのような秘密の鍵とは別物です。 迷ったらCodexに 「これはブラウザに出してよい公開用キーですか?」 と確認しましょう。

3良い例:APIレイヤーが「ロビー」を務める

解決策はシンプルで、ブラウザとLLM/DBの間に サーバー側の窓口 をひとつ挟みます。 これがAPIレイヤーです。レストランで言えば、お客がいるホールと、料理人と火がある厨房を分けるイメージです。

  • ブラウザ(ホール):「この文章を要約してほしい」とAPIレイヤーへ依頼するだけ。
  • APIレイヤー(厨房の入口):依頼を受け取り、自分が持っているAPI KeyでLLMを呼び、結果を返す。
  • LLM / DB(厨房):APIレイヤー経由でしか呼ばれない。鍵もここの中にある。

Next.jsなら、サーバー側で動くコードも同じプロジェクトに書ける のが強みです。 実装方法の名前は気にしなくてOK(後で「Route Handler」「Server Action」という言葉が出てきますが、 要は サーバー側で走るコードを置く場所 です)。

Figure 11.1悪い例 vs 良い例 — APIレイヤーありなしの比較
ブラウザからLLMやDBを直接呼ぶ悪い例と、APIレイヤーを経由して鍵を隠す良い例を上下で比較する図
Noteブラウザはユーザーに見える場所です。秘密の鍵を使う処理は、APIレイヤーの中に置いてからLLMやDBを呼びます。

4APIレイヤーが守ってくれること

APIレイヤーは単なる「中継」ではありません。 鍵を隠すついでに もう2つの仕事 をしてくれます。

  • 権限のチェック:「このユーザーは本当にこの操作をしてよいのか?」をログイン状態で判定できる。
  • 料金や回数の制御:1人が連続でAI APIを叩けないように制限したり、ログを残したりできる。
  • データの整形:LLMの返答からブラウザに渡してよい部分だけ取り出して返せる。
Warn

Codexにフロント実装を頼むときの一言

「LLMを呼ぶ機能を作って」と頼むと、たまにブラウザ側に直接書こうとすることがあります。 依頼するときは 「LLMの呼び出しはサーバー側(APIレイヤー)で実装してください」場所を明示する一言 を添えるのが安全です。

やってみよう · Exercise

クライアントとサーバーの分担をCodexに整理してもらう

実装に入る前に、Codexに 方針だけ を説明してもらいます。 コードが出てくる前にこの一手間を入れると、後の認識ズレが減ります。

  1. 次の依頼文をそのまま投げる:
    LLM APIを使う機能を作りたいです。
    API Keyを安全に扱うため、クライアントとサーバーで処理をどう分けるべきか、
    Next.js前提で初心者向けに説明してください。
  2. 返答から「鍵をどこに置くか」「ブラウザは何を送るか」「サーバーは何を返すか」の3点をメモする。
  3. 分からない単語が出てきたら「○○を初心者向けに言い換えてください」と追撃する。
進捗にチェックをつける

5理解確認チェックリスト

  • ブラウザに置いた情報はユーザーに見えると理解している。
  • LLMやDBはブラウザから直接呼ばず、APIレイヤーを経由させると説明できる。
  • APIレイヤーは「鍵を隠す」だけでなく権限や料金も守ってくれると知っている。
End of Lecture 11