update.前置きどうも、謎の集団Zeneloの中でSQLとか見てる人です。普段、クエリレビューなどをして生きているのですが、Zeneloがメインで使っているSlickってやつが、これまたやんちゃな子で、時々おかしなSQLを出力するのです。あ、Slickってやつはhttp://slick.lightbend.com/で、O/RMっぽいやつです。mapperらしく、O/RMではないって強く主張しているので、明日僕は殺されるかもしれない)Slickが出してくれるクエリについて規模の小さいプロダクトだと、多分Slickは何の問題もないのでしょう。NAMEこのクエリは公式ドキュメントから取ってきました。ScalaのコードをScalaらしく書くだけで、綺麗なクエリが出力されます。型チェックもされたり、インジェクションなどが起きないようになっていたりと、Scalaエンジニアにとって至れり尽くせりとなっています。JOINなどで繋げようとした場合、変な現象が起きます。お見せすると、こちら。後述する自作ツールの出力結果なのですが、なかなか香ばしいことになってますよね。/x(\d)+/)」みたいなやつでどんどん置き換えていきます。x184.x185」みたいなものを見せられて、何と何を比較しようとしているのかわかりません。そのあと使わないのに、とりあえず置き換えとくみたいなことをしてくれるので、どこにも使われていない無駄な置き換えが出てきます。このクエリがSlowQueryとして流れてきたときには、「どっからどう見ればいいんだ・・・」ってなってました。(ちなみにこのSlowQueryは、整形ツールで見ると294行です。言うと、x213まであります。)私はDBやSQLを見るためにこの集団に所属しているので、どんなSQLであっても、このSQLを見る必要があります。いえ僕も一応エンジニア、数回は手で全部パースしてレビューしてってやってみたのですが、疲れたので自動化することにしました。作ったツールhttp://s.063.jp/index.html個人で使うように作ったものなので、ほぼ何の機能もありません。デザイン?なにそれおいしいの?って感じです。asで言い換えているもののうち、使われていないものがあれば削除するだけです。使い方は簡単で、「Query」ってところにSlickが出してきたクエリを入れると自動でSQLを見て、一度しか出てきていないものを検出してくれるので、チェックボックスを見て全部消しても良さそうなら「Execute」を押すだけです。消しちゃダメな文にチェックボックスがついていればチェックボックスを外し、消してもいいのにチェックボックスがついてなければつけるだけです。先ほど貼ったクエリもこのツールで見たものです。x75」の「x75」は他でも使われているから必要そうだけど、他のものは使われていなさそうだから消してもいい?と言うことを表しています。あとは「Execute」を押して、どんどん行数を減らしていきます。最後に残るのは、本当に使われているものだけになります。整形したあと、本当に必要な部分だけをドメイン知識を持った人と改善していった結果、(同じ整形ツールで)22行になって、マージされ、今日も元気に動いています。大きくなりすぎたプロダクトで、Slickで頑張っていくのは辛いよねって話になり、最近はPlainSQLに直してくれたりと、どんどん改善が続いています。Slickが便利なところはSlickで、そうでないところはPlainSQLなどで、って方針でしばらくいくと思いますが、もしかしたらScalikeJDBCなどに載せ替えるかもしれません。今後プロダクトに入るクエリについては、もう安心できる程度にZeneloメンバーはSQLについて関心を持って開発していると思っているのですが、まだまだ「昔は(パフォーマンス的に)大丈夫だったけど、今後は・・・」ってクエリの改善活動が残っています。そこでこのツールを使っていきます。不便だなって思ったら機能追加します。プルリクなども歓迎です。https://github.com/Goryudyuma/slick-refactoring-toolこのツールは、謎の集団Zeneloで今ブームな言語、Elmで書かれています。大魔王の力は絶大で、その力にあやかったので、このツールも「えいっ」てやればいつの間にかできてました。僕の力が足りず、正規表現で頑張っちゃったので、次同じようなツールを作るときは、きちんとParserでやりたいと思います。最後にこの記事は謎の集団zeneloのアドベントカレンダーの三日目の記事として書かれました。他の記事も是非よろしくお願いします。requestStockLike6@Goryudyuma渋谷のとある会社で、SREとして働いています。upLoginユーザーは見つかりませんでした。