
WebSocketとSocket.IOで実現!ブラウザ&サーバーのリアルタイム通信
チャット機能の「超シンプル」な実装例
以下のコードは、Node.js + Socket.IO を使ったチャットの最小構成です。これだけで、複数人でメッセージを送り合えるようになります。
HTTP(普通の通信):ブラウザが「ください」と言って、サーバーが「どうぞ」と返す。一方向。
WebSocket(Socket.IO):ブラウザとサーバーが常に繋がった状態になり、どちらからでも自由にメッセージを送れる。ブラウザとサーバー間でリアルタイムな双方向通信を可能にする技術
1. Node.jsサーバー側 (server.js)
javascript
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
// 静的ファイル(HTML)を配信する設定
app.use(express.static('public'));
// クライアントが接続した時の処理
io.on('connection', (socket) => {
console.log('ユーザーが接続しました');
// クライアントから 'chat message' イベントを受信したら
socket.on('chat message', (msg) => {
// 接続している**全員**にそのメッセージを送信(ブロードキャスト)
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('ユーザーが切断しました');
});
});
http.listen(3000, () => {
console.log('サーバー起動: http://localhost:3000');
});2. クライアント側 (public/index.html)
html
<!DOCTYPE html>
<html>
<head>
<title>超簡単チャット</title>
</head>
<body>
<ul id="messages"></ul>
<input id="input" autocomplete="off" />
<button id="send">送信</button>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io(); // サーバーに接続
const messages = document.getElementById('messages');
const input = document.getElementById('input');
document.getElementById('send').onclick = () => {
const msg = input.value;
if (msg) {
// サーバーにメッセージを送信
socket.emit('chat message', msg);
input.value = '';
}
};
// サーバーからメッセージを受信したら、画面に表示
socket.on('chat message', (msg) => {
const li = document.createElement('li');
li.textContent = msg;
messages.appendChild(li);
});
</script>
</body>
</html>3. 動かし方
index.htmlとserver.jsという2つのファイルがあれば動きます。
1.server.js と public/index.html を作成
2.ターミナルで npm init -y → npm install express socket.io を実行
3.node server.js でサーバー起動
4.ブラウザで http://localhost:3000 を開く
5.別のブラウザやスマホからも同じURLを開くと、リアルタイムで会話できる
たったこれだけのコードで、複数人チャットが完成します。
「リアルタイム性」は、これからのWeb体験の当たり前になります。
チャット、ゲーム、ライブ配信、共同編集、IoT……ユーザー同士が「今」を共有する体験を支える基盤として、WebSocketは必須の技術と言えます。