◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り44日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り44日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-04-26上級

Claude API × WebSocket × Redis Pub/Sub でスケーラブルなリアルタイム AI チャットサーバーを構築する — Node.js 本番設計・マルチユーザー対応・コスト制御の実装

Claude API × WebSocket × Redis Pub/Sub でリアルタイム AI チャットサーバーを本番運用する設計と実装。SSE との判断基準、マルチインスタンス対応、停止遅延がユーザーごとの予算精度をどう崩すかまで、計測コードつきで扱います。

websocketredisnodejsstreaming16realtime3production87api39

✦ プレミアム記事

チャット UI でユーザーが送信ボタンを押してから、AI の返答が少しずつ画面に流れ始める瞬間があります。あの体験を SSE(Server-Sent Events)で実装している方は多いのですが、「ユーザーが途中でメッセージを送り直せるようにしたい」「接続を切らずに複数ターンを管理したい」「入力中インジケーターを双方向で表示したい」という要件が加わった途端、SSE では対応しきれない壁にぶつかります。

私自身、モバイルアプリのバックエンドを設計するときに同じ壁にぶつかりました。SSE は HTTP レスポンスの拡張でしかなく、サーバーからクライアントへの一方向通信です。クライアントからサーバーへのメッセージは、別途 REST API の呼び出しが必要になります。セッションを管理するために状態をどこかに持つ必要が生まれ、複数のインスタンスに水平スケールすると途端に複雑になります。

WebSocket は最初から双方向通信を前提に設計されています。一本の接続で送受信が完結するので、会話の文脈管理がシンプルになります。そして Redis Pub/Sub を組み合わせると、サーバーが複数台になっても特定のユーザー宛てのメッセージを正しいインスタンスに届けられます。

以下は、Claude API のストリーミングを WebSocket に載せ、Redis Pub/Sub で複数インスタンスに広げるまでの設計と実装です。動くコードと、実際に運用してから気づいた前提を添えました。

SSE と WebSocket の使い分け — 設計判断の基準

まずどちらを選ぶべきかの判断基準を整理します。この判断を誤ると後から大きなリファクタが発生します。

SSE で十分なケース:

  • 単発の質問 → 回答のみ(ユーザーが途中で割り込まない)
  • サーバーからの一方向通知(ニュースフィード、進捗バー)
  • インフラが HTTP/2 に対応していて、接続数の制限が問題にならない環境です
  • バックエンドが Cloudflare Workers や Lambda など WebSocket を使いづらい環境

WebSocket が必要なケース:

  • ユーザーが AI の生成中に「止めて」「別の話題に切り替えて」ができる双方向制御
  • 「ユーザーが入力中」インジケーターをリアルタイムで AI 側に伝えたい
  • 1 つの接続で複数ターンの会話を管理し、ネットワーク確立コストを削減したい
  • 複数ユーザーが同じセッションを共有するコラボレーション機能

今回は後者のケースを想定します。

アーキテクチャ全体設計

構成の全体像は次のとおりです。

[Mobile/Web Client]
      |  WebSocket (ws://)
      |
[Node.js WebSocket Server (複数台)]
      |  Claude API Streaming (HTTPS)
      |  Redis Pub/Sub (セッション間メッセージルーティング)
      |
[Redis] --- [Claude API (Anthropic)]

各コンポーネントの役割は以下のとおりです。

  • Node.js WebSocket Server: クライアントの接続を受け付け、Claude API にストリーミングリクエストを送り、返ってきたデルタをクライアントへ転送します
  • Redis(Pub/Sub): サーバーが複数台になったときに、あるインスタンスに届いたメッセージを正しいインスタンスのユーザーへ届けるためのルーター
  • Redis(Hash/String): ユーザーごとのトークン使用量と会話履歴の管理

依存パッケージは以下のとおりです(Node.js 20 以上を推奨)。

npm install ws @anthropic-ai/sdk ioredis jsonwebtoken dotenv
npm install -D typescript @types/ws @types/node tsx
✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦停止要求から生成が止まるまでの遅延を測る計装コードと、遅延100ms/500ms/2,000ms が月3,000回の中断でいくらの差になるかの試算
✦Redis Pub/Sub に停止指示だけを乗せると再起動中のインスタンスで消える理由と、ローカル abort を優先する回避策
✦掲載コードを模擬サーバーと Redis で実際に動かして見つけた二つの穴——停止が AbortError にならない問題と、記録キーの不一致で月間上限が一度も働かない問題——と、予約→精算の修正版
✦WebSocket サーバー・Claude API ストリーム変換・Redis ルーティング・JWT 予算制御の完全な実装コード(Node.js / TypeScript)
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-04-26
Claude API でジェネレーティブ UI を本番投入する — JSON Schema と Tool Use で動的コンポーネントをストリーミング描画する実装パターン
Claude API のツール呼び出しと部分 JSON ストリーミングを組み合わせ、AI が動的に組み立てた UI コンポーネントを安全に描画する本番設計を、コンポーネントレジストリ・型安全性・フォールバック含めて解説します。
⬡ API & SDK2026-04-23
Claude API の tool_choice で無駄な推論を減らす — 4モードの使い分けとコスト最適化パターン
Claude API の tool_choice パラメータは、ツール呼び出しの挙動とコストの両方を左右します。auto / any / tool / none の4モードを実運用で使い分けるパターンを、動くコードとともに整理します。
⬡ API & SDK2026-03-27
Claude API プロダクション耐障害設計パターン — モデルルーティング・サーキットブレーカー・フォールバック戦略の実装ガイド
Claude APIを本番運用で支える耐障害設計の実装パターン。サーキットブレーカー、モデルルーティング、フォールバックチェーン、リトライ戦略、ディザスタリカバリをTypeScriptの実装コードと、運用で気づいた注意点を添えて整理しました。