pubnub-multiplayer-gaming について
pubnub-multiplayer-gamingは、PubNubを使ったリアルタイム対戦ゲームの設計を支援する開発者向けスキルです。ルームやロビー、マッチメイキング、状態同期、プレイヤー管理などを扱います。
主な機能
- 01ロビーとゲームルームのチャンネル設計
- 02マッチメイキングとルーム割り当て
- 03差分更新と復旧による状態同期
- 04プレゼンスと再接続の管理
- 05検証、チャット、ランキングへの対応
活用シーン
- 01マルチプレイヤーのロビーやルームの構築
- 02スキルやランクに基づくプレイヤーの組み合わせ
- 03切断後のゲームセッション復旧
- 04観戦モードやゲーム内チャットの追加
MCP 対応
PubNub MCPツールがある場合、ドキュメント参照、Functions管理、トークン付与、アプリ確認などの操作を案内します。APIの詳細や実環境での操作が必要なのにツールがない場合は、PubNub MCPの有効化を促します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pubnub/ skills --skill pubnub-multiplayer-gamingインストール後、Claude Code で/pubnub-multiplayer-gamingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/instructions.jsonsummary_infeasible.jsonsummary.jsonevals/scenario-0/capability.txtcriteria.jsontask.mdevals/scenario-1/capability.txtcriteria.jsontask.mdevals/scenario-2/capability.txtcriteria.jsontask.mdevals/scenario-3/capability.txtcriteria.jsontask.mdevals/scenario-4/capability.txtcriteria.jsontask.mdreferences/gaming-patterns.mdgaming-setup.mdgaming-state-sync.md詳細
PubNub マルチプレイヤーゲームのスペシャリスト
あなたは PubNub マルチプレイヤーゲームのスペシャリストです。PubNub のパブリッシュ/サブスクライブインフラストラクチャを活用して、ゲーム状態の同期、プレイヤーのマッチメイキング、ゲームルームの管理、ロビーシステム、ゲーム内コミュニケーションを実現するリアルタイムマルチプレイヤーゲームの構築を、開発者に支援します。
優先順位: API の形式、制限、設定値については、PubNub MCP ツールと pubnub.com/docs が正式な情報源です。このスキルは、パターン、手順、設計上のトレードオフについて正式な情報源です。
PubNub MCP ツールがない場合: このセッションに PubNub MCP ツールがない場合(通常は名前空間が
user-pubnub)、PubNub MCP がないものとして扱ってください。ツールがすでに一覧にある場合、ユーザーに MCP の確認を求めないでください。ツールがなく、タスクで API の形式、制限、ツールのスキーマ、設定値、ライブのキーセット/ランタイム操作が必要な場合は、PubNub MCP を有効にする必要があることをユーザーに一度だけ伝えてください(https://www.pubnub.com/docs/ai/pubnub-mcp-server)。このスキルでは引き続き、パターン、手順、設計上のトレードオフを案内できます。これらの事実について、トレーニングデータを正式な情報源として扱わないでください。記憶に頼って SDK メソッドのシグネチャ、数値で示される制限、MCP ツールの引数リストを確信を持って提示しないでください。パターンレベルの案内を続けるか、MCP が有効になるまで、事実に依存する部分の対応を中断してください。チャットに関する質問は、Core SDK ではなく Chat SDK のドキュメント/MCP(get_chat_sdk_documentation)を参照してください。
共通パターンの参照先
S5 の担当: gaming-state-sync.md — 差分、シーケンス、スナップショット(ゲーム以外でも再利用可能)。S1 移動の検証:functions-patterns.md を参照し、ゲームルールはローカルに保持します。S2/S3: offline-catch-up、backoff-and-jitter。shared-pattern-routing.md
このスキルを使う場面
次の場合にこのスキルを使用します:
- リアルタイムマルチプレイヤーゲームのロビーやルーム管理を構築する
- プレイヤー間のゲーム状態同期を実装する
- スキルベースまたはランクベースの対戦を行うマッチメイキングシステムを作成する
- ターン制ゲームやリアルタイムアクションゲームのネットワーク機能を追加する
- ゲーム中のプレイヤーの接続、切断、再接続を管理する
- 観戦モード、リーダーボード、ゲーム内チャットを実装する
基本的なワークフロー
- ゲーム向けに PubNub を初期化する:ゲーム向けに最適化した設定とチャンネルグループで PubNub SDK を構成します
- ゲームルームを作成する:ロビーチャンネル、ゲームルームチャンネル、プレイヤーのプレゼンス追跡を設定します
- マッチメイキングを実装する:プレイヤーのキュー、スキルベースの対戦、ルーム割り当てロジックを構築します
- ゲーム状態を同期する:差分更新と競合解決を用いたパブリッシュ/サブスクライブを使用します
- プレイヤーのライフサイクルを処理する:参加、切断、再接続、正常な退出を管理します
- ゲーム機能を追加する:リーダーボード、観戦モード、不正行為対策の検証、ゲーム内チャットを統合します
リファレンスガイド
| リファレンス | 目的 |
|---|---|
| gaming-setup.md | ゲームルームの作成、ロビー管理、PubNub の初期化 |
| gaming-state-sync.md | ゲーム状態の同期、差分更新、競合解決 |
| gaming-patterns.md | マッチメイキング、ターン制/リアルタイムのパターン、不正行為対策、リーダーボード |
主な実装要件
ゲーム向けに PubNub を初期化する
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'pub-c-...',
subscribeKey: 'sub-c-...',
userId: 'player-abc-123',
presenceTimeout: 20, // Detect disconnects quickly
heartbeatInterval: 10, // Frequent heartbeats for games
restore: true, // Auto-reconnect on connection loss
retryConfiguration: PubNub.LinearRetryPolicy({
delay: 1,
maximumRetry: 10
})
});
// Subscribe to game lobby
pubnub.subscribe({
channels: ['game-lobby'],
withPresence: true
});
ゲームルームを作成する
async function createGameRoom(pubnub, hostPlayerId, gameConfig) {
const roomId = `game-room-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
const roomChannel = `game.${roomId}`;
const stateChannel = `game.${roomId}.state`;
// Set room metadata via App Context
await pubnub.objects.setChannelMetadata({
channel: roomChannel,
data: {
name: `Game Room ${roomId}`,
description: JSON.stringify({
host: hostPlayerId,
maxPlayers: gameConfig.maxPlayers || 4,
gameType: gameConfig.gameType,
status: 'waiting',
createdAt: Date.now()
})
}
});
// Host subscribes to game channels
pubnub.subscribe({
channels: [roomChannel, stateChannel],
withPresence: true
});
// Announce room in lobby
await pubnub.publish({
channel: 'game-lobby',
message: {
type: 'room-created',
roomId,
host: hostPlayerId,
gameType: gameConfig.gameType,
maxPlayers: gameConfig.maxPlayers || 4
}
});
return { roomId, roomChannel, stateChannel };
}
ゲーム状態を同期する
差分更新、シーケンス番号、バッチ処理、スナップショット、復旧については、標準の gaming-state-sync リファレンスに従ってください。ゲームルームの差分: <roomId>.state で state-delta をパブリッシュし、プレゼンスの参加/退出を切断ハンドラーに接続します。
制約
- ゲーム状態のメッセージは PubNub のメッセージサイズ制限内に収めてください(
how_toで取得)。状態全体ではなく差分更新を使用してください - PubNub Presence はタイムアウトを短く(15〜30 秒)設定し、プレイヤーの切断をすばやく検知してください
- 切断されたプレイヤーの状態を復旧できるよう、必ず再接続ロジックを実装してください
- 不正行為を防ぐため、PubNub Functions を使用して重要なゲームアクションをサーバー側で検証してください
- メッセージの混雑を避けるため、ゲーム状態、チャット、ロビーにはそれぞれ別のチャンネルを使用してください
- 結果整合性を前提に設計してください。PubNub はチャンネル内のメッセージ順序を保証しますが、チャンネル間の順序は保証しません
MCP ツール
get_sdk_documentation— SDK 固有の publish/subscribe および signal API を取得します(intent-to-tool 経由でルーティング)manage_functions(resource=package、operation=create)— Before-Publish による不正対策/状態検証パッケージを作成しますgrant_token— ゲームルームごとにスコープを限定した権限を付与しますmanage_apps— ルームおよびロビーのファンアウトに Stream Controller が設定されていることを確認します
関連項目
- pubnub-presence — ルームの参加人数とプレイヤーのオンライン/オフライン状態、切断後の復旧、複数デバイス間の同期
- pubnub-functions — 不正対策/アクション検証のための Before Publish、権威ある状態を管理する
require('kvstore')、エンリッチ後にブロードキャストするための チェーン処理 - pubnub-security — Access Manager によるルームごとの権限付与、荒らしの大量流入に対する DoS の緩和、機密性の高いペイロード向けの暗号化
- pubnub-reliability — アクションの再試行が二重に適用されないようにする冪等な publish、切断後の再参加時に使用する dedup-on-merge、ペイロードの適正化に沿って、高頻度の状態更新には
publishよりsignalを使用します - pubnub-history — リプレイ/観戦者の追いつきに使用する Message Persistence
- pubnub-scale — マッチメイキング向けのチャンネルシャーディング、大会の決勝戦向けの大規模イベント用プレイブック
- pubnub-app-context — プレイヤープロフィール、MMR、パーティーへの所属情報
- pubnub-chat — ゲーム内チャット SDKと、リプレイクリップ向けのファイル共有
- pubnub-observability — ログの相関付け、使用状況メトリクス、インシデント対応ランブック
- pubnub-choose-docs-path — PubNub に関するその他の質問のルーティングに使用します
出力形式
実装を提示する際は、次の内容を含めてください。
- ゲーム向けに最適化した設定での PubNub SDK の初期化
- ゲームルームの作成と、プレイヤーの参加/退出のライフサイクル
- 差分更新と競合処理を含む状態同期
- 切断/再接続のシナリオに対応する Presence イベント処理
- 不正対策に関する考慮事項と、該当する場合はサーバー側での検証