全てGoで作るP2P対戦ゲーム入門

Room 1 17:00 - 17:20

WebAssembly と WebRTC を駆使し、フロントエンドから通信・レーティングまで “まるごと Go” で実装した 1 対 1 対戦ゲームがあります。 一般にゲーム開発では複数言語が混在しがちですが、今回は Ebitengine x Pion/WebRTC を核に Go だけで完結させました。 しかし「全部 Go」で作る手順や設計上の勘所は、まだ体系的に共有されていません。 サーバ負荷ゼロの完全 P2P 構成を実現するまでの道のりを 20分で解説します。 まず、ゲームを支える 5 つの要素解説し、役割と接続フローの全体像を提示します。 - Ebitengine: wasm ビルドでブラウザゲームを実現 - WebSocket サーバ: 軽量マッチングとシグナリング入口 - Ayame (go-ayame): シグナリング・プロトコルを簡潔に実装 - Pion/WebRTC: DataChannelによるゲーム操作データのP2P通信を実現 - レーティングサーバ: httpサーバでスコア管理を自動化 続いて、Go の哲学 「共有メモリによる通信ではなく、通信による共有を」 を体現する実装パターンについて goroutine と channel で描画ロジックと通信ロジックを分離し、保守性と並行性能を両立させたコード片を具体例とともに解説します。 最後に、ライブデモでブラウザを 2 枚立ち上げ、サーバレスで動く対戦をその場で確認していただきます。 「WebRTC や WASM は初めて」という方でも、セッション終了時には “Go だけでリアルタイムゲームを作れる” イメージを鮮明に持ち帰れるはずです。 活用しているOSS - Ebitengine: https://github.com/hajimehoshi/ebiten - Pion WebRTC: https://github.com/pion/webrtc - WebRTC Signaling Server Ayame: https://github.com/OpenAyame/ayame 自作ゲーム関連: - ブラウザゲーム: https://github.com/ponyo877/ebiten-hit-and-blow - マッチングサーバ: https://github.com/ponyo877/easy-matchmaking - レーティングサーバ: https://github.com/ponyo877/easy-rating