こんにちは、シンクロ・フードの越森です。
1年ほど前からMリーグ視聴きっかけで、麻雀に再度はまり毎朝早起きして雀魂で麻雀を打ってから仕事を始めるという健康的な生活を送っています。
今回はシンクロ・フードでのデータ活用周りでちょっとだけ改善したことの紹介をしたいと思います。
はじめに
シンクロ・フードでは 2016 年に Redash を導入することで以下のことを実現しました。
- サービス指標の可視化
- サービスの重要指標と連動したSlack通知
- データ抽出作業の自動化
導入前はエンジニアがディレクターから依頼されて SQL を作成することが多かったのですが、導入してからはディレクターが SQL を作成してデータを抽出するようになり、スムーズにデータ分析ができるようになりました。
(複雑な SQL でデータ抽出する場合はエンジニアに作成依頼が来ることもあります)
Redash ではサービスのデータを記録している Aurora (個人情報を潰した状態)とログ情報やネイティブアプリのイベントを記録している BigQuery からデータを抽出できるようになっており、サービスの分析に活用しています。
わきあがる要望
Redash を導入したことでデータ分析活動が活発に行われるようになりましたが、それに伴いこういうことができないかという要望もあがるようになってきました。 (非常に良いことですよね)
上がった要望としては以下のようなものがありました。
- daily、weekly、monthly のその時点での数値を見たい
- 複数の指標を一つの表やグラフでまとめて見たい
- 数値を使って分析する際の CSV ダウンロードを自動化したい
1. daily、weekly、monthly のその時点での数値を見たい
シンクロ・フードが運営している飲食店専門の求人サイトである求人@飲食店.COM を例に出して説明します。
求職者の応募数については応募日時を持っているため、そのようなデータを抽出することは簡単ですが、掲載店舗数になると掲載期間としてデータを持っているため、抽出する SQL が複雑化して時間もかかるようになってしまいます。
(SQL によっては実行時間が長すぎて結果が返ってこないことも...)
求人@飲食店.COM では掲載期間中は複数の職種を募集することができ、職種の追加、取り下げもできるようになっていますが、その時の操作自体を記録していないと、後から見た場合にその時点で掲載されていたかどうかの判断がつかなくなり、その時点の掲載していた職種数を抽出できない問題があります。 データによっては記録していて抽出できるものと記録していなくて抽出できないものがある状態でした。
2. 複数の指標を一つの表やグラフでまとめて見たい
Redash ではダッシュボード機能があり関連している指標をまとめて見ることができますが、あくまで 1 つの指標単位での表やグラフのため、関連している指標をまとめて見て分析したいという要望があがりました。
3. 数値を使って分析する際の CSV ダウンロードを自動化したい
Redash では SQL の実行結果を JSON や CSV 形式でダウンロードする機能があり、ダウンロードした数値を利用してシミュレーションなどをしていました。 ただ、確認したいときに都度ダウンロードして数値を反映させることが手間なため、自動化できないかという要望があがりました。
Google スプレッドシートとの連携による改善
上記のような要望を満たす方法がないかと検討した結果、Redash の SQL の実行結果を定期的にスプレッドシートに転記するようにすることで今回の 3 つの要望については解決できると考えました。
2 と 3 の要望については、Google スプレッドシートに転記するだけで、あとは Google スプレッドシート側で参照設定を設定するだけで複数の指標を 1 つの表やグラフとして表示できるようになります。
(1 つのスプレッドシートに、複数の自動転記用のシートを作成して各指標を転記して、表示用のシート側で参照設定する形で実現しています。)
1 の要望については、定期的に転記するだけだと毎日上書きされていってしまうため、Google Apps Script(GAS)を利用して Redash からの転記後に更に別のシートに転記することで、その時点の状態が分かる情報を持っていないデータに関しても、時点情報を記録することができるようになります。
システム化
方針は決まりましたがセキュリティの問題があり、Redash と Google スプレッドシートだけでは連携することはできません。 そのため、連携するためのシステムを作成することにしました。 社内で利用する簡易的なシステムということで CTO の大久保がその時に興味を持っていた Racket で実装しました。
システム構成は、以下の図になります。
連携プログラムが実行された後の処理の流れは以下になります。
- 設定用のスプレッドシートから Redash の API の URL 、転記先のスプレッドシートのURL、転記先のシート名の3項目を取得する
- Redash の API を実行して JSON 形式で SQL の実行結果を取得する
- 転記先のスプレッドシートの対象のシートに転記する
まとめ
今回の要望を対応したことで、分析する人の手間が減り、今まで確認することが難しかったデータも簡単に確認できるようになり、データをさらに活用できる状態になりました。
非常に良いことずくめに見えるのですが、1点だけ問題がありました。
最初に想定していた以上に活用された結果、設定用のスプレッドシートの記入で不備があることでエラーが発生して、調査の時間を取られることが増えてしまいました。 また、プログラムが Racket で実装されていることからプログラムを読める人も少なく CTO 自身が対応することも度々...
この問題についても先日、エンジニアの新卒研修の一環でこのシステムを Rails でリプレースすることで解消しています。
(設定でもバリデーションをかけることができるようになりました。)
最後に、エンジニア募集のお知らせです!
シンクロ・フードでは、今回のちょっとした改善に限らず、まだまだ技術的な課題やチャレンジが残っています。
ぜひ、一緒に改善していきましょう!
また、飲食店ドットコムを始めとしたサービスの開発・改善も、どんどん進めております。
ご興味のある方は、以下の採用サイトからご連絡ください!
www.synchro-food.co.jp