【Node.js入門】Socket.IOでシンプルチャットアプリを作ってみよう!
Node.js と Socket.IO を使った最もシンプルなチャットアプリ例
Socket.IO は、双方向リアルタイム通信を可能にする JavaScript ライブラリです。チャットアプリやソーシャルメディアアプリなど、リアルタイムなデータ更新が必要なアプリケーションによく使われます。
このチュートリアルでは、Node.js と Socket.IO を使って最もシンプルなチャットアプリを作成する方法を説明します。この例では、ユーザーがメッセージを入力して送信すると、そのメッセージがすべての接続済みのユーザーにブロードキャストされます。
前提知識
このチュートリアルを始める前に、以下の知識が必要です。
- Node.js の基本的な知識
- HTML と CSS の基本的な知識
必要なもの
- テキストエディタ
- Node.js
手順
- プロジェクトを初期化する
npm init -y
- 必要なパッケージをインストールする
npm install socket.io
- サーバーコードを作成する
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
console.log('ユーザーが接続しました:', socket.id);
socket.on('chat message', (msg) => {
console.log('メッセージ:', msg);
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('ユーザーが切断しました:', socket.id);
});
});
- クライアント側の HTML を作成する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>チャットアプリ</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.0/socket.io.min.js"></script>
</head>
<body>
<h1>チャット</h1>
<div id="chat-messages"></div>
<input type="text" id="message-input">
<button id="send-button">送信</button>
<script>
const socket = io();
const chatMessages = document.getElementById('chat-messages');
const messageInput = document.getElementById('message-input');
const sendButton = document.getElementById('send-button');
sendButton.addEventListener('click', () => {
const message = messageInput.value;
if (message) {
socket.emit('chat message', message);
messageInput.value = '';
}
});
socket.on('chat message', (msg) => {
const newMessage = document.createElement('p');
newMessage.textContent = msg;
chatMessages.appendChild(newMessage);
});
</script>
</body>
</html>
- サーバーを起動する
node index.js
説明
サーバー側
io.on('connection', (socket) => {...})
:このイベントハンドラーは、新しいユーザーが接続したときに呼び出されます。socket.on('chat message', (msg) => {...})
:このイベントハンドラーは、クライアントからchat message
イベントを受信したときに呼び出されます。io.emit('chat message', msg);
:このコードは、すべての接続済みのユーザーにchat message
イベントを送信します。
クライアント側
const newMessage = document.createElement('p');
:このコードは、新しいメッセージ要素を作成します。newMessage.textContent = msg;
:このコードは、メッセージ要素のテキストコンテンツをメッセージに設定します。chatMessages.appendChild(newMessage);
:このコードは、新しいメッセージ要素をchat-messages
コンテナーに追加します。
補足
この例は非常にシンプルなものです。実際のアプリケーションでは、ユーザー認証、メッセージの保存、エラー処理などの機能を追加する必要があります。
- [Node.js で Socket.IO を使用する](https://www.freecode
Node.js と Socket.IO を使ったチャットアプリ サンプルコード
サーバー側 (index.js)
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
console.log('ユーザーが接続しました:', socket.id);
socket.on('chat message', (msg) => {
console.log('メッセージ:', msg);
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('ユーザーが切断しました:', socket.id);
});
});
クライアント側 (index.html)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>チャットアプリ</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.0/socket.io.min.js"></script>
</head>
<body>
<h1>チャット</h1>
<div id="chat-messages"></div>
<input type="text" id="message-input">
<button id="send-button">送信</button>
<script>
const socket = io();
const chatMessages = document.getElementById('chat-messages');
const messageInput = document.getElementById('message-input');
const sendButton = document.getElementById('send-button');
sendButton.addEventListener('click', () => {
const message = messageInput.value;
if (message) {
socket.emit('chat message', message);
messageInput.value = '';
}
});
socket.on('chat message', (msg) => {
const newMessage = document.createElement('p');
newMessage.textContent = msg;
chatMessages.appendChild(newMessage);
});
</script>
</body>
</html>
使い方
- 以下のコマンドを実行して、サーバーを起動します。
node index.js
Node.js + Socket.IO でチャットアプリを作成するその他の方法
ネームスペースを使用すると、異なるチャットルームやトピック間で通信を整理することができます。例:
io.on('connection', (socket) => {
console.log('ユーザーが接続しました:', socket.id);
socket.on('join room', (room) => {
socket.join(room);
console.log('ユーザーが部屋', room, 'に参加しました:', socket.id);
socket.on('chat message', (msg) => {
io.to(room).emit('chat message', msg);
});
});
socket.on('disconnect', () => {
console.log('ユーザーが切断しました:', socket.id);
});
});
const socket = io();
socket.on('chat message', (msg) => {
console.log('メッセージ:', msg);
});
socket.emit('join room', 'room1'); // 特定のチャットルームに参加
socket.on('chat message', (msg) => {
console.log('ルーム 1 のメッセージ:', msg);
}); // ルーム 1 のメッセージのみを処理
プライベートメッセージを実装するには、個々のユーザー間で直接メッセージを送信できるようにする必要があります。例:
io.on('connection', (socket) => {
console.log('ユーザーが接続しました:', socket.id);
socket.on('private message', (to, msg) => {
socket.to(to).emit('private message', socket.id, msg);
});
// ... (他のイベントハンドラー)
});
const socket = io();
socket.on('private message', (from, msg) => {
console.log('プライベートメッセージ:', from, ':', msg);
});
socket.emit('private message', 'userID', 'こんにちは!'); // 特定のユーザーにプライベートメッセージを送信
イベントのバリデーション
イベントデータの整合性を確保するために、イベントのバリデーションを実装することができます。例:
io.on('connection', (socket) => {
console.log('ユーザーが接続しました:', socket.id);
socket.on('chat message', (msg) => {
if (typeof msg !== 'string' || msg.length > 255) {
return; // 無効なメッセージを無視
}
io.emit('chat message', msg);
});
// ... (他のイベントハンドラー)
});
const socket = io();
socket.on('chat message', (msg) => {
console.log('メッセージ:', msg);
});
socket.emit('chat message', '有効なメッセージ'); // 有効なメッセージを送信
ミドルウェアの使用
Socket.IO ミドルウェアを使用して、接続、認証、エラー処理などの一般的なタスクを自動化することができます。
これらの例は、Node.js と Socket.IO でチャットアプリを作成する際に使用できる追加機能を示すほんの一例です。創造性を発揮し、ニーズに合わせてアプリケーションをカスタマイズしてください。
node.js socket.io