本文へスキップ
キャスターアプリケーションズ

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

sql-shacho

はじめに

こんにちは。株式会社キャスターアプリケーションズの清家です。

サイドプロジェクトとして、SQL の使われ方を体験できるノベルゲーム 「SQL社長 〜祖父が遺した古本屋〜」 を公開しました。

下町の古本屋を継いだデータエンジニアが、祖父が遺した売上ノートを 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/

感想やフィードバック、お気軽にどうぞ。

技術的な詳しい話や、開発の裏側については、別記事で書いていく予定です。