社内向けにSQLハンズオンやった

弊社内でRe:dashが整備され、エンジニア以外でもブラウザから気軽にSQLが叩ける用になった。 ただ気軽になったと言ってもいきなりSQLを使いこなせるわけはないので、社内向けに1時間程度のハンズオンを実施したのでここにまとめておく。

目的とゴール

目的はとりあえずSQL(主にSELECT文)の勘所を掴んでもらい、基本的な質問などは非エンジニア部署のメンバー間で解決できるようにしたかった。

なので今回のハンズオンのゴールは

  • 基本的なSELECT文が叩ける
  • Re:dashの基本的な操作ができる

という点に設定した。SELECTで使用する句の範囲は

  • WHERE
  • ORDER BY
  • LIMIT
  • GROUP BY
  • HAVING
  • サブクエリ

とre:dashの簡単な解説とした。

進行方法

自分が前に登壇してセミナー形式にしても良かったのだが、なんとなく退屈になりそうという点と、自分たちで調べて解決したという達成感があった方が身につきやすいのではという実験的な試みから以下のようにした。

  • いきなり制限時間5分の課題を解いてもらう(ex. あるテーブルの◯◯ごとの件数上位n件を表示せよ)
  • 課題には関連するテーブル名やカラム名、使用するSQLの句をヒントとして付随させる
  • SQLの句の使い方はぐぐって調べてもらう
  • 解けたものは解けてない者の手助けをしてよい
  • 5分経ったら解答例提示、解答の解説、質疑応答
  • これらの繰り返し

互いに教え合うという点は、幸いメンバーの技量が

  • SQLほとんど触ったことない: 3名
  • SQLでデータ取得したことある: 4名

とバランスが良かったのでうまくまわった。

得られた効果

セミナー形式と違って自分たちで問題を解くので、実際にSQLを叩く中でハマりやすいポイントと、細かい疑問(各句は大文字小文字どちらが良いのか、改行する意味はなんなのか、COUNT(*)に指定するカラム名はなんでも良いのかなど)も浮き彫りになり、それらを解消することができた。

また、教え合うことで主催者の手が回らず質問できないという事象を避けることができ、無事にほぼ全員が解答まで導けることができた。なにより楽しかった、またやって欲しいという声もいただけた。

反省点

INNER JOINやGROUP BYなど、少し複雑になるケースの解説はもう少し厚くした方が良かった。テーブルのイメージを把握してもらうために多くの図解を加えるべき。(INNER JOINで結合するカラムはRailsの規則によるところがあるので、さらに多くの解説を要した)

1時間でやってみたところ途中までしか終えられず、さらに解説を多く含めるのであれば何回かにパート分けした方が良さそうである。