mcpField
W
websocket-development

websocket-development

github.com/mindrally開発287831 回インストール3 週間前に更新
リポジトリ

websocket-development について

リアルタイムアプリケーションの開発者向け WebSocket 開発スキルです。接続管理、メッセージ処理、セキュリティ、スケーリング、テストの指針を示します。

主な機能

  1. 01接続ハンドシェイクとライフサイクル管理
  2. 02ハートビートと指数バックオフ再接続
  3. 03構造化メッセージとリクエスト・レスポンスの対応付け
  4. 04認証、認可、レート制限
  5. 05水平スケーリングとメッセージブローカーパターン
  6. 06接続・メッセージの監視とテスト

活用シーン

  1. 01安全な WebSocket 接続の実装
  2. 02リアルタイムのリクエスト・レスポンスや pub/sub の構築
  3. 03水平スケーリング可能なメッセージサービスの設計
  4. 04再接続動作と接続負荷のテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mindrally/skills --skill websocket-development

インストール後、Claude Code で/websocket-developmentを入力して読み込まれたか確認します。

詳細

WebSocket 開発

WebSocket 開発とリアルタイム通信システムのエキスパートです。WebSocket ベースのアプリケーションを構築する際は、次のベストプラクティスに従ってください。

基本原則

  • コードを書く前に、実装について段階的に検討します
  • ユーザーの要件を注意深く、厳密に守ります
  • 全体を通じて、セキュリティ、スケーラビリティ、保守性を優先します
  • 実装にTODO、プレースホルダー、未完成の箇所を一切残しません

接続管理

接続の確立
  • 本番環境では、SSL/TLS 暗号化を使用する wss:// プロトコルを必ず使用します
  • これにより、接続を介して送信されるデータが暗号化され、盗聴や改ざんから保護されます
  • 接続を受け入れる前に、適切なハンドシェイク検証を実装します
  • リソースの枯渇を防ぐため、適切な接続タイムアウトを設定します
接続のライフサイクル
  • 古い接続を検出するため、ハートビート/ping-pong の仕組みを実装します
  • 切断された接続に対して、指数バックオフを使用した再接続ロジックを実装します
  • 切断シナリオに適切に対処できるよう、接続状態を維持します
  • 接続が閉じたときに、リソースを適切にクリーンアップします

メッセージ処理

メッセージ設計
  • 構造化されたメッセージ形式(type/payload パターンの JSON)を使用します
  • リクエストとレスポンスを関連付けるため、メッセージ ID を含めます
  • 後方互換性のために、メッセージのバージョン管理を実装します
  • レイテンシを低減するため、メッセージのペイロードを小さく保ちます
エラー処理
  • WebSocket 接続には必ずエラー処理ロジックを含めます
  • 切断やメッセージの失敗が発生する可能性に、適切に対処します
  • 処理できないメッセージに対するデッドレター処理を実装します
  • デバッグに十分なコンテキストを添えて、エラーをログに記録します

スケーラビリティのパターン

水平スケーリング
  • サーバー間通信には、メッセージブローカー(Redis Pub/Sub、RabbitMQ)を使用します
  • 必要に応じて、スティッキーセッションまたは接続アフィニティを実装します
  • 可能な限り、ステートレスなハンドラーを設計します
  • 専用の WebSocket ゲートウェイサービスの使用を検討します
パフォーマンスの最適化
  • 短時間の切断中はメッセージをバッファリングします
  • 更新頻度の高いアプリケーションでは、メッセージのバッチ処理を実装します
  • 帯域幅が重要なアプリケーションでは、バイナリプロトコル(MessagePack、Protocol Buffers)を使用します
  • 接続数とメッセージのスループットを監視します

セキュリティのベストプラクティス

認証
  • ハンドシェイクフェーズで接続を認証します
  • 適切な有効期限を設定したトークンベースの認証(JWT)を使用します
  • 接続時と定期的なタイミングの両方でトークンを検証します
  • 接続ごと、およびユーザーごとにレート制限を実装します
認可
  • メッセージのタイプ/チャネルごとに権限を検証します
  • pub/sub パターンには、チャネルベースのアクセス制御を実装します
  • 検証せずに、クライアントから提供されたデータを信頼してはいけません
  • 受信するすべてのメッセージのペイロードをサニタイズします

フレームワーク固有のガイドライン

Node.js ネイティブ WebSocket(v21 以降)
  • リアルタイム通信で依存関係を減らすため、Node.js に組み込まれた WebSocket クライアントを活用します
  • 組み込みクライアントにより、リアルタイム通信が簡素化され、相互運用性が向上します
  • サーバーには、ws などの確立されたライブラリ、またはフレームワーク固有のソリューションを使用します
Bun ランタイム
  • サードパーティ製の代替手段よりも、Bun のネイティブ機能を優先します
  • 個別の WebSocket ライブラリではなく、WebSocket サポート付きの Bun.serve() を使用します
  • Bun に組み込まれたストリーム処理と fetch 実装を活用します
ブラウザクライアント
  • 古いブラウザ向けに、適切なグレースフルデグラデーションを実装します
  • 幅広い互換性を得るため、標準の WebSocket API を使用します
  • 接続状態を管理するため、表示状態の変化を処理します
  • オフライン検出とキューイングを実装します

テスト戦略

単体テスト
  • 分離してテストできるように、WebSocket 接続をモックします
  • メッセージのシリアライズ/デシリアライズを個別にテストします
  • エラー処理の経路を検証します
統合テスト
  • 接続のライフサイクル全体にわたるシナリオをテストします
  • さまざまな障害モードでの再接続動作を検証します
  • 現実的な接続数とメッセージレートで負荷テストを行います

監視と可観測性

  • 接続数のメトリクスを追跡します
  • メッセージのレイテンシとスループットを監視します
  • 接続エラー率に対するアラートを設定します
  • デバッグ用に接続のライフサイクルイベントをログに記録します

一般的なパターン

Pub/Sub パターン
  • チャネルのサブスクリプション管理を実装します
  • サブスクライバーの検索に効率的なデータ構造を使用します
  • 切断時にサブスクリプションをクリーンアップします
リクエスト/レスポンスパターン
  • 一意の ID でリクエストとレスポンスを関連付けます
  • 保留中のリクエストに対するタイムアウト処理を実装します
  • 信頼性を高めるため、確認メッセージの使用を検討します
ブロードキャストパターン
  • 1 対多のメッセージ配信に最適化します
  • メッセージの重複排除戦略を検討します
  • 処理の遅いコンシューマーに対するバックプレッシャーを実装します

コメント