技術

paizaのゲーム『エンジニア騎士とクエリの魔女』のSQLの問題を解いてみた

paizaからSQLに対応したプログラミングゲーム『エンジニア騎士とクエリの魔女』をがリリースされたのでやってみました。

paizaはこれまでに、いくつかプログラミングゲームをリリースしています。これまでのゲームはPythonやPHPなどのいわゆる開発言語を書いて進めていくものでした。今回、SQLにはじめて対応したということです。

そのSQLの問題を全問解いたので、どんなゲームだったかの紹介とその感想、一部回答例などを紹介します。

  • どんなゲームか気になるけど、自分でやるほどではない
  • SQLでどういう問題が出題されているのか気になる
  • 実際にゲームしたけど、解けない問題があって詰まっている

という方の参考になる内容になっています。

ゲームの紹介

paizaが作ったプログラミング×RPGのゲーム

paizaはコーディング問題と転職支援を提供しているサービスです。そのpaizaがコーディング問題とRPGゲームを掛け合わせたサービスが、『エンジニア騎士とクエリの魔女』になります。

なので、ゲームをプレイするにはpaizaのログインアカウントが必要になります。

アカウント作成もゲームのプレイも無料でできますが、アカウントがない人は、まずpaizaのトップページから、paizaの会員登録をする必要があります。

装備を変更してビジュアルの変化を楽しむ

本作は、RPGと謳ってはいますが、通常のRPGゲームの様な冒険フィールドや敵との戦闘シーンはありません。RPGよりコーディング問題を解くのがメインになります。

レベルの概念はあって、クリアしたコーディング問題に応じて報酬(アイテム)が手に入り、主人公のビジュアルの変化させることができます。

コーディングを楽しみつつ、おまけとして主人公のビジュアルも変化を楽しむというゲームになります。

上記はゲーム開始時の初期状態です。

問題を選ぶと、問題の前にクリア報酬が表示されます。

問題に正解後、装備画面でクリア報酬が装備できるようになります。

ゲームを進めていくと、服やら髪やら選ぶようになって、以下のような感じになっていきます。

問題を解いてみる

通常のプログラミング問題

今回の『エンジニア騎士とクエリの魔女』はSQLの問題が追加されたのがウリですが、通常のプログラミング問題もあります。通常のプログラミング問題を解くと男性キャラ、SQLの問題を解くと女性キャラ用の装飾アイテムが手に入るようになっています。

通常のプログラミング問題は、D,C,B,A,Sの5段階の難易度があり、D問題は以下の様な感じです。Dレベルだと、AtCorderのABCのA問題より簡単です。

SQLのA問題に挑戦

SQLの方は、今(2022.08現在)の所、A問題までしか実装されていません。A問題は、以下の様な感じになります。

ER図も与えられます。

回答欄が以下の様にあり、ここにSQLを記載していきます。DBエンジンを選ぶところがありますが、今はMySQLしか選べません。今後、ダイアレクトを増やしてく予定が窺えます。

個人的には、MySQLのバージョンも記載して欲しいと感じました。MySQL5.7とMySQL8.0では、有効なSQLに違いがありますからね。

試したところ、WITH句が効いたのでMySQL8.0が動いているようです。

以下はこの問題の解答例になります。

WITH Graffiacane AS (SELECT H.name, E.id, E.name element
                     FROM Hell H
                              JOIN Element E ON H.element_id = E.id
                     WHERE H.name = 'Graffiacane'),

     GraffiacaneWeakness AS (SELECT id, element_id, weakness_element_id
                             FROM ElementCompatibility EC
                             WHERE EC.element_id = (SELECT id FROM Graffiacane))

SELECT H.id, H.name, E.name element, G.name grade
FROM Hell H
         JOIN Grade G ON H.grade_id = G.id
         JOIN Element E ON H.element_id = E.id
WHERE E.id = (SELECT weakness_element_id FROM GraffiacaneWeakness)
  AND G.name = 'Boss'

まともにやればこんな感じになるのですが、実は抜け道があります。

SQLの問題は以下の様に、期待する出力が提示されます。

idは毎回ランダムなのですが、それ以外の値は固定値です。なので、以下のようなSQLでも実はPASSできてしまいます。

SELECT id,
       name,
       'Fire' AS element,
       'Boss' AS grade
FROM Hell
WHERE name = 'Ciriatto'

これはちょっと開発がかわいそうに感じます。通常のプログラミングの問題は、ケースを増やせば回避できますが、SQLの場合、ケースを増やすことはできなそうですからね。今後、どうやって対策されるのか検討がつきません。

なので、まあ、クリア目的でなく純粋にSQLの勉強目的でゲームをやるようにしましょう😇

個人的な感想

難易度は低め

以下は個人的な感想になります。

プログラミングに比べ、SQLの問題は全体的に難易度が低いと感じました。B問題やA問題でもJOINするだけ解ける問題になっています。SQL職人やデータエンジニアからしたら、物足りなく感じるでしょう。

SQL初学者向け、生SQLを書くことはほとんどないけど、SQLの基本は知っておきたいエンジニア向けのゲームになっています。

今後に期待!

SQLは、データ製品がどんなに便利になっても必要性はなくならないと思っています。むしろ、製品が進化すればするほど、データパイプラインの必要性、重要性が増していき、SQLもどんどん重要になっていくと思っています。

なので、個人的には今後、データパイプラインにも対応できる様々なケース問題が実装されたら嬉しいです。

SQLが解けるプログラミングゲームは、おそらくこの『エンジニア騎士とクエリの魔女』が、はじめてなんじゃないかと思います。とっても良い取り組みだと思いますので、今後の発展に期待しています。