Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゲーム画面をブラウザから見られるサイトを作った話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
soukouki
March 01, 2026
Technology
0
7
ゲーム画面をブラウザから見られるサイトを作った話
CircLeT 2026(2026-03-01)にて発表したスライドです。
soukouki
March 01, 2026
Tweet
Share
More Decks by soukouki
See All by soukouki
Simutrans CityView (日本語版)
soukouki
0
91
Simutrans CityView (English)
soukouki
0
40
10分で学ぶ すてきなモナド
soukouki
1
160
Misskey自鯖を建ててみた
soukouki
1
85
1年前の日記を要約するツールをローカルLLM&自作MCPサーバーで作った話
soukouki
0
440
自作Cコンパイラ 8時間の奮闘
soukouki
0
1.8k
定理証明支援系Coq(セキュリティキャンプLT会)
soukouki
1
260
Coqで選択公理を形式化してみた
soukouki
0
490
「プログラミング」と「数学」の関係 〜カリー・ハワード同系対応と定理証明支援系Coq〜
soukouki
1
350
Other Decks in Technology
See All in Technology
オンプレとGoogle Cloudを安全に繋ぐための、セキュア通信の勘所
waiwai2111
3
1k
社内でAWS BuilderCards体験会を立ち上げ、得られた気づき / 20260225 Masaki Okuda
shift_evolve
PRO
1
150
【SLO】"多様な期待値" と向き合ってみた
z63d
2
270
ローカルでLLMを使ってみよう
kosmosebi
0
210
大規模な組織におけるAI Agent活用の促進と課題
lycorptech_jp
PRO
5
7.2k
AWS Bedrock Guardrails / 機密情報の入力・出力をブロックする — Blocking Sensitive Information Input/Output
kazuhitonakayama
2
180
チームメンバー迷わないIaC設計
hayama17
5
3.2k
「データとの対話」の現在地と未来
kobakou
0
1k
dbt meetup #19 『dbtを『なんとなく動かす』を卒業します』
tiltmax3
0
130
Exadata Fleet Update
oracle4engineer
PRO
0
1.3k
Serverless Agent Architecture on Azure / serverless-agent-on-azure
miyake
1
110
「使いにくい」も「運用疲れ」も卒業する UIデザイナーとエンジニアが創る持続可能な内製開発
nrinetcom
PRO
1
760
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
770
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
230
How to Think Like a Performance Engineer
csswizardry
28
2.5k
30 Presentation Tips
portentint
PRO
1
250
Agile that works and the tools we love
rasmusluckow
331
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
970
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
89
Music & Morning Musume
bryan
47
7.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
110
Transcript
ゲーム画面をブラウザから見られるサイトを作 った話 CircLeT 2026 2026-03-01 1
自己紹介 sou7といいます。 そーなな、そーせぶん、そ ーくんなど好きに呼んでく ださい。 会津大学の修士1年生 趣味 : なろう小説を読み漁る こと、鉄道(ライト勢)
おすすめの小説を紹介し合 いましょう! 嫌いなもの : 花粉症(つらい) 2
連絡先 ActivityPub/Misskey: @
[email protected]
→ Twitter: @sou7_ _ _ GitHub: @soukouki
3
交通系シミュレーションゲーム Simutrans Simutransとは、鉄道・自動車・船・飛行機などの交通手段を使って、乗客や 貨物を運んで利益を得る交通系シミュレーションゲームです。 4
このゲームのすごいところ OSSで開発されていて、複数のフォークがある 日本人向けのプレイに特化したフォークなども存在する! 2Dゲームで軽いので、マップサイズをめちゃくちゃ大きくできる A列車で行こう9では、マップは10km四方まで Simutransでは1マス125mと換算すると625km(5000x5000)でも動作可能 飛行機と寝台特急の競争がプレイングとして可能 編成数の上限は65535編成 A列車で行こう9の編成数の上限は列車300編成に自動車300台 有志が作成したグラフィックが大量にあり、日本の現役の鉄道車両はほぼ
すべてカバー済み マルチプレイ可能 5
このゲームをもっと広めたい! こんな素晴らしいゲームであるSimutransをもっと広めたい! マルチプレイで作った素敵なマップを自慢したい! しかしながら、マルチプレイの様子を見学するには以下の手順が必要で、ハー ドルが高いのが現状でした。 1. マルチプレイのDiscordの招待リンクを探す 2. 知らない人しか居ないDiscordサーバーに入る 3.
本体とグラフィックをダウンロードする 4. マルチプレイ用のサーバーに接続する 6
この状況をなん とかしたい 他の魅力的なゲームが溢れている 昨今、Simutransの良さを広めて いきたい!!! ということで、Simutransのゲー ム画面をブラウザから見られるサ イトを作ってみました。 https://cityview.sou7.io/ 7
CityViewの仕組み SimutransをDockerコン テナで起動し、スクリー ンショットを撮影 スクショ位置はかなり誤 差があるので、位置合わ せをする 地図描画ライブラリ向け に、正方形のタイルに切 り出す※
※実際にはタイルをまとめてより低ズームレベルの画像を生成したり、画像の圧縮を行ったりしています。 8
全体の構成 今回はDocker Composeのレプリカ機能を使ったマイクロサービスアーキテク チャもどきで作成しました。 理由は以下のとおりです。 スクショ撮影の部分でゲームを複数起動するのは処理的に難しい 1コンテナ1Simutransという形にして、レプリカ機能を使うことで考えるこ とがグッと減る Rubyが好きなので複雑そうなところはRubyで書きたい 画像処理はライブラリがないと面倒なのでPythonで書きたい
9
Dockerコンテナ上でゲームを起動する? SimutransはDockerコンテナ上でも動作します SimutransはLinuxに対応していて、アンチチートなどの仕組みはありません コンテナ上に仮想ディスプレイを置き、仮想的なキー入力を伝えてあげる ことで、Simutransをプログラムから操作できます。 あとはHTTP APIを提供しスクショを撮影するサーバーを置けば、いい感じに Simutransのスクリーンショットを撮れるコンテナの完成です。 10
まとめ 1. Simutransという素敵なゲームが あるのでみんな遊びましょう! 最初はちょっととっつきづら い面もあるので、興味がある 人は連絡をください! 2. ゲーム画面をブラウザから見られ るツールを作りました。
3. DockerとDocker Composeを活用 し、ややこしい部分を回避しまし た。 デモサイト : https://cityview.sou7.io/ 11
おまけ 時間があったら話します。 1. 使ったけれど説明しきれなかったもの 2. コードの規模 12
使ったけれど説明しきれなかったもの MapLibre GL JS・地図タイル 画面移動やズームを自由自在に行うために、地図描画ライブラリである MapLibre GL JSを使いました。 MapLibre GL
JSは地図タイル形式のデータを要求するため、CityViewの大部 分のコードはこの地図タイルのデータを作成することに費やしています。 Prefect 地図タイルの作成を並列でうまいこと処理するためにはタスクオーケストレ ーターを使うのが良いだろうと考え、Prefectを使いました。ただ、やってみ た結果としてはPrefectほどの多機能さはあまり必要なかったような気もして います。 13
LLMの活用について CityViewの開発には、コーディングエージェントは使わず、Chat形式でひた すらプログラムを書かせていました。 Claude Sonnetはもちろん活用でき、Kimi K2の性能はその少し下だが十分使 える、そんな印象を受けました。 マイクロサービスアーキテクチャもどきを採用したことで、各サービスごと に仕様が閉じているため開発効率が向上しました。 14
コードの規模 大体6000行くらいでした。 言語 行数 Python 2635行 Ruby 1949行 HTML・JS 1416行
Rubyが好きなので、Rubyでも書けそ うな部分はRubyで書きました。 区分 行数 prefect関連 1573行 service-capture 968行 その他のサービス 1062行 バックエンド 981行 フロントエンド 1416行 15