開発ブログ

ポケット箱庭の作りと技術スタック:システム構成図と、それぞれを選んだ理由

公開日: 文:katatedake

ポケット箱庭は、スマホのブラウザだけで動く3Dの建築ゲームです。この記事では、それがどんな部品でできているかを、システム構成図と技術スタックの一覧で説明します。あわせて、それぞれを選んだ理由と、公開してから作りながら変えたことをまとめました。

先に:3つの方針

システム構成図

ポケット箱庭の中身は、大きく3つに分かれます。箱庭を持って描くのはスマホのブラウザの中、静的ファイルの配信と小さな処理を受け持つのがCloudflare、広告やフォームなどは外部のサービスです。

ポケット箱庭のシステム構成図。スマホのブラウザの中に、画面と操作、箱庭のデータ、three.js、localStorage、Service Worker、回る動画がある。Cloudflare の Worker が静的ファイルの配信、短縮リンク(Workers KV)、遊び方の記録(Analytics Engine)を受け持つ。広告・フォーム・動画は外部のサービスにスマホから直接つながる
システム構成図。青がスマホの中、橙が Cloudflare、灰色が外部のサービス

ふだんの遊びは、最初にアプリのファイルを Cloudflare から受け取ったあと、ほとんどスマホの中だけで完結します。Cloudflare に何かを送るのは、「作品を送る」で短いリンクを作るときと、遊び方の記録(開いた・ブロックを置いた・10秒いた、のような出来事の種類)を匿名で送るときだけです。

箱庭のデータと描き方

箱庭は横64×奥行き64×高さ32のマスで、1マスに「素材」と「形」を詰めています。描くときは、これを16×16×16のかたまり(チャンク)32個に分けて、ブロックを置いたかたまりだけを作り直します。かたまりの中では、空気や透けるブロックと接している面だけを集め、同じブロックが並ぶ面は1枚の四角にまとめて(greedy meshing)、スマホでも軽く動くようにしています。詳しい話は「ブラウザだけで3Dの箱庭を動かすしくみ」に書きました。

ソースコードは TypeScript と Worker をあわせて約8,000行です。主な役割は次のとおりです。

公開の流れ

GitHub に変更を push すると、Cloudflare が自動でビルドします。main なら本番に、それ以外のブランチならブランチごとのプレビューURLに出ます。このサイトの記事や機能も、まずプレビューで見て確かめてから、本番に出しています。

公開の流れ。GitHub に push すると Cloudflare Workers Builds が型チェックとビルドを行い、main なら本番に、それ以外のブランチならプレビューに公開される
公開の流れ。ビルドの前に型チェックが通らないと、公開されません

技術スタック一覧

「役割:使っているもの」の順に、選んだ理由を添えています。

作りながら変えたこと

最初から全部を決めていたわけではありません。公開してからの10日ほどで、使いながら分かったことをもとに、次のように変えてきました。

AI といっしょに作る進め方

katatedake は、エンジニアではないプロダクトマネージャーが、AI といっしょに作っています。役割は、おおまかに次のように分けています。

プレビューで確かめてから公開する流れが、この進め方を支えています。AI が書いたものを、そのまま本番に出さずに済むからです。部品を標準的なものに絞っているのも、人が読んで判断できる大きさに保つためです。

これからの課題

おわりに

ポケット箱庭は、ブラウザの力と、無料で使える配信の仕組みを組み合わせた、小さな構成でできています。作りながら変えたところも含めて、ここに書いておくことで、同じようにひとりで何かを作りたい人の参考になればうれしいです。分かりにくいところや、気になることがあれば、お問い合わせから教えてください。

ポケット箱庭で遊ぶ無料・登録不要・スマホのブラウザで遊べます