TL

WebSocket

サーバとブラウザが 1 本の接続を保ったまま双方向にメッセージを送り合う仕組みです。HTTP ポーリングとの違いとリアルタイム用途を整理します。

中級WebSocketリアルタイムWeb通信最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.WebSocket は接続を張りっぱなしにして、サーバとブラウザが双方向にメッセージを送れる仕組み。
  • 2.HTTP ポーリングのような「定期的に問い合わせる無駄」が無く、サーバ起点の通知を即座に届けられる。
  • 3.チャット・通知・同時編集・ライブ更新など、低遅延の双方向通信が要る用途に向く。

WebSocket とは

通常の HTTP は「ブラウザが聞いて、サーバが答える」一方向のリクエスト駆動です。サーバから自発的に「新着が来たよ」と伝える手段がありません。

WebSocket は、最初に HTTP で接続を確立した後、その接続を双方向の通信路に昇格させます。一度つながれば、サーバからもブラウザからも、いつでもメッセージを送れます。

  • 1 本の接続を開いたまま維持する(張りっぱなし)。
  • どちらからでも送れる全二重(双方向)
  • テキストでもバイナリでも送れる。

HTTP ポーリングとの違い

WebSocket 以前は、HTTP で「定期的に問い合わせる」ことで擬似的なリアルタイムを実現していました。代表的な手法と比べると、無駄の差が見えてきます。

方式仕組み弱点
ポーリング数秒おきに「更新ある?」と HTTP で聞き続ける更新が無くても通信が走り、遅延も粒度任せ
ロングポーリング更新が来るまでサーバが応答を保留する接続のたびに HTTP の往復コストがかかる
WebSocket接続を保ったまま双方向に送り合う接続維持のリソース・対応インフラが必要

ポーリングは「更新が無いのに何度も聞く」空振りが避けられず、間隔を詰めるほど負荷が増え、広げるほど遅延が増えます。WebSocket はサーバ起点で即座に届くため、この板挟みから解放されます。

まずはポーリングで足りないか考える

更新頻度が低い、数秒の遅延が許容できる、といった用途なら、素直な HTTP ポーリングや後述の SSE で十分なことも多いです。WebSocket は接続維持やスケールの考慮が増えるため、「本当に双方向・低遅延が要るか」を先に見極めましょう。

接続の流れ(ハンドシェイク)

WebSocket は最初だけ HTTPを使います。ブラウザが Upgrade ヘッダ付きでリクエストし、サーバが 101 Switching Protocols で応じると、以後はその接続が WebSocket になります。URL のスキームは ws://(暗号化は wss://)です。

const socket = new WebSocket("wss://example.com/chat");

socket.addEventListener("open", () => {
  socket.send(JSON.stringify({ type: "hello" }));
});

socket.addEventListener("message", (event) => {
  const data = JSON.parse(event.data);
  console.log("received", data);
});

socket.addEventListener("close", () => {
  console.log("disconnected"); // 再接続処理を入れることが多い
});

ブラウザ標準の WebSocket API はシンプルですが、実務では再接続や部屋(ルーム)管理などをライブラリ(例: Socket.IO)に任せることもよくあります。

主な用途

低遅延の双方向通信が活きる場面で使われます。

  • チャット / メッセージング:相手の発言を即座に表示する。
  • 通知・アラート:サーバ起点でプッシュ的に届ける。
  • 同時編集 / 共同作業:他人のカーソルや変更をリアルタイム反映する。
  • ライブ更新:株価・スポーツのスコア・ダッシュボードなど刻々変わる値。
  • オンラインゲーム:操作と状態の高速なやり取り。

逆に、サーバ → ブラウザの一方向の通知だけで足りるなら、HTTP の延長で扱える **SSE(Server-Sent Events)**の方が手軽な選択肢になります。

観点WebSocketSSE
方向双方向サーバ → ブラウザの一方向
プロトコル専用(ws / wss)通常の HTTP(テキストストリーム)
自動再接続自前で実装標準で備わる
向く用途チャット・同時編集・ゲーム通知・フィード・進捗表示

注意点

接続を維持し続ける性質ゆえの留意点があります。

  • スケール:多数の同時接続を扱うサーバ設計や、複数台に分散したときのメッセージ配信(Pub/Sub など)が課題になる。
  • 切断と再接続:モバイル回線などでは切れる前提で、再接続とメッセージの取りこぼし対策を用意する。
  • 認証:接続確立時にトークンなどで認証する。途中で権限を失効させたい場合の扱いも検討する。
wss を使い、認証を忘れない

本番では暗号化された wss:// を使います。また WebSocket には CORS のようなブラウザの自動防御が効かないため、接続時の認証・オリジン検証を自分で実装する必要があります。「つながれば誰でも送れる」状態にしないよう注意してください。

土台となる HTTP の理解があると、ハンドシェイクや wss の位置づけが掴みやすくなります。

Web/フロントエンド Article

WebSocketを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

WebSocket

比較で見る軸

難易度: intermediate / カテゴリ: Web/フロントエンド / タグ数: 4

導入後に効く点

HTTP ポーリングのような「定期的に問い合わせる無駄」が無く、サーバ起点の通知を即座に届けられる。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
Web/フロントエンド
タグ数
4

判断チェックリスト

  • 自社の用途が「WebSocket / リアルタイム」に近いか確認する。
  • 強みである「WebSocket は接続を張りっぱなしにして、サーバとブラウザが双方向にメッセージを送れる仕組み。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

WebSocketリアルタイムWeb通信WebSocketリアルタイムWeb通信
参考: 公式情報