なぜ可視化を街にしたのか、どのような街なのか
Platform City チームの川村です。
Platform City に関する連載記事の第4弾となる今回は、「なぜ可視化の形を“街”にしたのか」「どのような街が広がるのか」についてご紹介します。
街はPlatformの観測装置
見せたいのは行動のプロセス
Platform City の街では、デプロイが失敗すると建物から煙が上がり、AIエージェントが修復すると灯りが戻ります。失敗も修復の過程も、テナント名付きでありのままに表示されます。成功した建物だけを綺麗に並べても、裏でエージェントが何をしているのかが伝わらないからです。
もし煙が上がったまま放置されていれば、プラットフォーム側が返しているエラーやシグナルが不十分だということ。すぐに灯りが戻るなら、エージェントが正常に機能している証拠です。
街は Kubernetes を直接見て描く
一般的な構成であれば「デプロイを受け付ける control-plane から街の描画システムにイベントを送る」と考えがちですが、その素直な設計は採用しませんでした。control-plane はデプロイ完了を検知した時点で処理が終わるため、例えば3分後にアプリが OOM(メモリ不足)等でクラッシュしても何も検知できないからです。
そのため、街の描画側が自律的に Pod や Deployment、HTTPRoute、Event、ResourceQuota、さらには公開 URL への外形リクエスト結果などを直接観測し、それらを建物・灯り・煙といった演出へリアルタイムに翻訳する仕組みにしています。
賑わいを表現する
街全体の「賑わい」をどう表現するかは、設計時にかなり悩んだ点です。
100人規模の参加者が自由な言語やフレームワークでアプリを実装するため、HTTP リクエスト数を集計するための特定の計装(メトリクス収集)を参加者に要求することはできません。また、CPU 使用率を見ても、軽量な静的 HTML ページが大人気になった場合には値が上がらず、実態を反映できません。
そこで、無理に代替指標を作るのではなく、賑わいの指標をシンプルに「稼働中の建物の数」と「いいねの総数」という2つの確実な要素から算出することにしました。
街にある区画や施設について
1つのアプリが1棟の建物になる
建物の単位は「テナント × アプリ × 区画」です。1つのアプリにつき建てられるのは1区画のみで、複数の区画に建てたい場合はアプリを複数作成します(1テナントあたりの上限は現在3アプリまで)。街全体としては最大500棟まで収容・描画できる設計です。
街のレイアウトは、半径16ユニットの円形の中央広場を8つの区画スロットが囲む構造になっています。各区画の間は八角形の環状道路と並木で区切られ、区画ごとに異なる催しや建物が立ち並びます。
区画とテーマ
区画の定義は設定ファイルに1エントリずつ記述されており、イベント当日であっても設定を1行追加するだけで新しい区画を拡張できます。
| 区画 | テーマ | アプリ要件 | ランドマーク | 収容数 |
|---|---|---|---|---|
| プラットフォーム広場 | Track A・B・C をライブ視聴できる中央広場 | 運営公式ステージ | — | 8 |
| 自己紹介区画 | 全員が最初にデプロイを体験するチュートリアル(目安15分) | GET / で自己紹介の静的 HTML を返すこと | 案内塔 | 144 |
| 推し登壇者トリビュート区画 | 推しの登壇者やセッションへのリスペクトを自由なアイデアで表現する | GET / で配布の登壇者・セッションデータを活用したコンテンツを返すこと | 野外ステージ | 36 |
| 自由区画 | テーマは自由。作りたいものを自由に | GET / で 200 OK を返すこと | 万国旗 | 36 |
| API・Cloud Native実験区画 | 実用的な API を公開し、他の参加者のアプリと連携・実験する | OpenAPI 仕様を公開していること | 電波塔 | 36 |
| ゲーム区画 | 1〜3分程度でサクッと遊べるミニゲーム | GET / でゲームと参加者ランキング機能を提供すること | 観覧車 | 36 |
| 参加者交流区画 | 参加者同士のコミュニケーションを活性化する | GET / で参加者同士がやり取りできる機能を備えること | 大テント | 36 |
| カンファレンス体験区画 | 現地体験を豊かにするアプリ(タイムテーブル、会場マップなど) | GET / でカンファレンスに関する有益な情報を提供すること | ステージと大スクリーン | 36 |
| グルメ情報区画 | 会場周辺のおすすめランチ・ディナー情報 | GET / で食や周辺スポットの情報を返すこと | 屋台通り | 36 |
自己紹介区画だけ収容数が 144 と突出して多いのは、全参加者が最初にここに建てるためです。1区画のグリッド(セル)内に小さな家を 2×2 で配置し、密度を通常の4倍に高めています。
どの区画に建物が配置されるかは、create_app コマンドで指定するテーマによって決まります。本稿の執筆時点で選択可能なテーマは self-intro、game、oshi、food の4種類ですが、当日までに順次追加予定です。区画構成は変更される可能性があるため、最新情報は create_app の案内および当日公開される City Guide をご確認ください。
見た目はプラットフォームが自動生成する
参加者が決めるのはアプリの実装と API のみで、建物の外見(3Dモデル)は選べません。プラットフォーム側が以下のルールに基づいて自動生成します。
建物のモデル = 区画ごとのモデルセット[ hash(テナント名 + ":" + アプリ名) % 個数 ]
屋根・庇・旗の色 = hash(テナント名) から決まる色相
階数 = いいね数で決まる段階
あえて乱数は一切使用していません。画面をリロードするたびに外見が変わってしまうと、「あれが私のビルです」と自分の建物を特定できなくなってしまうからです。
100人規模の参加者が集まると色相だけでは重複してしまうため、色相・屋根の形状・旗のシンボルの組み合わせで識別できるように工夫しています。また、同一テナントが建てた建物であれば、区画が異なっていても同じ屋根の色で統一されます。
なお、用意されているモデルセットは区画ごとに異なり、ゲーム区画は遊び心のあるポップな形状、API 区画は近代的な高層ビル、グルメ区画や交流区画は市場を想起させる低層建築が立ち並びます。
いいねで建物が育つ
獲得した「いいね」の数に応じて、建物の階数が3段階で成長します。
- 0〜9 票: 小さな建物からスタート
- 10〜49 票: 中規模の建物に成長
- 50 票以上: 街のシンボルとなる大規模なタワーへ進化
参加者全員が5票ずつ投じたとしても総票数は500票程度です。そのため、50票に達するのは上位数件のみで、街に数本だけそびえ立つ象徴的な塔になる想定です(※状況に応じて閾値は調整される場合があります)。
街のサイン(状態の見分け方)
建物のビジュアルやエフェクトを見るだけで、アプリの健全性を一目で把握できるようになっています。
| 状態 | 見え方 |
|---|---|
| 予定地 | 更地 + 工事フェンス + 名前札 |
| 建設中 | 足場 + 黄色のパルスリング |
| 稼働中 | 窓に灯り + 緑のマーカー |
| 不安定 | 橙のマーカー + 煙 |
| 障害 | 黒煙 + 赤のマーカーが速く明滅 |
| 修復中 | 足場 + 橙の回転灯 + 入口に作業員が3体集まる |
| 停止 | 灰色のマーカー + 消灯 |
「不安定」の状態は、Pod の一部がダウンしている場合だけでなく、公開 URL への GET /(外形ヘルスチェック)が連続して失敗している場合にも発生します。その際は、建物カードの詳細に ProbeHttp404 といった具体的なエラー理由が表示されます。
なお、演出としての「煙」は、仮に障害から復旧していなくても120秒経過すると自然に細くなるように設計されています。街全体が常に煙で覆われて荒廃した景色に見えてしまうのを防ぐためで、実際の異常状態はマーカーの色によって継続して示されます。
いいねと応援を分けた
カジュアルに誰でも押せる「応援」と、厳密な評価指標としての「いいね」を明確に分離しました。1つの投票機能で両方の役割を持たせようとすると破綻するためです。
| いいね | 応援 | |
|---|---|---|
| 押せる回数 | 1建物につき1票(取り消し可) | 好きなだけ連打可能 |
| 効果 | 建物が育つ(階数アップ) | 中央広場から花火が打ち上がる |
| 集計 | 評価対象 | 集計対象外 |
| 自分の建物 | 押せない(自己投票不可) | 押せる |
| 投票締切後 | 押せない | 押せる |
なお、不正な投票アクセスはリアルタイムに弾くのではなく、ログとして記録しておき集計側で判別・処理します。また、匿名性を許容している設計上、自己投票の完全な排除は難しいため、「いいね」の獲得数だけを単独の表彰基準とすることはありません。
自分の建物を見つける
街全体に最大500棟もの建物が立ち並ぶなかで、自分のビルを迷わず見つけられるよう、以下の5つの探索手段を用意しました。
- ディープリンク: URLから直接自分の建物へフォーカス
- 「自分の建物へ」ボタン: ワンクリックで自ビルへ視点を移動
- テナント名・住所検索: テキスト入力による高速な絞り込み
- テナントごとの屋根色: 同一テナントの建物を視覚的に識別
- 住所システム: 区画や番地に基づく規則的な位置指定
さらに、画面右下のミニマップには「煙が出ている(異常が発生している)建物」と「自分の建物」だけがハイライト表示されます。
「取れないデータは無理に出さない」「システムの失敗を隠さない」「同じ入力からは決定論的に同じ街が再現される」——Platform City は、そうした確固たる思想に基づいた“観測装置”として設計しました。とはいえ、堅苦しいだけでなく、ゲーム区画では観覧車が回り、応援が送られれば中央広場から花火が打ち上がります。参加者の皆さんが心から楽しめる体験をお届けする予定です。
次回は、100人が同時に使う前提で Kubernetes まわりをどう組んだか、アーキテクチャの裏側をご紹介します。
Platform City の続報や当日の様子は、公式 X でも発信していきます。ぜひフォローして最新情報をチェックしてください!
https://x.com/cnia_pfem(ハッシュタグ: #PEK2026)
Platform Engineering Kaigi 2026
- 開催日:2026年9月26日(土)
- 場所:中野セントラルパークカンファレンス
- 申し込み:FindyConference (一般申し込み、オンラインともにリンク先からの申し込みが必要となります)
- 問い合わせ:問い合わせフォーム