WebSocketとは
WebSocketは、1つのTCP接続上でクライアントとサーバーの間に全二重(双方向)通信チャネルを確立するプロトコルです。2011年にRFC 6455として標準化され、W3CによってWebSocket APIも定義されています。HTTPのリクエスト-レスポンスモデルとは異なり、一度接続が確立されると、サーバーとクライアントの双方がいつでもデータを送受信できます。
WebSocketが登場する以前は、サーバーからクライアントにデータをプッシュするために、HTTPポーリング(定期的にサーバーに問い合わせ)やロングポーリング(応答を保留して変更時に返却)といった非効率な手法が使われていました。WebSocketはこれらの問題を根本的に解決し、チャットアプリ、リアルタイムダッシュボード、オンラインゲームなど、即時性が求められるアプリケーションの標準基盤となっています。
WebSocketの接続プロセス
WebSocket接続は、HTTPアップグレードハンドシェイクで開始されます。
- ハンドシェイク要求:クライアントがHTTP GETリクエストに
Upgrade: websocketヘッダーを付与して送信 - ハンドシェイク応答:サーバーが
101 Switching Protocolsステータスコードで応答 - 全二重通信開始:ハンドシェイク完了後、TCPコネクション上で双方向のデータフレーム送受信が可能に
- 接続終了:どちらかがCloseフレームを送信して接続を閉じる
WebSocketはHTTPのポート80(ws://)または443(wss://、TLS暗号化)を使用するため、ファイアウォールやプロキシを通過しやすい特徴があります。
WebSocketとHTTPの比較
| 項目 | HTTP | WebSocket |
|---|---|---|
| 通信方向 | 半二重(リクエスト-レスポンス) | 全二重(双方向) |
| 接続 | リクエストごとに接続 | 持続的接続 |
| オーバーヘッド | リクエストごとにヘッダー送信 | 2-14バイトのフレームヘッダー |
| サーバープッシュ | 不可(ポーリングが必要) | ネイティブ対応 |
| レイテンシ | 接続確立のオーバーヘッド | 低レイテンシ(接続維持) |
リアルタイム通信技術の選択肢
- WebSocket:双方向通信が必要な場合。チャット、ゲーム、コラボレーションツール
- Server-Sent Events(SSE):サーバーからクライアントへの一方向プッシュ。AIストリーミング応答、ニュースフィード、株価通知。HTTP上で動作するため実装が簡単
- HTTP/2 Server Push:サーバーからの先読み配信。ただし2025年現在、多くのブラウザで非推奨に
- gRPCストリーミング:バックエンドサービス間の双方向ストリーミング。Protocol Buffersで高効率
- WebTransport:HTTP/3(QUIC)上の次世代リアルタイム通信プロトコル。WebSocketの後継候補
主要なライブラリとフレームワーク
- Socket.IO:WebSocketにフォールバック、再接続、ルーム機能を追加したNode.jsライブラリ
- ws:Node.js向けの軽量WebSocket実装
- Phoenix Channels:Elixir/Phoenixフレームワークのリアルタイム通信機構
- Django Channels:PythonのDjangoフレームワークにWebSocket対応を追加
- Gorilla WebSocket:Go言語向けのWebSocketライブラリ
2025-2026年の最新動向
WebTransportの実用化が進んでいます。HTTP/3/QUIC上で動作するWebTransportは、WebSocketの後継として設計されており、Head-of-Lineブロッキングの回避、順序保証なしのデータグラム送信、複数ストリームの並列利用が可能です。Chrome、Edge、Firefoxが対応しており、ゲームや低遅延ビデオ配信での採用が始まっています。
AIストリーミング応答では、ChatGPTやClaude等のLLMがSSE(Server-Sent Events)を採用してトークン単位のストリーミング出力を実現しています。WebSocketよりも実装が簡潔で、HTTP互換性も高いため、AI APIではSSEが主流となっています。
また、Cloudflare Durable ObjectsやSupabase Realtimeなど、エッジコンピューティング上のWebSocketマネージドサービスが普及し、大規模リアルタイムアプリケーションの構築が容易になっています。
関連技術と用語
- API - WebSocketもAPIの一形態
- HTTP/2 - サーバープッシュ機能を持つWebプロトコル
- HTTP/3 - WebTransportの基盤
- QUIC - WebTransportのトランスポート層
- GraphQL - Subscriptionで WebSocket を使用
外部リンク
よくある質問(FAQ)
Q. WebSocketとは何ですか?
WebSocketは1つのTCP接続上で全二重通信を実現するプロトコルです。HTTPと異なり、接続を維持したままサーバー・クライアント双方がデータを送受信できます。
Q. WebSocketとHTTPの違いは?
HTTPはリクエスト-レスポンス型の半二重通信、WebSocketは全二重通信です。リアルタイム性が必要な場合にWebSocketが適しています。
Q. WebSocketとSSEの使い分けは?
SSEはサーバー→クライアントの一方向通信で実装が簡単。WebSocketは双方向通信が可能。AI応答にはSSE、チャットやゲームにはWebSocketが使われます。
Q. Socket.IOとWebSocketの違いは?
Socket.IOはWebSocketを基盤に、自動再接続やルーム機能などを追加したライブラリです。WebSocketが使えない環境でも自動フォールバックします。
