【ITニュース解説】Building a DOOM-like multiplayer shooter in pure SQL
2025年09月10日に「Reddit /r/programming」が公開したITニュース「Building a DOOM-like multiplayer shooter in pure SQL」について初心者にもわかりやすく解説しています。
ITニュース概要
データベース操作言語であるSQLのみを使い、マルチプレイヤーシューティングゲームを開発する試みが公開された。通常ゲーム開発には使われないSQLで、プレイヤーの位置情報などを管理しゲームロジックを実装するという、常識を覆すユニークな挑戦だ。
ITニュース解説
データベースを操作するための言語であるSQLを使って、人気FPS(ファーストパーソン・シューティングゲーム)「DOOM」のようなマルチプレイヤー対戦ゲームを開発するという、非常にユニークな技術的挑戦が注目を集めている。このプロジェクトは、システム開発における常識的な役割分担を覆し、データベースの持つ潜在能力を新たな形で示した事例として興味深いものだ。
通常、SQLとデータベースシステムは、Webサービスや業務システムにおいて、ユーザー情報、商品データ、取引履歴といった構造化されたデータを効率的に保存、更新、検索するために利用される。リアルタイム性が要求されるゲームの物理演算や、プレイヤー間の複雑な相互作用を処理する頭脳(ゲームロジック)としてデータベースが使われることはまずない。一般的なオンラインゲームの構造では、ゲームロジックはC++やC#といったプログラミング言語で書かれた専用のゲームサーバー上で実行される。そして、データベースはプレイヤーのスコアやセーブデータ、所持アイテムといった、永続的に保存すべき情報の記録庫として補助的に使われるのが通例である。つまり、ゲームサーバーが「リアルタイム処理」、データベースが「データの永続化」という明確な役割分担を持っている。
しかし、このプロジェクトでは、その常識を根底から覆している。ゲームの根幹をなす、プレイヤーの移動、視点の回転、弾丸の発射、壁や他プレイヤーとの衝突判定といった、ゲームのルールそのものがすべて「純粋なSQL」で記述され、PostgreSQLというデータベース管理システムの内部で実行される。これを実現しているのが、データベースが持つ「ストアドプロシージャ」や「ユーザー定義関数」と呼ばれる機能だ。これは、一連のSQL文や手続きを一つのプログラムのようにまとめてデータベース内に保存し、特定の命令で呼び出して実行できる仕組みである。開発者はこの機能を駆使し、データベースを単なるデータの入れ物としてではなく、ゲームロジックを遂行する一種のアプリケーションサーバーとして機能させたのだ。
このゲームの具体的な動作原理は次のような流れになっている。まず、プレイヤーの位置座標、向いている角度、体力、発射された弾丸の位置と進行方向など、ゲーム世界の状態を構成するすべての情報が、データベース内のテーブルにデータとして保存されている。プレイヤーがキーボードの「W」キーを押して前進しようとすると、その入力情報がWebサーバーを経由してデータベースに送信される。データベース側では、この入力をきっかけに、あらかじめ用意された「プレイヤーを前進させる」ためのSQL関数が実行される。この関数は、プレイヤーの現在の向きと位置をテーブルから読み出し、移動後の新しい座標を計算してテーブルの値を更新する。弾丸の発射や衝突判定も同様に、すべてSQL関数による計算とテーブルのデータ更新によって処理される。一方で、プレイヤーが見ているゲーム画面(フロントエンド)は、JavaScriptのライブラリであるp5.jsで作られており、非常に短い間隔で定期的にデータベースに問い合わせを行う。「現在の全プレイヤーと弾丸の位置情報をください」というリクエストを送り、データベースから返却された最新のデータに基づいて画面を描画し直す。この一連の処理、すなわち「プレイヤーの入力→データベースでの計算と状態更新→フロントエンドでの描画」が高速で繰り返されることで、あたかもリアルタイムでゲームが動いているかのように見えるのである。
もちろん、この手法は実用的なゲーム開発のアプローチとは言えない。データベースは本来、トランザクション処理やデータの一貫性を保証することに最適化されており、ミリ秒単位での応答が求められる複雑な物理演算を大量に処理するには不向きである。そのため、パフォーマンスの観点では専用のゲームサーバーに大きく劣る。しかし、このプロジェクトの価値は、その実用性にあるのではない。これは、「もし、データベースだけでゲームを作ったらどうなるか?」という純粋な技術的探求心から生まれた実験であり、エンジニアリングにおける「ハッカー精神」の表れと言える。
システムエンジニアを目指す初心者にとって、この事例はいくつかの重要な示唆を与えてくれる。一つは、テクノロジーやツールが持つ本来の用途や制約に縛られず、その可能性を最大限に引き出そうとする創造的な思考の重要性だ。二つ目は、データベースが単にデータを格納するだけの受動的なシステムではなく、ストアドプロシージャのような機能を使えば、複雑なビジネスロジックや計算処理をも実行できる能動的で強力なプラットフォームであるという認識を深めることだ。そして三つ目は、システム全体のアーキテクチャを考える上で、処理の役割分担には多様な選択肢が存在するという事実である。このプロジェクトは、バックエンドのロジックをすべてデータベース層に集約するという極端な設計だが、こうした型破りな事例を知ることは、柔軟なシステム設計能力を養う上で貴重な学びとなる。総じて、このSQLによるシューティングゲーム開発は、技術の限界に挑戦し、固定観念を打ち破ることの面白さと価値を体現した、刺激的な事例である。