146. WebSockets(WebSockets:超高速・双方向の「会話」を実現する)
原理:つなぎっぱなしの「直通電話」
どちらからでも、いつでも話せる
通常のHTTP(HTMXの基本)は「ブラウザが話し始め、サーバーが答える」という主従関係でした。SSE(145.)は「サーバーが話し続ける」一方的な放送でした。 「WebSockets(ウェブソケット)」は、ブラウザとサーバーが対等に、いつでも好きなタイミングでメッセージを送り合える「双方向の直通電話」です。
HTMXでこれを使うと、チャットや多人数参加型のゲーム、共同編集ツールなど、究極のリアルタイム性が求められる機能を、HTMLの書き換えだけで実現できます。
実践:双方向リアルタイム通信の実装
1. WebSockets 拡張機能の導入
HTMXでWebSocketsを扱うには、公式の ws 拡張機能が必要です。
2. 接続と送受信の設定
hx-ext="ws" を使い、接続先のURL(ws://...)を指定します。
<div hx-ext="ws" ws-connect="/chat">
<!-- サーバーから届いたメッセージをここに貼り付ける -->
<div id="chat-room" ws-afterbegin="messages">
<!-- サーバー側で <div id="messages">...</div> を送るとここに入ります -->
</div>
<!-- ここから送るメッセージは自動的にWebSocketで飛ばされる -->
<form ws-send>
<input name="chat_message">
<button>送信</button>
</form>
</div>
3. ステップ・バイ・ステップ解説
- 「双方向」が必要か確認: 単なる通知ならSSE(145.)で十分です。チャットのように自分からも頻繁に送る場合にWebSocketsを選びます。
- サーバー側の準備: WebSocket プロトコルに対応したサーバー(Node.js, Go, PythonのFastAPIなど)を用意します。
- HTMLの送受信: サーバーからは JSON ではなく、HTMXがそのまま貼れる「HTMLタグ」を送り出すのが HTMX 流です。
比較:SSE vs WebSockets
SSE (145.)
- 方向: サーバーからブラウザへの一方通行。
- 特徴: 設定が簡単。普通のHTTPの上で動く。
WebSockets
- 方向: 双方向(どちらからも送れる)。
- 特徴: 非常に高速だが、サーバー側の設定(専用ポートなど)が少し複雑になる。
- 用途: チャット、対戦ゲーム、リアルタイム共同編集。
まとめ:初心者のための「Webの限界突破」
WebSockets を使いこなせるようになると、あなたのアプリは「Webサイト」という枠を超えて、本物の「リアルタイム通信ツール」へと進化します。
- HTMLを送り合う楽しさ: WebSocket でも JSON ではなく HTML を送る。この一貫性が、HTMX 開発の心地よさを生みます。
- 接続の管理: つなぎっぱなしにするため、サーバーのメモリ管理には少し気を配る必要がありますが、その分得られるスピード感は圧倒的です。
- モダンなWebの象徴: ページを一切リロードせず、誰かの操作が自分の画面に即座に反映される。その魔法を、あなたの手で実現してください。
壁をなくし、瞬時に繋ぐ。WebSockets という「双方向の翼」を手に入れて、情報の速度がそのままユーザーの熱狂に変わる、エキサイティングな次世代Webアプリを構築してください。次の記事では、これら全ての機能を最高速度で動かす「パフォーマンス最適化(147. Performance Optimization)」をご紹介します。