この記事はWanoグループAdventCalendar2016の7日目の記事になります。
EDOCODE株式会社では運用しているサービスで蓄積されたデータを活用して日々サービスの質的向上を目指していますが、それを設計する側の人たち(ディレクター職)がSQLを書けるようになると、勉強に費やすコスト以上にメリットがあると考え、エンジニアを先生役に週一回一時間の勉強会を2ヶ月程度行いました。
なぜディレクター職がSQLを書けることにメリットがあるのかを最初に考えたので、それを書き連ねてみます。
##SQLを習得する意義
- サービスの利用状況のさまざまな視点からの把握
- 管理画面をいちいち作っているのではスピード感が足りなすぎる。
- 汎用的だと思ったものは、SQLさえ書ければredashやspreadsheetを使って管理画面風なものが作れるようになる。
- 戦略立案のための分析
- 戦略立案には、仮説→検証の繰り返しが必要であり、そのループが自己完結するのは非常に効率的。
- 時には1ユーザーに降りていって行動を追うといった分析も必要となり、そういったことができるようにもなる。
- 機能設計のためのシステム把握
- サービスがどんなデータを持っているのか、何と何はつなげることができるのか、などを把握していたり調べたりすることができれば、新しいコンテンツでも実現可否が判断できるようになる。
- システムには必ず得手不得手、機能的な限界があるので、リレーショナルデータベースとSQLができることを知っておけば、実現可否が判断できるようになる。
- エンジニアとのコミュニケーションが円滑化
- 用語の統一
- データ抽出業務のダブルチェックが可能に
- クライアント向けのデータ抽出であれば、ダブルチェック必須にしたい。
- 業務の効率化
- データが増えれば増えるほど、CSV+Excelのような運用は大変さが増していく。SQLで行った方がはるかに効率的。SQLでできることをExcelでやらないようにしていく。
##進め方
データはBigQueryに用意し、学ぶ側でSQL以外の労力はかからないようにしました。
各回は、以下のような内容で進めました。
- SQLとは・BigQueryの使い方
- SELECT文の基本
- SELECT(列)FROM(テーブル)WHERE(条件)
- WHERE
- ORDER BYとLIMIT
- JOIN
- VIEW
- 集計関数とGROUP BY
- サブクエリ
- キャストと日付関数
それと、毎回勉強会終了後に3問程度、データを抽出するクエリを書く宿題を用意しました。
##結果
JOINやGROUP BYを使った実践的なクエリを一通り使いこなせる人が出てくるようになりましたが、
エンジニアであれば最悪プログラムコードを見て確認する各データ項目の詳細な使い方を、
どうやって効率よく伝えるべきか、今後の課題になったように思います。