見出し画像

【連載 第3章】システムの「不正」を許さない。フロントエンドを疑い、バックエンドで統治する堅牢なゲームロジック

現代の「じぱんぐ島」をWebアプリとして再構築する『ネオ・ジパング:サイバー・コーポレーション』開発記 。

「不正」を許さないバックエンドでのロジック管理

今回は、第3章「運命のサイコロと掟 ~FastAPIで作る堅牢なゲームロジック~」の核心に迫ります 。システムの裏側で、どのように「運命」が計算され、サイバー空間に描画されているのか。その仕組みを解き明かしましょう。


乱数生成の裏側で起きていること

まずは、開発中の画面をご覧ください。

開発中のフロントエンド

ターミナルライクなUIの中央で、サイコロが振られています。結果は「2 + 3 = 5」。すると瞬時に、マップ上の「5」の数字を持つセクター(土地)が、電子回路のように発光しました。

本作では、自分のターンにサイコロを2つ振り、出た目の合計値と同じ数字が割り振られたセクターからリソースが産出されます 。この一瞬のアクションの裏側では、以下のようなリレーが行われています。

  1. 検知: ブラウザ(React)がプレイヤーのボタン入力を検知する 。

  2. 命令: 開発環境(Codespaces等)の裏側で動くサーバー(Python)に「乱数を作れ」とAPI経由で命令を下す 。

  3. 生成: サーバー側が、不正介入が不可能な安全なサイコロの目を生成し、結果を返す 。

  4. 描画: 受け取った結果をもとに、ブラウザがHTML5 Canvasを瞬時に再計算し、該当セクターを発光させる 。

なぜフロントエンドでサイコロを振らないのか?

ここで一つの疑問が浮かぶかもしれません。「わざわざサーバーに通信しなくても、フロントエンドのJavaScriptで乱数を作れば一瞬で終わるのではないか?」と。

確かに、その方が実装は簡単です。しかし、本プロジェクトのアーキテクチャにおいて、それは「絶対に破ってはならない掟」への反逆を意味します。

Webアプリケーション、特にマルチプレイゲーム開発における鉄則があります。それは「クライアント(フロントエンド)を絶対に信用するな」というものです。

バックエンドでロジックを管理する理由

もしフロントエンド側でサイコロの目を出したり、リソースの増減を計算したりするとどうなるか。悪意のあるプレイヤーがブラウザの開発者ツールを開き、変数をいじるだけで「常に最高のリソースを獲得できる」「他社の拠点を無条件で制圧できる」といったチート(データ改ざん)が容易に成立してしまいます 。

メガテック企業による覇権争いを描く本作において、そのような脆弱性はシステムの死を意味します。プレイヤーによる不正を完全に防ぐため、リソースの付与、インフラ構築の判定、そしてサイバー戦の勝敗に至るまで、重要ロジックはすべてAPI(バックエンド)側で一元管理する「権威的判定」を採用しているのです 。


いいなと思ったら応援しよう!

伊藤正章|サバイバルDXクリエイター:荒野のPip-Boy設計局 忍の知恵と技術への「お布施(チップ)」を賜りたく存じます。頂いた財は、持続可能な社会、子供たち、自然、そしてあなたへの還元(有益な発信・開発)に全額投資いたします。画面下のボタンより、影の立役者たる拙者への御調達をお願い申す。一期一会の御縁に、深き感謝を。