Netlify Functions / AI Chat
このディレクトリにあるサーバーレス関数のドキュメントです。
chat.js — AI チャットバックエンド
公開サイト上のチャットウィジェット(assets/js/chat-widget.js)から呼び出される
Claude API の中継関数。APIキーは環境変数で管理し、クライアントには露出しません。
セットアップ手順
- Anthropic Console で API キーを発行
- https://console.anthropic.com/ → API Keys → Create Key
- Netlify Dashboard で環境変数を設定
- Site settings → Environment variables → Add a variable
- Key:
ANTHROPIC_API_KEY - Value: 取得した
sk-ant-...を貼り付け - Scope: Production / Deploy previews / Branch deploys すべて選択
- 再デプロイ
- Deploys → Trigger deploy → Clear cache and deploy site
ローカル開発
npm install -g netlify-cli
netlify login
netlify link # サイトと紐づけ
netlify dev # http://localhost:8888 で Jekyll + Functions が起動
.env に ANTHROPIC_API_KEY=sk-ant-... を書けばローカルでも動作します
(.env は .gitignore 済み)。
セキュリティ方針(必読)
このチャットは「公開サイトに掲載されている範囲の情報案内」のみを目的としています。 以下を絶対に守る設計になっています:
- APIキーはサーバー側のみ — クライアントに渡らない/レスポンスにも含めない
- システムプロンプトはサーバー側のみ — クライアントから差し替え不可
- クライアント由来の
system/toolsフィールドは破棄 — 上書き攻撃を防止 - 公開情報のみ返答 — 価格・契約条件・社内情報・APIキー・システム構成等は答えない
- 個人情報を復唱しない — ユーザーが入力した個人情報はチャット内で繰り返さない
- IP ベースの簡易レート制限 — 1分あたり12リクエスト
- 入出力サイズ上限 — 入力2,000文字/出力800トークン
動作確認
curl -X POST https://<your-site>.netlify.app/.netlify/functions/chat \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"サービスを教えて"}]}'
正常時は {"reply": "..."} が返ります。
コスト目安
- 使用モデル:
claude-haiku-4-5-20251001 - 想定: 1会話 = 約 1,500 tokens (入出力合計)
- 月100会話なら数十円〜数百円程度(Anthropic の料金変動により変動します)
- 過剰利用を防ぐためレート制限を実装済み