Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agones_x_Ebitengineでバーチャルオフィス作ってみた_.pdf

Avatar for o-ga o-ga
November 06, 2026
31

 Agones_x_Ebitengineでバーチャルオフィス作ってみた_.pdf

Avatar for o-ga

o-ga

November 06, 2026

Transcript

  1. Ebitengine ぷちConf #5 / LT Agones × Ebitengineで バーチャルオフィス 作ってみた!

    Gopher が数百体歩き回るオフィスを、Kubernetes 上のゲームサーバで動かす 2026-11-06 · o-ga09
  2. ☸ Ebitengine ぷちConf #5 WHO AM I 自己紹介 o_ga09 o_ga09

    @o_ga09 💼 バックエンドエンジニア 𝕏 X:@o_ga09
  3. 作ったもの:Gopher Office 招待URLを開くと、同じオフィスに Gopher として⼊れる。歩く姿が全員に同期される。 01 02 03 招待URLで⼊室 ブラウザで動く

    数百体を同時表⽰ /w/{招待コード} を開くだけ。ゲス トでそのまま⼊れる Ebitengine を WASM でビルド。 WASD かクリックで歩く 1 ルーム 200 体まで。画⾯が Gopher で埋まる
  4. AGONES Agones とは Kubernetes 上で、専⽤ゲームサーバを動かし、スケールさせるための OSS。 GameServer Fleet Allocation 1

    試合‧1 ルーム⽤のサーバ 1 台を 表す、Kubernetes のリソース GameServer を事前に何台か待機 させておく仕組み 待機中の 1 台を「使⽤中」にして 確保する操作 使⽤中の GameServer は、スケールインで消されない。 https://agones.dev/site/ https://github.com/agones-dev/agones
  5. GameServer のライフサイクル Ready Fleet が待機させている Allocated Shutdown ⼊室要求で確保。スケールイ ンの対象外 サーバ⾃⾝が終了を伝え、

    Fleet が補充する サーバは⾃分で Ready を宣⾔する。終了も、サーバ⾃⾝が Shutdown で決める。
  6. 1 ルーム = 1 GameServer 1 最初の⼊室で、API が GameServerAllocation を作る(annotation

    に roomId) 2 待機中の Ready が 1 台 Allocated になり、そのルーム専⽤になる 3 ゲートウェイが WebSocket を、その GameServer に中継する 4 無⼈が 5 分続いたら、サーバ⾃⾝が Shutdown。Fleet が代わりを補充
  7. 全体構成 /v1/* → office-api Browser Cloudflare Tunnel Ebitengine (WASM) →

    ingress-nginx (おうち k3s) /room → gateway / → office-web API → GameServerAllocation で確保 gateway → Agones の GameServer(ルームごと)へ中 継
  8. EBITENGINE クライアントとサーバで 同じ sim を動かす internal/sim 意図を同期する 整数 tick で進める

    マップ‧衝突‧経路探索‧移動。 サーバ(20Hz)とブラウザで共有 毎フレームの座標ではなく「どこ へ向かうか」を送る。各クライア time.Now() に依存しない。同じ⼊ ⼒なら誰の画⾯でも同じ結果にな ントが補間する る
  9. まとめ Agones Ebitengine これから ルームのような⻑命‧ステート フルなサーバを、Kubernetes で 安全に扱える WASM で動き、sim

    をサーバと 共有できる 複数ルームとワークスペースの UI、永続アカウント ご清聴ありがとうございました!