inSmartBank

B/43を運営する株式会社スマートバンクのメンバーによるブログです

Kaigi on Rails 2023 参加レポート

株式会社スマートバンクのwatsonnilpoonaです!この記事では、10月27日(金)-28日(土)の2日間に渡り開催されたKaigi on Rails 2023にて、聴講したセッションの中で印象に残ったモノをいくつか紹介していきます。

Rails アプリの 5,000 件の N+1 問題と戦っている話

speakerdeck.com

N+1問題の対策としてRailsではBulletというGemが良く利用されておりアプリケーション上で発生しているN+1やeager_loadingなどをログとして画面に表示してくれます。 そのBulletを用いてN+1の発生箇所を抽出した際に件数が多く、手動で直すのは限界があるため自動で修正してくれるBulletmarkRepairというgemを作った話でした。 N+1問題とは何か?から丁寧に説明してくださり、inclueds vs preload or eager_loadのお話などとても学びになる発表でした。 特に起きている問題に対して「どこでincludeするべきか?」「なにをincludeするべきか?」の2点にフォーカスしてgemを作成していった点が良かったです。

APMをちゃんと使おうとしたら、いつのまにか独自gemを作っていた話

slides.com

DataDogを使用してAPMを活用し、それを利用して行く中でGemを作ったお話でした。 DataDog標準のトレースでは追いきれない箇所を特定するためにAPM Traceable Gemを開発したお話からMySQL8.0に更新し、特定のエンドポイントのみ遅くなった際の具体的なチューニング事例も紹介して下さりました。 弊社ではNew Relicを採用していますがAPMを活用してトレースを見て把握し、原因を見つけるまでの流れがとても学びになりました。

ペアプロしようぜ 3人で登壇!? 楽しくて速いペアプロ/モブプロ開発

speakerdeck.com

ペアプロ・モブプロの良さと実際のモブプロの本格的なやり方を実演した内容の発表でした。

スライドのイラストやあんすとさんの発表方法など個人的に今回のKaigi on Railsで最も印象に残ったセッションでした。ドライバーをタイピストと表現するのは単純ですが、モブプロ経験のある自分からすると、ドライバーが1人でやってしまう課題に対してとても効果がありそうだなと感じました。属人化の防止や新メンバーのキャッチアップの速度向上などペアプロ導入におけるメリットの紹介を受け、弊社でも試してみたいと思いました。

Update Billion Records

speakerdeck.com

サービスの成長に伴ってデータ量が大きくなり、結果数十億件になったテーブルに対するデータ一括更新処理の話でした。 以前も同様のデータ更新をrails runnerを複数プロセス立ち上げ更新処理を並列に走らせていたようですが。対象データ件数が大幅に増えたことで実行時のモニタリングや、複数要因で処理が中断されることに対する解決策として更新対象の分割リストをRedisに格納し、Sidekiqのworkerから非同期でRedisに格納されたIDのデータを更新する手法を紹介されていました。 既存の手法を課題を洗い出し、検証しながらプロセスを良くしていく所が良かったです。

TracePointを活用してモデル名変更の負債解消をした話

適切ではないモデル名の変更をする際にTracePointを利用して影響箇所特定と修正を行った発表でした。 モデル名を変更するに伴い様々な箇所に影響を及ぼしそれらを手作業で置換していくのは容易ではありません。 影響が及ぶファイル・行数をTracePointで特定し、詳細なコードの位置はRubyVM::AbstractSyntaxTreeでASTに変換することで特定しており、置換処理にも活用されていました。

TracePointの説明からしていただいたので、本題の説明がとても分かりやすかったです。 TracePointの最適化やパラメータ取得時のTIPSなど実践的な内容が豊富に紹介されていました。 モデル名変更の影響範囲特定にTracePointを利用する着眼点が素晴らしく、とても学びが多いセッションでした。

数十億のレコードを持つ5年目サービスの設計と障害解決

speakerdeck.com

5年運用しているスマホアプリのバックエンドで発生した障害とその対応内容についての発表でした。 Railsのバージョンアップ起因でキャッシュが引けなくなる、お気に入り全件表示でスロークエリが発生してレスポンスが返らなくなる、外部キーの型指定を間違えてエラーになるなど、発生した障害とその対応策について発表されていました。 年末年始の障害は話を聞いているだけでつらくなりましたが、障害->暫定対応->恒久対応と障害が発生したら最速で収束させることに専念し、その後恒久対応まで行っている所が良かったです。

Railsアプリにパスワードレス認証を導入した知見

speakerdeck.com

Railsで開発している自社サービスにパスワードレス認証を導入した発表でした。 パスワードを利用せず、所持端末と生体認証を組み合わせセキュアでユーザーも簡単に利用できるようになるのがメリットです。ログイン処理はWebAuthnの拡張を利用して実装していました。 認証の仕組みを0-1で実装するのは難しいため、具体的な認証処理はGemに任すことで最小限の工数でサービスへの導入を実現していました。

WebAuthnの仕組みは何となくしかわかっていなかったので、トークン登録〜認証周りのフローや概要が知れて勉強になりました。 導入時のハマり所も紹介されており、導入を検討されている方には非常に嬉しい情報だったと感じました。

まとめ

Railsの話のみならず、Web技術に関する広範な知識・経験をインプットすることができ、大変貴重な時間だったと強く感じています。 カンファレンスの開催・運営にご尽力いただいた全てのみなさん、本当にありがとうございました!🙇‍♂️

お知らせ

最後にお知らせと宣伝です。 11月9日(木) 「After Kaigi on Rails LT Night」を開催します。 スポンサーのメドピアさん、マイベストさんとの協賛のLT大会です😊 Kaigi on Railsへご参加された方、都合が合わなかった方も Rails が好きな方はぜひお気軽にご参加頂けると嬉しいです!

connpass.com

ブースでも展示していた B/43のアーキテクチャをはじめスマートバンクの技術や開発体制も知りたいと思って頂けた方は合わせてご覧ください。 smartbank.co.jp

We create the new normal of easy budgeting, easy banking, and easy living.
In this blog, engineers, product managers, designers, business development, legal, CS, and other members will share their insights.