Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Agones_x_Ebitengineでバーチャルオフィス作ってみた_.pdf
Search
o-ga
November 06, 2026
31
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Agones_x_Ebitengineでバーチャルオフィス作ってみた_.pdf
o-ga
November 06, 2026
More Decks by o-ga
See All by o-ga
GoConferenceMini2026inSendai_-_2026.02.21.pdf
tabe
0
100
GoConnect#9 2025.08.19
tabe
0
120
kanazawa.go 2025.07.27
tabe
0
110
ランドネットLT会.pdf
tabe
0
56
Tavinikkiyとかいう構想半年、開発2ヶ月みたいなプロダクトを個人開発している話
tabe
0
49
テテミート 2024.11.22
tabe
0
50
Genericsについて改めて学んでみた
tabe
0
89
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Chasing Engaging Ingredients in Design
codingconduct
0
390
Code Review Best Practice
trishagee
74
20k
Done Done
chrislema
187
17k
Building the Perfect Custom Keyboard
takai
2
950
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Building AI with AI
inesmontani
PRO
1
1.4k
Un-Boring Meetings
codingconduct
0
490
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
Transcript
Ebitengine ぷちConf #5 / LT Agones × Ebitengineで バーチャルオフィス 作ってみた!
Gopher が数百体歩き回るオフィスを、Kubernetes 上のゲームサーバで動かす 2026-11-06 · o-ga09
☸ Ebitengine ぷちConf #5 WHO AM I 自己紹介 o_ga09 o_ga09
@o_ga09 💼 バックエンドエンジニア 𝕏 X:@o_ga09
作ったもの:Gopher Office 招待URLを開くと、同じオフィスに Gopher として⼊れる。歩く姿が全員に同期される。 01 02 03 招待URLで⼊室 ブラウザで動く
数百体を同時表⽰ /w/{招待コード} を開くだけ。ゲス トでそのまま⼊れる Ebitengine を WASM でビルド。 WASD かクリックで歩く 1 ルーム 200 体まで。画⾯が Gopher で埋まる
なぜ、作ろうと思ったか? • Agonesを知ったのは、5年くらい前のゲーム会社の勉強会 ◦ k8sで動くんだー • マネージドk8sは個⼈で試すには費⽤が⾼い!!! • でも、おもしろそう😃
なぜ、作ろうと思ったか? • 最近、ミニPCでおうちk3sを構築した • いろいろArgoCDまで構築していろいろ動かしている ↓ ↓ ↓ いまなら、できるじゃん🎉
なぜ、作ろうと思ったか? • せっかくなら、画⾯もサーバーもGoで実装できるじゃん! • ebitengine使おう!
DEMO 1 画⾯を Gopher で 埋めてみる
AGONES Agones とは Kubernetes 上で、専⽤ゲームサーバを動かし、スケールさせるための OSS。 GameServer Fleet Allocation 1
試合‧1 ルーム⽤のサーバ 1 台を 表す、Kubernetes のリソース GameServer を事前に何台か待機 させておく仕組み 待機中の 1 台を「使⽤中」にして 確保する操作 使⽤中の GameServer は、スケールインで消されない。 https://agones.dev/site/ https://github.com/agones-dev/agones
ルームごとにサーバが要る 状態を持つ ⻑く⽣きる ⼈がいる間は消せない 全員の位置を、メモリ上でシ ミュレーションし続ける ⼈がいる間は WebSocket をつ ないだまま動く
スケールインで勝⼿に落とされ ると、全員が切れる 普通の Deployment だと、この扱いが難しい。
GameServer のライフサイクル Ready Fleet が待機させている Allocated Shutdown ⼊室要求で確保。スケールイ ンの対象外 サーバ⾃⾝が終了を伝え、
Fleet が補充する サーバは⾃分で Ready を宣⾔する。終了も、サーバ⾃⾝が Shutdown で決める。
1 ルーム = 1 GameServer 1 最初の⼊室で、API が GameServerAllocation を作る(annotation
に roomId) 2 待機中の Ready が 1 台 Allocated になり、そのルーム専⽤になる 3 ゲートウェイが WebSocket を、その GameServer に中継する 4 無⼈が 5 分続いたら、サーバ⾃⾝が Shutdown。Fleet が代わりを補充
全体構成 /v1/* → office-api Browser Cloudflare Tunnel Ebitengine (WASM) →
ingress-nginx (おうち k3s) /room → gateway / → office-web API → GameServerAllocation で確保 gateway → Agones の GameServer(ルームごと)へ中 継
EBITENGINE クライアントとサーバで 同じ sim を動かす internal/sim 意図を同期する 整数 tick で進める
マップ‧衝突‧経路探索‧移動。 サーバ(20Hz)とブラウザで共有 毎フレームの座標ではなく「どこ へ向かうか」を送る。各クライア time.Now() に依存しない。同じ⼊ ⼒なら誰の画⾯でも同じ結果にな ントが補間する る
DEMO 2 みなさんも ⼊ってみてください 招待URL: [https://office.o-ga09.com/w/________]
まとめ Agones Ebitengine これから ルームのような⻑命‧ステート フルなサーバを、Kubernetes で 安全に扱える WASM で動き、sim
をサーバと 共有できる 複数ルームとワークスペースの UI、永続アカウント ご清聴ありがとうございました!