こんにちは。
メディアサービス開発部 Webアプリケーション開発課の相生ゆら(@Little_Rubyist)&yotaです。
本記事では、2023年10月27日と28日に開催されたKaigi on Rails 2023へ参加したことについてお話します。本記事はモブブロギングによって執筆しています。
- 参加したセッションと感想
- 基調講演
- 5000件のN+1問題と戦っている話
- 生きた Rails アプリケーションへの delegated types の導入
- やさしいActiveRecordのDB接続のしくみ
- TracePointを活用してモデル名変更の負債解消をした話
- Railsの型ファイル自動生成における課題と解決
- 32個のPRでリリースした依存度の高いコアなモデルの安全な弄り方
- Multiple Databasesを用いて2つのRailsプロジェクトを統合する
- 管理機能アーキテクチャパターンの考察と実践
- APMをちゃんと使おうとしたら、いつのまにか独自gemを作っていた話
- 数十億のレコードを持つ5年目サービスの設計と障害解決
- 基調講演:A Decade of Rails Bug Fixes
- そのほか会期中にやったこと
- まとめ
参加したセッションと感想
ここからは参加したセッションから印象的だったものを紹介します。発表資料をまとめてくださっている方もいるので興味のある方は参照してみてください。
基調講演
貢献しやすいところから貢献していく話で、できることをちゃんとやっていくこと、新しいことにチャレンジすることを伝えてくれました。issueなどのメーリングリストを全て追っているという話には熱量の高さに驚きました。全ての情報は追えなくてもzzakさんがまとめていると紹介してくれていたhttps://world.hey.com/this.week.in.rails は読んでいきたいと思っています。
5000件のN+1問題と戦っている話
膨大な数のN+1になっているクエリを機械的に修正する話でした。どのように修正していくのか順を追って説明がされており、なぜN+1になるのか、内部的にどのような挙動になるから解消されるのかも解説があってとても丁寧でわかりやすいセッションでした。
「Bulletで検知できないN+1もあったりしますよね」とか「NewRelicなどのObservability便利ですよね」とか「テスト実行時のRSpecログにあるクエリログを集約してN+1検知に役立てばなぁ。でもN+1のケースに対応したテストケースを作らないといけないんですよねー」などなど発表後に感想や気になったこともお話できて良かったです。
生きた Rails アプリケーションへの delegated types の導入
長く存在するアプリケーションはテーブル構造が整理されていないこともあるので、それをどうデータベースリファクタリングをするのか、ActiveRecordでどう表現すると良いか紹介する話でした。
外部キーは基本1テーブル:1テーブルの制約だから制約かけられないのも問題らしいと聞いて「制約つけたいけどできない状況モヤモヤするよなー」と頷いていました。
やさしいActiveRecordのDB接続のしくみ
ActiveRecordとmysql2の関係について、debuggerを使って追いかけた内容を紹介する話でした。DB、writer/reader、shardingなどで接続先が変わりますが、どのモジュールがどの情報を扱っているのか説明されていて勉強になりました。
failoverした時に更新クエリをReaderに投げることになって死にがちという話を質疑応答でされている方がいて、「Aurora MySQL使ってるならhttps://github.com/alfa-jpn/mysql2-aurora というgemがあるのでどうやってるかコード追ってみると良いかも」という紹介をしました。
TracePointを活用してモデル名変更の負債解消をした話
Ruby標準のさまざまなイベントをトレースできるTracePoint機能の紹介とモデル名変更にどう活用したかの話でした。
Rubyの強さを実感したお話でしたが、一番印象に残っているのはコードカバレッジが97%という部分でしたw 実行されないコードなどは検出できないのは実行時に取得するツールではある課題ですが、それでも97%もカバーされていればほとんど大部分は検出できていそうですし、実際そうだったようです。
Railsの型ファイル自動生成における課題と解決
RubyKaigi2022で発表されたorthoses-railsの紹介でした。2022年当時よりもやれることが増えている印象を受けましたが、RubyKaigiはRailsの紹介は触れる程度だったからかもしれません。
社内でもRBS導入を試していますがレールから外れている部分もあって簡単に自動生成出来ていないことが悩みでした。orthosesを使って、より簡単に型付けが出来たらいいなと思っています。
32個のPRでリリースした依存度の高いコアなモデルの安全な弄り方
安全にモデルの変更をするにはどのように進めると良いのかを紹介する話でした。
私たちのチームでもほとんど同じような作業を完了したところだったので(これについても近いうちにブログを書きたいと思っています。)、激しく首を縦に振り続けてしまい首を痛めました。
感想などお話するタイミングを逃してしまったことが心残りで、またどこかでお会いしたときに感想を直接お伝えしたいなと思っています。
Multiple Databasesを用いて2つのRailsプロジェクトを統合する
1つのチームでお世話していた複数のRailsプロジェクトを統合する話でした。
私たちのサービスでも1つのチームが複数のRailsプロジェクトをお世話しているので非常に共感できる内容でした。具体的な進め方についても紹介されており、「統合できると良さそうだよね」とチーム内で話にもあがっているので、もし実施するとしたらぜひ参考にしたいと思います。
管理機能アーキテクチャパターンの考察と実践
「オオバさんvsオオバさんというセッション構成にした運営ゆるせねぇ!(許す)」な余興面白かったですw
アーキテクチャの解説から入って、取りうる選択肢とアンチパターン、そこから実際にプロダクトでどういうアーキテクチャを選択したのかという流れはとてもわかりやすくて話も入って来やすかったです。
「エンドユーザ向けAPIと管理機能APIのアクセス制御をどのようにしているか?」という質問にも丁寧に答えていただきありがたかったです。Xにも投稿されていたのでリンクを貼っておきます。
さきほど発表後も質問うけたので補足すると (しんくうさんだったか失念...)
— ohbarye (@ohbarye) 2023年10月28日
ドメインは別物でエンドユーザーには露出していなかったり、管理機能へのアクセスにはIP制限があったり、認証の仕組みがエンドユーザーと管理機能ユーザーではまったく違っていたりします!#kaigionrails #kaigionrailsB https://t.co/B8De5BEsix
APMをちゃんと使おうとしたら、いつのまにか独自gemを作っていた話
APMのどこを見たらいいのか、どのように活用したらいいのかを実例を用いて紹介してくれました。
社内でもNewRelicを使っていますがパフォーマンス改善にしっかり活用出来ている訳ではなかったので、実際どういう手順を踏んで改善すべきなのかとても分かりやすかったです。週に1回みんなでツールを眺める時間を作るというのは簡単に試せそうで良い方法だなと思いました。
それだけではなく、gemで拡張して発展的な監視の手法も紹介されており、長く参考に出来るセッションでした。「2つのプロダクトで同じコードが発生したらgem化する」という流れはパターンっぽさを感じました。
gemの詳細は登壇者の黒曜さんが記事にしてくれているのでこちらもご参照ください!
数十億のレコードを持つ5年目サービスの設計と障害解決
pixivさんのpalcyというサービスの障害実例がとても面白かったです。「今障害が起きたらこのトークは終わりです」という発言が出ていて、人手不足とサービスの成長を強く感じました。すごい。
障害の根本解決が難しそうな問題でも開発コストを加味した上で適切な実装をしていて、自分も正しく判断の出来る人間になりたい…と思いました。
基調講演:A Decade of Rails Bug Fixes
byrootさんが最初にRailsに投げたPRや最近のPRの話がされました。
チーフオーガナイザーである大倉さんに聞いた所「推しのRubyistはこんなにすごいんだということを知ってほしい」ということで、実際mastodonのバグ修正のエピソードでは複雑に絡んだバグの原因を突き止め、mastodonもRailsもRubyも修正していて、本当にすごい人だなと感じました。
我々がそうなるにはきっと長い道のりが必要ですが、興味のある分野についてちゃんと追って、少しずつOSS活動がしていければと思います。
そのほか会期中にやったこと
セッションに参加する他にも様々なことが発生しました。オフラインイベントの良さは事前に知り得ないことが起こることだなぁ、と再認識する良いタイミングとなりました。
RBSアクティブユーザートーク
3FのフリースペースでRubyコミッターのpockeさんや登壇者であるksssさんなど型を積極的に試している皆さんで「どういうところが苦しいか」「どういう機能があると嬉しいか」などを話しました。
型の勉強会がしたいという話も持ち上がっており、まずはオンラインで始めようという話になっています。興味のある方はruby-jpの#typesにぜひ参加してください!
そのほか細々
- パーフェクトRuby on Rails著者サインラリーしました
-
同日パRails著者サインラリー完走しました〜!みなさまお手伝いありがとうございました! #kaigionrails https://t.co/Ephenu78rN pic.twitter.com/1OKTU5B9dM
— 相生ゆら (@Little_Rubyist) 2023年10月28日 - 世界初らしい
- 本当に沢山の人に「見つけたら教えて!」をやりました。お手伝いありがとうございました 🙏
-
- 斧投げ
- 結構楽しいのでみなさんやりましょう
- カンファレンスに物理マサカリを持って来ている人には初めて遭遇しましたw
- lramaの型付け相談
- 会期中にPRを1つ出して入れてもらいました
- Rubyistよりも先に地元のおじいちゃんと仲良くなって一緒にコーヒーを飲みに行きました
- 読書メーター繋がりでogijunさんに挨拶できました
- コーヒーも美味しかったです
- 相生さんに多くのRubyistを紹介してもらいました
- たくさんの人と(飲みながら)たくさん話せて楽しかったです
- 孤独のグルメ企画が面白く、近場の美味しいお店でランチを食べました
- 孤独のグルメ再現力の高さに笑いました
まとめ
本記事では2023年10月27日と28日に開催されたKaigi on Rails 2023へ参加したことについてお話しました。
Kaigi on Railsの初のオフライン開催に現地参加でき、セッションによる刺激と多くのRubyistとの交流という最高の体験ができました。次回もあれば是非何らかの形で貢献したいなと思える最高の場所でした。スタッフの方々、登壇者の方々、Rubyistの方々、本当にありがとうございました。
さて、あとはお決まりのような感じになりますが、ブックウォーカーでは物理・電子・Web連載問わず漫画や本が好き、あるいはRubyに情熱を持っているWebアプリケーションエンジニアを募集しています。
興味がありましたらぜひ下記採用情報ページより、カジュアル面談からでもご連絡ください。