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
soukouki
March 01, 2026
Technology
82
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ゲーム画面をブラウザから見られるサイトを作った話
CircLeT 2026(2026-03-01)にて発表したスライドです。
soukouki
March 01, 2026
More Decks by soukouki
See All by soukouki
ローカルLLMバイブコーディングのすすめ
soukouki
0
87
Simutrans CityView (日本語版)
soukouki
0
130
Simutrans CityView (English)
soukouki
0
100
10分で学ぶ すてきなモナド
soukouki
1
190
Misskey自鯖を建ててみた
soukouki
1
110
1年前の日記を要約するツールをローカルLLM&自作MCPサーバーで作った話
soukouki
0
530
自作Cコンパイラ 8時間の奮闘
soukouki
0
1.9k
定理証明支援系Coq(セキュリティキャンプLT会)
soukouki
1
280
Coqで選択公理を形式化してみた
soukouki
0
530
Other Decks in Technology
See All in Technology
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
130
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
160
組織における AI-DLC 実践
askul
0
230
Kotlin 開発のツラミを爆破した話! / Explode the difficulty of Kotlin dev!
eller86
0
120
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
150
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.9k
Zenoh on Zephyr on LiteX
takasehideki
2
140
Foundry Toolkit + Lemonade Serverでローカルワークフロー開発
seosoft
0
110
Why is RC4 still being used?
tamaiyutaro
0
250
product engineering with qa
nealle
0
110
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
160
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
240
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
990
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
BBQ
matthewcrist
89
10k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
480
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
sira's awesome portfolio website redesign presentation
elsirapls
0
290
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
350
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
The Curious Case for Waylosing
cassininazir
1
410
The Pragmatic Product Professional
lauravandoore
37
7.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
210
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