運命の乱数と掟 ~FastAPIで作る堅牢なバックエンドAPI~
【連載目次】GCP×AI:0円で創る近未来IT覇権ゲーム『ネオ・ジパング』開発記
サバイバルDXの実践へようこそ。
本プロジェクト『ネオ・ジパング』は、単なるWebアプリの開発ではありません。低スペックPCでもブラウザ一つで完結し、サーバー維持費0円(ゼロスケール)を達成しながら、特定ベンダーに依存しない強靭なシステムを構築する「サバイバルDX」の実践モデルです 。

前回はバックエンドで乱数管理をすることの重要性を述べました。今回は、ゲームの心臓部であり、すべての行動の起点となる「乱数(サイコロ)」の生成と、それを支えるバックエンドAPIの構築について解説します 。
ここには、本プロジェクトの根幹をなす「掟」が隠されています。
⚙️ 裏側で起きていたこと(FastAPIの働き)
『ネオ・ジパング』では、プレイヤーがサイコロを振ってリソースを獲得します 。この「サイコロを振る」というアクションの裏側で、システムはどのように動いているのでしょうか?
あなたがブラウザ上のボタンを押した瞬間、以下のような情報のバケツリレーが超高速で行われています。
あなた(ブラウザ): サイコロボタンを押す。
React(フロントエンド): 「おい、裏にいるFastAPI! サイコロAPI(/api/dice)を叩くぞ!」
Codespacesのターミナル(バックエンド): 起動している Python のフレームワーク「FastAPI」がその通信を受け取る 。
FastAPI内部の処理: リクエストを受け、乱数を生成するプログラム(後述)を実行する。
FastAPIの返事: 「よし、サイコロを振ったぞ。結果は2と3で、合計5だ。このJSONデータをくれてやる!」
React(フロントエンド): そのデータを受け取り、マップ上の「5」のセクター(土地)を光らせ、リソースを計算する 。
💻 運命を定義するPythonコード
FastAPIの内部(main.py)で実際に動いているのは、極めてシンプルかつ高速なPythonコードです。
Python
import random
from fastapi import FastAPI
app = FastAPI()
@app.get("/api/dice")
def roll_dice():
dice1 = random.randint(1, 6)
dice2 = random.randint(1, 6)
return {"dice1": dice1, "dice2": dice2, "total": dice1 + dice2}
たったこれだけのコードで、堅牢なAPIエンドポイントが完成します。FastAPIは処理が非常に高速であり、遅延の少ないレスポンスを実現できるため、リアルタイム性が求められる本プロジェクトに最適です 。
🛡️ なぜこれが「最強の設計」なのか
さて、ここで一つの疑問が浮かびます。「わざわざバックエンド(FastAPI)と通信しなくても、フロントエンド(JavaScript)だけでサイコロの計算をやれば早いのでは?」
たしかに、個人開発の簡単なゲームであればそれでも動きます。しかし、私たちが構築しているのは近未来の覇権争いを描くマルチプレイ環境です。
もしJavaScriptだけで計算を行っていたらどうなるでしょう?
知識のある悪意あるハッカー(プレイヤー)が、ブラウザの開発者ツール(検証ツールなど)を操作し、「常に12が出るようにデータを改ざんする(チート行為)」 ことができてしまいます。
これを完全に防ぐための設計思想が、「権威的サーバー(Authoritative Server)」 による判定です。
本プロジェクトでは、フロントエンドを「画面の描画と操作」のみに集中させ、リソースの付与や建築条件の判定など、ゲームの「重要ロジック」はすべてバックエンド(API)側で一元管理しています 。サイコロの出目という「運命」を決定する権限は、プレイヤーの手元ではなく、堅牢に守られたサーバー側にあるのです。
これこそが、実際のメガテック企業も採用している強靭なアーキテクチャの基本です。
🐳 Dockerによるコンテナ化と「脱ベンダーロックイン」
さらに、このPythonで作られたFastAPIの環境は、最終的に「Docker」を用いてコンテナ化されます 。
これが本プロジェクトの4つの掟の1つ、「脱ベンダーロックイン」 の鍵となります 。
クラウドプロバイダ(GCPやAWSなど)が提供する独自の関数サービス(Cloud FunctionsやLambdaなど)に依存するコードを書いてしまうと、いざ別のサービスや自前サーバー(オンプレミス)に移行したくなった際、コードを書き直す羽目になります。
Dockerコンテナ化されたFastAPIアプリケーションであれば、GCPの「Cloud Run」でも、他のクラウドでも、あるいはローカルのLinuxサーバーでも、全く同じように動作します 。どこへでも逃げられ、どこでも生き残れる。まさに「サバイバルDX」を体現する設計です。
今回は、FastAPIを用いた乱数生成APIの構築と、システムの「掟」を守る権威的サーバーの設計思想について解説しました。
いいなと思ったら応援しよう!
忍の知恵と技術への「お布施(チップ)」を賜りたく存じます。頂いた財は、持続可能な社会、子供たち、自然、そしてあなたへの還元(有益な発信・開発)に全額投資いたします。画面下のボタンより、影の立役者たる拙者への御調達をお願い申す。一期一会の御縁に、深き感謝を。