💻

RailsエンジニアSQLと向き合う、の巻

2023/12/23に公開


こちらは、READYFOR Advent Calendar 2023の23日目の記事です。

はじめに

READYFORプロダクトエンジニアの森です。
最近は3DCG熱が再燃したのでBlenderをお供に遊んでいます。土日が溶ける。

2023年は「SQLへの苦手意識を減らしてレベルを上げる」を隠れ目標としていたため、それに向けて取り組んだことをつらつらと思い出してみようと思います。

弊社ではRedashが利用できるようになっているため、非エンジニアでもゴリゴリSQLを書いている方もいます。
一方こちらはActiceRecordの恩恵を受けること早数年、生でSQLが書けないエンジニアになっていました。
流石に簡単な複数テーブルのデータを参照するSQLは書けるものの、少し複雑になってくると全く歯が立たないレベルで、苦手意識も割と強いです。
読むことはある程度はできるので、大抵はActiveRecordの出力結果を利用してその場を凌いでいましたが、このままではそろそろ本格的にヤバいぞという危機感から、ちゃんとSQLに向き合う年にしました。
2023年末現在、「気合を入れれば書けるクエリが増えてきた」程度には、苦手意識も若干減りつつあります。

DB歴としては、PostgreSQL発→MongoDB経由→MySQL途中下車中(寄り道あり)です。
PostgreSQLを使っていたときは細々書いていたのですが、Mongoを経由した際に全て忘れてMySQLに辿り着きました。

苦手克服に向けて

社内の勉強会に参加する

アドカレ18日目を担当した永井さんは、よく社内で勉強会を開催しています。
今年開催された勉強会の中に分析勉強会なるものがあったので、こっそりと紛れ込みに行きました。
データ分析会やるよ!

マスキング済みのデータの他GA4のデータも分析できるようになっているので、それらのデータを利用して、各自決めたテーマに沿った分析ができるようになることがゴールです。
勉強会の中では、他の人のクエリを見ながらアレコレ話したり、逆に他の人に自分のクエリを見てもらう良い機会にもなりました。
その分析会の中ではこれといった結果につなげられませんでしたが、後日、BigQueryで特定ページでの離脱率を出すクエリが組めたので、レベルが3ぐらい上がったかなと思います。

とにかく出力結果を見る

普段の開発の中で少し余裕がある時は、SQLでクエリを組み立てる→rails consoleでメソッドを実行する→発行されるクエリを見て差分を見る、みたいなこともしていました。
簡単なもの以外は大体差分ありまくりでしたが、たまに一発で「想像していたのはこれだよ!」という結果になった時はそれなりに(結構)嬉しかったです。
レベルは2ぐらい上がっていて欲しいです。

横道に逸れますが、今年の中頃、ローカルの開発環境では自動でEXPLAINの実行結果も出力されるようになりました。
今までは都度explainメソッドを実行したりし忘れたりでしたが、自動で出力されるようになったおかげで、実行結果見るの忘れてたな〜ということが減り、とても助かっています。

実践あるのみ

いくら知識を蓄えても、結局実際に手を動かさないと使えないままのタイプなので、良い分析テーマを探しに出ます。
とはいえ何もなしに「はい!このテーマで出力します!どーん!」というのも急にはできないので、Slackに流れる分析依頼を参考にして同じようなデータを出力する動きをこっそりしていました。
この場合だと他の人が書いたものと比較できるし、書けなかったとしても参考にできるものがある状態になるので中途半端にモヤモヤすることがなかったので、個人的に良い方法でした。
毎回「このクエリ組めるのすごい!」という気持ちになります。

また、曜日毎にチームを作り、曜日担当制で社内のお問い合わせの一次対応をしているのですが、お問い合わせとしてデータの出力依頼がくることがあるので、それも良い機会だなと捉えて取り組むようにしました。
時間の制約もあるのでハラハラすることもそれなりにありますが、逆に上手く作用する良いプレッシャーになっていたなと思います。

レベルは体感5ぐらい上がりました。

お世話になった書籍など

いくつか手に取った内、達人DBに続きミック先生にはとてもお世話になりました。
https://www.amazon.co.jp/dp/B07GB4CNKP
https://www.amazon.co.jp/dp/B01HD5VWWO

他、とにかく手を動かしたかったので、SQL CONTESTにある問題にも取り組んだりしました。
https://products.sint.co.jp/tsc

おわりに

レベルとしてはまだまだではあるものの、初期に比べると多少レベル上げもできたし、苦手意識も若干弱くなりつつあるので取り組みとしては良い結果が得られたように感じます。
ChatGPT先生に気軽にヘルプを求められるようになったのも大きいですね。
何よりSQLを書く必要が出てきた時に「まあ、とりあえず書いてみるか」と思えるようになったのは一歩前進かなと思っています。


明日はshmokmtさんによるインフラ周りのお話です。お楽しみに!

https://qiita.com/advent-calendar/2023/readyfor

READYFORテックブログ

Discussion