Slackを通じて非同期的にSQL講座をやっている話


<img src="https://ca.slack-edge.com/T0K9B20SG-UCK7YGNDT-b54dcca7df83-512" width="40">  こんにちわ。バカン[Vacan, Inc.]で各種分析を担当しているヒゲメガネです。

**非エンジニアでもSQLを駆使して自分の欲しいデータを取得できる**ようになるべく、Slackを通じた非同期型の勉強会を行っているので、その様子をご紹介します。

この記事は[VACAN(バカン) Advent Calendar 2019](https://qiita.com/advent-calendar/2019/vacan)の19日目(12/19)の投稿です。

# VACANで扱っているデータ
IoT, AIを使って[さまざまな空き情報を可視化しているVACAN](https://product.vacancorp.com/)では、センサーやカメラ、WEBサイトなどから以下のように様々な情報を集積しています。

* トイレの混雑情報
* 飲食店の混雑情報
* サービスサイトのPV
* センサーのヘルス（死活監視）情報...etc

私はそれらの情報を抽出・分析し、サービスの改善や企画につなげることを担当しています。

なお私自身はエンジニアではなく、分析のためのselect文を書く、データの可視化、グラフ化のためにちょっとPythonを書く、程度のものです。非エンジニアであってもSQLを書いて自分でデータを抽出できるメリットが大きいので、VACANでその啓蒙活動に励んでいます。

# データ分析をするにあたって
データベースに蓄積されたデータを抽出するために、SQLを使います（VACANでは[MySQL](https://ja.wikipedia.org/wiki/MySQL)を使っています）。

## SQLが書けないと
必要なデータをエンジニアに伝え、データベースから抽出してもらわなければなりません。

このとき、エンジニア本人は何も思っていなかったとしても、頼む方は**本来の開発業務を邪魔してしまっているという申し訳ない気持ち**に苛まれつつ、「できれば今日中に欲しいんですけど・・・」などと更に言いづらいことを言わなければならない、なんて場面が往々にしてあります。

そして、抽出してもらったは良いものの、「欲しかったデータと微妙に違うんだよなー・・」ということもよくあるのです。

* デイリーじゃなくてアワリーで欲しかったなー
* これだと属性情報が足りないなー
* 抽出期間がズレてるなー...etc

またまたエンジニアに依頼です。

**心苦しいし無駄に時間がかかる！**

## SQLが書けると
自分でSQLを使い、必要な形に整形してデータ抽出を行えるようになることで、自分もエンジニアも無駄な時間をかけず、イライラしたりビクビクしたりしなくて良くなる！のです。

* スピード面
* 精神衛生面

でのメリットが計り知れませんね。

ということで社内からも「自分でSQLを書けるようになりたい」という声がちらほらあり、勉強会を開催することになりました。

# どうやって勉強会をやっているか
スタートアップは基本的に全員忙しい ＆ MTGや外出も多いので、参加者が一箇所に集まり、同時に時間を割いて進めるというのはあまり現実的じゃないし効率的じゃありません。

そこで、Slackで非同期的に進めることにしました。
エンジニアのアドバイザーも含め、現在36人の参加者が集まっています。

はじめるにあたって、ググってほしいこと、それでもわからないことは遠慮なく聞いてほしいこと、相互にヘルプしあってほしいことなどをアナウンス。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/7cc9de6e-e214-59c4-7174-ff2ec84dc486.png" width="500">


以下、STEP4までは全員一律で、STEP5からは各自の進捗に合わせて個別に進めています。

## STEP 1: アンケート
参加者に簡単なアンケートを募り、各自が目指すゴールを確認しました。

* 分析を自分でできるようになりたい
* 全く触ったことがないのでどういうものかまずは知りたい
* SQLは昔書いていたが忘れてしまったので思い出したい
* そもそもVACANでどういうデータを扱っているのか知りたい
* 管理部門の予実管理に活かしたい
* データから不具合判定をしてサービスの安定運用に活かしたい

などなど。

**なんとなく参加しているのではなく、明確に目標を持って取り組んでもらう**ことを双方で確認します。

## STEP 2: ツールをインストール
Macユーザーは[Sequel Pro](https://www.sequelpro.com/)を、Windowsユーザーは[Heidi SQL](https://forest.watch.impress.co.jp/library/software/heidisql/)を、それぞれインストールしてもらいます。

## STEP 3: DBに接続
勉強会用に用意したテストDBに接続。

ここらへんで、みなさん業務に追われて後手になってきたので、バイネームでリスト化してちょっと煽ったりしています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/bb7f90bc-57db-819b-f5d9-14e845aedc6d.png" width="200">

## STEP 4: クエリを書いてみる
全員がDBにアクセスできる状態になったら、いよいよクエリを書いてみます。
「hogehogeのテーブルにある全データを、10件だけ抽出する」というもの。

`select * from hogehoge limit 10`

ツールによってはDBにどんなデータが入っているかすぐにわかりますが、私がSQLを習得するときに最初に教わったクエリです。
まずはこれを書いて、データの中身を確認して、欲しいデータを見定めます。

それができたら、徐々に条件をつけてデータを整形していきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/96c8e341-31b4-c848-0993-ec1de2bc8b9b.png" width="500">


## STEP 5: 課題を出して個別に採点
ここからは課題を出し、個別にクエリと回答を貼ってもらって伴走。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/b50e3536-e429-c536-d2de-48854cc859ab.png" width="500">

何度か挑戦して正解にたどり着いたり、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/8ccc1921-e7c4-355e-938a-fa77e8c103b1.png" width="500">

意外な落とし穴があったり、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/62e6b373-1c60-2a2d-efaf-01781ff5374e.png" width="500">

感覚を取り戻したり。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/af5c2bda-d4e1-04d7-423e-ce58f0d84e9b.png" width="500">

皆それぞれに進捗。何度も挑戦して正解にたどり着いたときには、こちらも嬉しくなりますね。

## 今後
SQLが着実に身につき、実務で使い始めているメンバーもいれば、まだ課題にトライできていないメンバーもいるので、しばらくはこのスタイルで様子を見ていこうとおもいます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540838/4f871faf-6049-6803-c30b-f90af8f24a92.png" width="500">
・・・叶わず！

# 最後に
VACANでは「いま空いているか1秒でわかる優しい世界」の実現に向けて仲間を募集中です。
ぜひ[こちら](https://www.wantedly.com/companies/vacancorp)をチェックしてみてください。

株式会社バカン
https://www.vacancorp.com/
株式会社バカン　サービスサイト
https://product.vacancorp.com/