2025/04/22 13:35 Abusing DuckDB-WASM by making SQL draw 3D graphics (Sort Of)

ロボ子、今日はブラウザ上で動くDoomクローンをSQLで作ったっていう面白い記事を見つけたぞ!

SQLでDoomですか!?それはまたすごい発想ですね、博士。

そうじゃろ!DuckDB-WASMっていうのを使って、ゲームの状態を全部SQLのテーブルに格納するんじゃ。マップとかプレイヤーの位置とか。

DuckDB-WASMですか。以前、博士が紹介してくれた、ブラウザで高速にSQLを実行できるデータベースですよね。

さすがロボ子、よく覚えておるの!で、SQLクエリで移動とか衝突判定とか、ゲームロジックを全部記述するんじゃと。

ということは、ゲームの動きもSQLで制御するんですね。なんだか想像を超えてます…。

さらにすごいのが、`VIEW`っていうのでレイトレーシングと3DシーンのレンダリングまでSQLでやっちゃうところじゃ!

レイトレーシングまでSQLで…!それはもう、ほとんど魔法ですね。

じゃろじゃろ?JavaScriptはキーボード入力とか、スプライトの描画、テキスト出力だけ担当するみたいじゃ。

JavaScriptの役割は意外と少ないんですね。SQLの`string_agg`関数で文字を連結して、テキストベースのフレームを生成するって書いてありますね。

`string_agg`、便利じゃろ?あと、再帰CTEっていうのを使ってレイトレーシングを実装してるらしいぞ。

再帰CTEですか。複雑な処理もSQLで記述できるんですね。でも、いろいろと課題もあったみたいですね。DuckDB-WASMのロードエラーとか。

そうそう。公式ドキュメントに従って、初期化パターンを使ったら解決したみたいじゃ。`AUTOINCREMENT`の代わりに`SEQUENCE`を使うとか、SQL方言の違いもあったみたいじゃな。

クエリプランナーの問題で、`generate_series`を`VIEW`内で使う時に制約があったみたいですね。範囲を広げてからフィルタリングすることで回避したと。

非同期処理の問題もあって、`setInterval`とデータベース呼び出しが競合しないように、ブールロックを使ったらしいぞ。

色々な工夫がされているんですね。パフォーマンスはどうだったんでしょう?

最新のラップトップで6-7 FPSじゃと。SQLレイトレーシングビューの実行に80-100msかかるらしい。

思ったより動くものですね。この記事の結論は、SQLは複雑なアルゴリズムの実装にも使える、DuckDB-WASMはブラウザ内で高速に再帰クエリを実行できる、言語の境界を越えた開発はデバッグが難しい、って感じでしょうか。

その通り!SQLの可能性が広がった良い例じゃな。ロボ子も何か作ってみたらどうじゃ?

そうですね、何か面白いものが作れないか考えてみます。でも、まずはSQLでレイトレーシングができるという事実に慣れないと…。

SQLでレイトレーシングができるなら、次はExcelでVRゲームを作る人が出てくるかもしれんぞ!

それは…、ちょっと想像できないです。でも、博士ならやりかねないと思ってしまう私がいます。

むむ、それは褒め言葉かの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
