← スキル一覧に戻る

websocket-realtime
by TakumiOkayasu
dotfiles for work
⭐ 0🍴 0📅 2026年1月23日
SKILL.md
name: websocket-realtime description: WebSocket、SSE、リアルタイム機能を実装する際に使用。
WebSocket & Real-time
📋 実行前チェック(必須)
このスキルを使うべきか?
- WebSocketを実装する?
- SSE(Server-Sent Events)を実装する?
- リアルタイム通信機能を実装する?
- 再接続ロジックを設計する?
前提条件
- プロトコル(WebSocket/SSE)を選定したか?
- 認証方式を決定したか?
- 再接続戦略を検討したか?
禁止事項の確認
- 再接続ロジックなしで実装しようとしていないか?
- 認証なしで接続を許可しようとしていないか?
- メッセージのバリデーションを省略しようとしていないか?
トリガー
- WebSocket実装時
- SSE(Server-Sent Events)実装時
- リアルタイム通信機能時
- 再接続ロジック設計時
🚨 鉄則
接続は切れる前提で設計。再接続ロジック必須。
WebSocket (Socket.io)
// サーバー
import { Server } from 'socket.io';
const io = new Server(server, {
cors: { origin: process.env.CLIENT_URL }
});
io.on('connection', (socket) => {
// ⚠️ 認証確認
if (!socket.handshake.auth.token) {
socket.disconnect();
return;
}
socket.on('message', (data) => {
// ⚠️ バリデーション
if (!isValidMessage(data)) return;
io.emit('message', data);
});
});
再接続ロジック
// クライアント
const socket = io({
reconnection: true,
reconnectionAttempts: 5,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000
});
socket.on('disconnect', () => {
console.log('Disconnected, attempting reconnect...');
});
socket.on('reconnect', (attemptNumber) => {
console.log(`Reconnected after ${attemptNumber} attempts`);
});
SSE (Server-Sent Events)
// サーバー
app.get('/events', (req, res) => {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const sendEvent = (data) => {
res.write(`data: ${JSON.stringify(data)}\n\n`);
};
// クリーンアップ
req.on('close', () => {
// リソース解放
});
});
🚫 禁止事項まとめ
- 再接続ロジックなし
- 認証なしの接続許可
- メッセージバリデーション省略
- クリーンアップ処理忘れ
スコア
総合スコア
50/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です