SQL Noir – 犯罪解決で学ぶSQL
(sqlnoir.com)- SQLNoirは、事件ファイルを開き、データベースを照会して手がかりを探すストーリー主導のSQL学習ゲーム
- 各事件はブリーフィング、データベーススキーマ、組み込みSQLエディタを提供し、クエリで容疑者と手がかりを確認できる
- フィルタリング、JOIN、集計、サブクエリのような実際のSQLパターンを、事件解決の過程で繰り返し練習できる
- 別途インストールや環境設定なしで始められ、XPと解決した事件数で進捗を確認できる
- 初級事件は基礎を扱い、上級事件は階層的なJOINと厳しい条件を求めるため、開発者、データアナリスト、学生、講師に適している
事件を解きながら身につけるSQL
- SQLNoirはユーザーをストーリー中心の捜査に参加させ、事件のブリーフィングとデータベーススキーマを併せて提供する
- ユーザーは組み込みエディタでSQLクエリを実行し、テーブルを関連付け、容疑者を絞り込み、アリバイを検証する
- 事件の流れの中で練習するSQLパターンは次のとおり
- フィルタリング
- JOIN
- 集計
- サブクエリ
- 別途インストールや設定なしで、事件ファイルを開いてすぐにデータを調査できる
進捗状況と学習対象
- XPと解決した事件数が進捗状況を示す
- 初級事件はSQLの基礎を身につけるよう構成され、上級事件は階層的なJOINとより厳しい条件を求める
- 次のユーザーに適している
- SQLの基礎とJOINを手を動かして練習したい開発者
- 現実的なクエリシナリオで面接に備えるデータアナリスト
- 無味乾燥な教材より、ストーリーと即時フィードバックでより速く学べる学生
- 学習者に環境設定を求めないSQL練習課題を探している講師
1件のコメント
Hacker Newsのコメント
面白くて気に入った。
いくつか付け加えると、最初の事件のsubmit入力欄が、名前を入れるべきなのか容疑者IDを入れるべきなのかが明確ではない。
出力結果に「ノートにコピー」ボタンがあるとよいし、どんな関数が使えるのか、どのSQL方言なのかについてのドキュメントもあるとよい。
小さなプロジェクトを実際に解きながら学ぶほうがずっと簡単なので、かなり価値のあるやり方に見える。
ユーザーの立場では探偵ゲームなので、当然「容疑者」の名前を求められているのだと推測した。
本当に面白い。
小さな改善点として、SQLiteデータベースを直接ダウンロードして好みのアプリでクエリし、サイトはブリーフィング・ノート・提出のためだけに使えるようにしてほしい。
それと、「SQL学習」用というには、もう少しガイドやサンプルクエリが必要だと思う。
今の状態だと、SQLを知らない人は何をすればいいのか完全に見失いやすく、すばらしいツールではあるが、学習ツールとしてはまだ少し合っていない。
選択肢があまり多くない分野へのよい追加だ。
思い浮かぶのはSQL Island(https://sql-island.informatik.uni-kl.de)とSQL Murder Mystery(https://mystery.knightlab.com)で、SQL Noirのやり方は後者に近い非指示型の独立した冒険だ。
私は、任意のベースデータベースに練習問題を追加して指示型の独立冒険を作れるSQLゲームエンジンSQLabを作っている: https://github.com/laowantong/sqlab
データベースダンプをダウンロードして、現在はMySQL、SQLite、Postgresで任意の管理インターフェースからプレイできる。
同じページにはフランスの学生向けに設計した長編の警察捜査へのリンクもあり、教師や研究者向けにはSQLabの原理をここで説明している: https://arxiv.org/abs/2410.16120
ここに挙がっている他のプロジェクトもよい。
私も、学生がブラウザ上で自分だけのSQL脱出ゲームを作れるSQL Game ConsoleとSQL Game Editorプロジェクトを付け加える: https://eskuel.de
教室で試してみて楽しかったし、現在はドイツ語のみ対応している。
サンプルゲーム: https://eskuel.de/zoo/
子どものころに見たMathNetを思い出した。
Dragnet風の教育用警察捜査もので、二人の捜査官がホルスターのように電卓を身につけていた。
https://en.m.wikipedia.org/wiki/Mathnet
https://youtu.be/vNhBq3kjq_Q?t=2011
気に入ったし、スタイルが独特で格好いい。
SQLを学び、練習し、思い出すための楽しい方法の始まりのように見える。
いくつか挙げるなら、タブなしの単一ワークスペースだとよい。ずっとタブを行き来することになる。
以前のSQLクエリと結果を保存できるとよくて、今は結果をノートにコピーしていた。
もっと複雑になるほど、この機能は重要になりそうだ。
たった今並列表示を実装して、タブ2つを同時に見られるようにしたので、役立てばうれしい。
他のユーザーが提案したように、ノートにクエリを保存したり、エディタ内でコメントアウトしておいたりもできる。
あとは帽子があって、「事実だけを話してください、奥さん」を何回か言えば完成だ。
アイデアはいいが、UIの没入感はほとんどない。
没入感を高めるには、自動補完、広い画面でスキーマとクエリを一緒に見る機能、テーブル名やカラム名をワンクリックで簡単にコピーできる機能が必要だ。
特にテーブル名は選択すらできない。
すでに実行したクエリを上書きするだけでなく、実行したクエリの上や下に新しいクエリを追加し続けられるとよい。
没入感を損ない、自分で思い出すべき部分も減ってしまうからだ。
New Game Plusで有効になるならよいかもしれない。
たった今、別々のタブ2つを同時に開けるSide by Side表示と、テーブル名をコピーするボタンを実装した。
command-/でコードブロックをコメントアウトできると本当に便利そうだ。本当にいいアイデアで、事件を解くのが楽しかった。
ジュニアプログラマーには漫画版が役立つかもしれない。
SQLエディタがときどき妙な動きをして、正しく書けなくなることがある。
エディタでコメントを追加しようとすると妙な動きをする。
再現方法は、複数行を書いたあと各行の先頭に
--を付けて1行ずつコメントアウトすることだ。たとえば
select i.*, s.*、from interviews i、join suspects s、on s.id = i.suspect_idと書いたあと、from interviews iの前にも--を付けた瞬間、その行が前の行へ移動して構文ハイライトが壊れる。たった今このバグを修正したと思う。
大学時代、講師がSQL練習用にこれに似た犯罪解決ミニゲームをリンクしてくれたのを覚えている。
かなり夢中になって、最も効率的な1行解法を探そうとするところまで行った。
作ってくれてありがとう。SQLを学びたい人たちにこれを勧めることになりそうだ。
かなり面白くて、無料のミステリーを2つ解いたが、解決する手応えがあった。
小さな不満として、SQLエディタがコメントをサポートしてくれるとよい。
新しいクエリを実行する前に古いクエリをコメントアウトして履歴を残しておければ、特に同じクエリを再実行する必要があるときに便利そうだ。
--を付ければクエリ行をコメントアウトできるはずだ。できないならバグなので調べてみる。
以前のクエリや見つけたことを保存するにはNotesタブも使える。