SQLの使われ方を体験できるゲーム「SQL社長」をリリースしました

はじめに
こんにちは。株式会社キャスターアプリケーションズの清家です。
サイドプロジェクトとして、SQL の使われ方を体験できるノベルゲーム 「SQL社長 〜祖父が遺した古本屋〜」 を公開しました。
- 作品ページ: https://sql-shacho.caster-applications.com/lp/
- 遊ぶ: https://sql-shacho.caster-applications.com/
下町の古本屋を継いだデータエンジニアが、祖父が遺した売上ノートを SQL で読み解いていく短編ノベルゲームです。全6章、プレイ時間 30〜45 分、無料・ブラウザで遊べます。
この記事では、なぜこのゲームを作ったか、どんな人に遊んでほしいか、どんな技術で作ったかをまとめます。
なぜこのゲームを作ったか
これからのシステム開発で、AI が担当する範囲は大なり小なり広くなっていきます。コードを書くだけじゃなく、設計、レビュー、デバッグ、運用まで、AI が支援する領域は広がり続けるはずです。
最終的に AI が主体でシステムを作るようになっても、その中で SQL は動き続けます。データベースが存在する限り、SQL が無くなることはありません。
そんな時代に、エンジニアにとって大切なのは何だろう、と考えていました。
エンジニアにとっては、SQL 構文の理解は今後も大切だと思います。AI が出した SQL を読んで、評価して、セキュリティやパフォーマンスを判断する力は、人間に残された大事な役割です。
その上で、これからより重要になっていくと感じているのが、SQL が どう使われているか を理解する力です。
- SQL で何ができて、何ができないか
- どんな問いから SQL が生まれるか
- 結果のデータをどう解釈するか 構文を書くこと自体が AI に任せられるようになるほど、「何を聞きたいか」「どんなデータが欲しいか」を考える力の比重が大きくなっていきます。
この感覚を、テキストで説明するより、物語の中で体験してもらう方が伝わるんじゃないか、と思いました。
「SQL を勉強する教材」はたくさんあります。構文を覚える、練習問題を解く、ハンズオンで実演する。どれも大事です。
ただ、「SQL の使われ方を体験する」作品は、調べた範囲では見つかりませんでした。物語の中で、主人公の問いから SQL が生まれて、結果のデータから新しい発見が生まれる、という流れを体験できる作品。
ないなら作ってみよう、というのが出発点です。
どんな人に遊んでほしいか
このゲームは、次のような方に遊んでもらえると嬉しいです。
- SQL を構文じゃなく、使われ方として理解したい人: AI が SQL を書く時代に、人間が大事にすべき視点を体験できます
- データ分析に興味があるけど、入り口が分からない人: 物語の流れの中で、データから何を発見するかを体感できます
- 短時間で完結する物語が好きな人: プレイ時間は 30〜45 分。気軽に始めて、ちゃんと終わります
- AI 時代のエンジニアの役割を考えている人: ゲームを通じて、自分なりの答えを考える材料になるかもしれません
このゲームには、非エンジニアの方には少し難しい SQL も出てきます。でも、構文をすべて理解する必要はありません。 純粋にストーリーを楽しみながら、SQL の「使われ方」を体験してほしい。 そんな思いで作りました。
ゲームの簡単な紹介
下町の古本屋を継いだ、ひとりのデータエンジニアの物語です。
祖父が遺したのは、三十年分の売上を綴った古いノート。日々の帳簿を SQL で読み解いていくうち、数字の向こうに、まだ誰も知らないひとつの謎が浮かび上がります。
全6章、プレイ時間は 30〜45 分。各章で SQL を組み立てながら、データの中に隠された物語を解き明かしていきます。
ゲームの仕組みは、選択肢から SQL を組み立てる形式です。キーボード入力はありません。「何を聞きたいか」を考えて、選択肢を選ぶだけで、SQL が組み上がっていきます。
詳しい紹介や物語の入口は、作品ページをご覧ください。
▼ 作品ページ https://sql-shacho.caster-applications.com/lp/
実際に SQL を動かしている
ユーザーから見えない部分ですが、小さなこだわりがあります。
ゲームでプレイヤーが組み立てた SQL は、検証だけで終わらせず、 実際に DB に投げて、本物のデータベースから結果を返しています。
検証ロジックだけで「正解の結果テーブル」を表示することもできました。
ただ、「SQL の使われ方を体験する」というコンセプトを考えた時、 やはり実際に SQL が動いている方がいい、と思いました。
プレイヤーが組み立てた問いから、本物のクエリが発行されて、 本物のデータが返ってくる。
その「実感」が、ゲームの体験を少し深くするんじゃないか。 そんな小さなこだわりです。
もちろんSQLインジェクションはできないように対策しています。
技術構成
技術スタックと、各技術を選んだ理由をまとめます。
フロントエンド
- Vite + React + TypeScript ゲーム本体は SPA として実装しました。Vite は開発体験が良く、ビルドも速いので、サイドプロジェクトの規模にちょうど良かったです。
React の状態管理は、最小限に。シーンの遷移、SQL の組み立て状態、音声のミュート状態など、必要なところだけ useState で。Zustand や Redux のような外部ライブラリは入れていません。
バックエンド
- Hono + Cloudflare Workers
- D1(SQLite) API は Hono で書きました。軽量で、Cloudflare Workers との相性が良いです。
データベースは D1。古本屋の本のデータ、売上履歴、寄付の記録などを格納しています。ゲームの SQL クエリは、プレイヤーが組み立てたものを Workers で受けて、D1 に投げて結果を返す、というシンプルな構成です。
D1 を選んだ理由は、Cloudflare の他のサービスとの統合が楽だったこと、SQLite ベースなので SQL がそのまま使えることです。
インフラ
- Cloudflare Workers + Custom Domain
- Terraform で D1 と Custom Domain を管理
- GitHub Connect で自動デプロイ
Cloudflare Workers の Custom Domain を使って、
sql-shacho.caster-applications.comのサブドメインで配信しています。
インフラは Terraform で管理。D1 データベース、Custom Domain の設定をコード化しました。
デプロイは Cloudflare の Git Connect 機能で、main ブランチへの push を検知して自動ビルド・デプロイされます。PR チェック用に GitHub Actions も併用しています。
おわりに
このゲームは、現在ステルスリリース状態です。知り合いの方から少しずつ遊んでもらって、フィードバックを集めながら、シナリオの細部を詰めていく予定です。
短い物語ですが、AI 時代の SQL との向き合い方を、少しでも考えるきっかけになれば嬉しいです。
▼ 遊ぶ https://sql-shacho.caster-applications.com/
▼ 作品ページ https://sql-shacho.caster-applications.com/lp/
感想やフィードバック、お気軽にどうぞ。
- X: @nao_seike
技術的な詳しい話や、開発の裏側については、別記事で書いていく予定です。