Kaigi on Rails 2023 に「Rails アプリの5,000 件の N+1 問題と戦っている話」というタイトルで登壇 & 参加してきました

10 月 27 - 28 日に開催された Kaigi on Rails 2023 に登壇 & 参加してきました。

kaigionrails.org

Rails アプリの5,000 件の N+1 問題と戦っている話」というタイトルでお話をさせて頂きました。

speakerdeck.com

github.com

ひとことでいうと N+1 がいっぱい(いっぱい)あるのでなんとかしたい、手で直すのは面倒くさい、よろしいならば自動修正だ、というお話です。
予定では前後編で「gem を作った話」と「5,000 件の N+1 をなぎ倒した話」の 2 本立てだったのですが、開発が思ったように進まず「gem を作った話」が主軸になったのは非常に悔やまれるところです。完結編をいずれどこかでお話したい。
当初描いていた骨子と変わったので楽しんでもらえるか不安でしたが、「面白かった」と声をかけて頂いてほっとしました。

既存の N+1 問題は問題にならなければ問題でないかもしれないんですが、割れ窓なのが気になっていました。Bullet のログに慣れて目が滑るので、新しい N+1 を発生させても気づかず意図せず窓を割ってしまう。
今回たくさんのフィードバックを頂いた中で、「うちも N+1 困っていて」というお話を何度か聞きました。
中でもフロントとバックの開発が別れているので気づきづらい、テストだとデータが少なくてやはり気づきづらいという困りごとを聞いて、検証環境でログを監視して Slack 通知するなどできるとよさそうですねというアイディアが生まれてとても面白かったです。
また、strict_loadingprosopite (「zero false positives / false negatives」ってすごい) を教えてもらって試してみたいと思っています。
既存の N+1 問題を黙らせて傷口を広げないことを優先するのであれば allow list を提案するのもいいのかもしれません。
とかとか、お話させてもらう中で色々なアイディアも生まれてとても楽しかったです。

フィードバックで言うととりわけ(わたしが)盛り上がったのは @moro さんに頂いた「ビューで使うために N+1 が起こるケースにおいてはビューで includes したい勢です」というもの。

自分にない観点だったので会期中「なるほど!」「なるほど!?」「なるほど!?!?」となって懇親会後延長戦でお話させて頂きました。
一言でいうと「同じエンドポイントを叩くけれどビューによってレコードを利用したりしなかったりするのであれば必要なビューで includes すると凝集度も高まってよいのではないでしょうか?」ということ。
同席していた @ogijun さんが view_component っぽい話だね、と教えてくれました。
チームの練度が問われそうで中々難しくはあるけれどめちゃくちゃ面白い。

そしてこの会話を @tricknotes さん @ogijun さんがおじいちゃんのような恵比寿顔でにこにこしながら見てくれていて、なんかとても幸せな場でした。


今回は今まで以上に色んな人とお話できた Kaigi でした。
セッションに向かう途中で人と会って「あっあの話聞きたかったんですけど」といってそのまま 30 分話し込んだり、ふわっとブースに寄ったらそのまま話し込んだり。
(登壇が終わった開放感でアグレッシブに話しかけにいっていたかもしれない)
おかげで聞けなかったセッションがいくつもあったのでアーカイブ配信を心待ちにしています。

churb が初めてオフラインで一同に回した場でもありました。

RWC 行きたいんだけどチケット取り損ねてしまって」「なんとかなる大丈夫行きましょう」「そこに野生のこたつ World ハウスの家主がいますね」「ハウス空き枠ありますよいけます」「手続き完了しました」ととんとん拍子に RWC への初参加が決まったりもしました。ということで churb の pwxreading 初オフライン開催@松江ができそうです。#kaigieffect すごい。

好きな人がもっと好きになったり、今まで一方的に存じあげていた人に感謝を伝えられたり、新しく #rubyfriends が増えて好きな人が増えたりしました。
Rubyist たちのことをもっと知りたくなりました。今まで何度も言われていたことですが Rubyist Hotlinks を読みたくなりました。読みます。


今回の Kaigi ではセッションの内容以上にたくさんのものを貰ったのですが、印象的だったのは「できていると思っていたことができていなかった」という感覚があったことで、例えば「OSS と『自分のコード』の間に境界線は引いていないつもりだったけど、うっすら引いていたような気がする」「『すごい人』と自分の間に境界線は引いていないつもりだったけど、うっすら引いていたような気がする」というものです。
今は改めてそれらの境界線は取り払えたつもりでいるものの、これはあと何度か繰り返す気がしています。

また登壇準備をしている中で自分の知識の足りなさを痛感した一方で(準備期間全然足りなかった)、知りたいこと、やりたいことがたくさんあることにわくわくしました。
今回作った gem もまだまだ制作途中だし、そもそも「最初から 100 点のものを作る必要はなくて、作って洗練させていけばよい」ということに気づけたのも嬉しいことでした。これもわかっているつもりだったけれど体に馴染みきっていなかったことのひとつです。


というあたりで取り留めなくなってきましたが、Kaigi on Rails 2023、とても楽しかったです。2 日間ずっと楽しくてわくわくしていた。
これまでもオフラインの温度をオンラインに持ち込んでくれた Kaigi on Rails という場がとても好きだったのですが、実際にオフライン開催になったらもうほんとうに楽しい。

改めてこんな素敵な場を作ってくださった運営の皆様、スポンサーさん、関わってくださったみなさん、あの場にいたみなさんと画面の前にいたみなさん、全員最高でしたね!!
登壇 & 参加できて幸せでした。ありがとうございました!!