技術書典21で「Goで作って学ぶリアルタイム通信サーバー入門 〜自作ターミナルゲームでわかるオンラインゲームの裏側〜」という本を出します。技術書典21のオンライン開催は2026/11/21(土)〜12/6(日)。オフライン開催は11/23(月・祝)に池袋サンシャインシティで行われ、どちらでも頒布する予定です。
どんな本かというと、次の動画のようなターミナルで動く対戦シューティングゲームをGoで作りながら、リアルタイム通信サーバーに入門する本です。
オンラインゲームでは、自分がプレイヤーを動かせば相手の画面でもすぐに動き、相手が撃った弾は自分の画面にも飛んでくる。この同期がどう実現されているのかを、既成のゲームエンジンやネットワークライブラリを使わず、自分の手で作って学べるようにしました。具体的には次の2つを扱っています。
- リアルタイム同期の土台となる通信の形。TCP接続の上に独自プロトコルを設計し、ペイロードをProtocol Buffersで表現して、クライアントとサーバーが双方向にメッセージを送り合う仕組みを作る
- その土台の上で動く同期の基本形。サーバーがゲーム状態を持ち、変化したら全クライアントへ配信する。プレイヤーの移動のようなクライアント起点の変化と、弾の移動のようなサーバー起点の変化の両方を実装する
章立ては次のとおりで、1章ずつ機能を足していき、最後にゲームが完成するハンズオン形式になっています。
- 第1章: ターミナルでプレイヤーを動かす
- 第2章: サーバーと繋いでゲームを起動する
- 第3章: プレイヤーの動きを同期する
- 第4章: 弾を撃てるようにする
- 第5章: 弾が当たったらやられる
自分はもともとWebサービス開発の出身で、リクエストを送るとレスポンスが返ってくるHTTPの世界しか知りませんでした。そこからリアルタイム通信で状態を同期するサービスの開発に携わって一歩ずつ学ぶうちに、「最初にこれを知っていれば、ずっと理解しやすかった」と思える基本の仕組みが見えてきました。この本はその基本の仕組みを、Webの開発経験はあるがリアルタイム通信は初めてという人に向けてまとめたものです。
マーケットページが公開されたらまた告知するので、面白そうと思った人はX(@shibayu36)をフォローして続報を待ってもらえると嬉しいです!