Kaigi on Rails 2025に参加してきました
今回2025年9月26日(金)~27日(土)にかけて開催されたKaigi on Rails 2025に参加してきました!
私はエンジニアになってから今年で3年目なのですが、初めてカンファレンスに参加してきたのでレポートに残したいと思います!
拝聴したトークセッション
9月26日
- Keynote: dynamic!
- 高度なUI/UXこそHotwireで作ろう
- そのpreloadは必要?──見過ごされたpreloadが技術的負債として爆発した日
- Railsアプリケーション開発者のためのブックガイド
- Web Componentsで実現する Hotwire とフロントエンドフレームワークの橋渡し
- あなたのWebサービスはAIに自動テストしてもらえる?アクセシビリティツリーで読み解く、AIの『視点』
- 2分台で1500examples完走!爆速CIを支える環境構築術
- Railsによる人工的「設計」入門
- 今改めてServiceクラスについて考える 〜あるRails開発者の10年〜
9月27日
- 2重リクエスト完全攻略HANDBOOK
- 履歴 on Rails : Bitemporal Data Modelで実現する履歴管理
- Sidekiq その前に:Webアプリケーションにおける非同期ジョブ設計原則
- Railsアプリから何を切り出す?機能分離の判断基準
- 非同期処理実行基盤、Delayed脱出〜SolidQueue完全移行への旅路。
- 非同期jobをtransaction内で呼ぶなよ!絶対に呼ぶなよ!(おそらくこちらに追加されると思います。)
- ドメイン指定Cookieとサービス間共有Redisで作る認証基盤サービス
- Rails on SQLite: exciting new ways to cause outages
- rails g authenticationから学ぶRails8.0時代の認証
- Keynote: Building and Deploying Interactive Rails Applications with Falcon(発見次第URLにします)
9月26日
Keynote: dynamic!から始まり、非常に動的なことについて言及されたセッションが多かった印象です。
特に印象に残っているのは
フロント面では'react_router_rails_spa'のgemを公開されているNaofumi Kagamiのセッション高度なUI/UXこそHotwireで作ろうとWeb Componentsで実現する Hotwire とフロントエンドフレームワークの橋渡しのセッションになります。
HotwireのセッションではReactとHotwireの対比やHotwireの拡張可能性を示唆してくださり、VanilaJSで使用できるHeadlessUIのライブラリとHotwireの統合でReactに頼らなくてもReactっぽいことが簡単にできることが紹介されていたりしました。また、Stimulusを使用することでJSXを簡単に統合することができることなども知れてよかったです。
WebComponentsのセッションでは既存のJSフレームワークですでにあるデザインシステムをHotwireの環境にどのように統合するかの方法についてわかりやすく解説いただきました。
デザインシステムをWebComponents化することで再利用性を高めるアイデアがすごく良いなと感じました。
他にも以下3つが印象に残りました。
-
そのpreloadは必要?──見過ごされたpreloadが技術的負債として爆発した日
こちらの発表ではむやみやたらにpreloadをN+1の対策で残していると倍々で生成されるObjectの数が増えていき、メモリを圧迫してしまうというのが大事なポイントだと思いました。コードレビュー時に注意してみていきたいポイントになりそうです。
-
あなたのWebサービスはAIに自動テストしてもらえる?アクセシビリティツリーで読み解く、AIの『視点』
ちょうど業務でPlaywrightなどを用いてE2Eテストを自然言語で実施する環境を整えようとしている最中だったので、AIがどのようにしてWebページを認識しているのかということについて非常に参考になりました。
ポイントとしてはあクセシビリティツリーを使用しているという部分で、特殊フォントやaltの設定などによってはAIからは見えない要素が生まれてしまうということでした。普段あまりアクセシビリティについては考えて実装していなかったので今後はAIを活用する上で注意しようと思いました。
-
Railsによる人工的「設計」入門
AIを活用しての実装などで最近設計について改めて考える機会が多かったので非常に参考になりました。
完成状態から「逆算」して実装する詳細をコードを書かずに洗い出していくのがポイントとお話しされていて、確かにAIでのSpec駆動開発などでも同様のアプローチがなされているのかなと感じました。
また、名前をつけることが大事とお話しされていて、最近読んだ「Clean Architecture 達人に学ぶソフトウェアの構造と設計」と合わせて考えるとコンポーネントに名前をつけることで責務を明確化して境界を引くことでその境界を超えて影響が染み出さないようにするのがいい設計にする上で大切なのかなと感じました。(ここは理解間違ってるかもですが・・・)
9月27日
2日目は非同期処理についてのセッションが多かった印象です。
特に印象に残っているのはやはり非同期処理についてです。
-
Sidekiq その前に:Webアプリケーションにおける非同期ジョブ設計原則
非同期処理を作成する際にその非同期処理は本当に非同期処理として実装するべきなのかについてのポイントについて複数解説をして頂きました。特に大事だなと思ったのは、処理実行スレッド数と待ち時間についてを考えることと処理の冪等性と処理結果をアプリケーションに対してどのように伝えるのかです。長時間実行される非同期処理はできるだけ作らないようにすることでスレッド占有を少なくし、負荷を抑えるということと、webhookかポーリングで非同期実行の結果を取得しにいくというのが自分の頭の中になかったので大事だなと感じました。特に非同期処理で実行しつつ、JavaScriptでポーリングして結果があるかを確認するというのは今までの実装でやってなかった方法なので良さそうと思いました。(同期的に重い処理して待機しなきゃいけないというのを減らせそうな気がしました。)
-
非同期処理実行基盤、Delayed脱出〜SolidQueue完全移行への旅路。
SolidQueueを使用することで非同期処理を速く完了させることが可能になり、RailsWayに、乗れるようになったというお話しでした。特に印象的だったのが、SolidQueueで処理が速くなりすぎることでキューを管理するDBの負荷が大きくなりサービスが落ちてしまうという問題点で、キューイングするストレージの負荷については普段あまり意識せず使用していたのでこの点も注意する必要があると発見できたのがよかったです。
- 非同期jobをtransaction内で呼ぶなよ!絶対に呼ぶなよ!
transaction内でエンキューした時にtransactionが完了してDBにcommitが完了する前に非同期処理がスタートすることでDBに存在しないデータを取得しにいってしまうことでエラーが発生するというものでした。
対策としては「非同期Jobのエンキューをトランザクションの外に記載するようにする」「after_commit_every_whereなどのgemを使用する」
「enqueue_after_transaction_commitをRails7.2以降であれば使用する」というのがありました。
この問題については以前同僚に教えてもらって知っていたのですが、改めてtransaction内でエンキューしないようにするのを徹底しようと思いました。
ほかにも以下2点が印象に残りました。
-
2重リクエスト完全攻略HANDBOOK
2重リクエストを防ぐための様々なTipsを紹介してくださっており、冪等性の担保や、悲観的ロック・楽観的ロック・ワンタイムトークンなど様々あり勉強になりました。
TurboStreamを使用しているとレスポンスが帰ってくるまではサブミットボタンが非活性なのですが、その後にリダイレクト処理等を入れると一瞬ボタンが再活性化したりするのでこのテクニックを使って防いでいきたいと思います。
- Building and Deploying Interactive Rails Applications with Falcon
Pumaの代わりにFalconを使用することでRailsアプリの動作効率を飛躍的に向上させることができるということが紹介されていました。
正直なところ、全編英語だったので1/3ほども内容を理解できていたとは思えませんが、Shopifyで実際に数百万ドルのコスト削減ができたというのにとても驚きました。
また、gemを使用することでAgents.md等を一瞬で作成し、Rails8への導入作業がスムーズに行えるというのにも驚きました。今後はこのパターンでのgemの導入も増えるのかなと感じました。
まとめ
エンジニアになって初めて大規模なカンファレンスに参加することができて非常に学びの多い2日間になったと感じています。
最新技術のトレンドや実際に業務で遭遇した悩み事の解決の糸口を見つけられそうでよかったです。
また、企業ブースも数多く出展しており他社のエンジニアの方々がどういう環境で業務をされているのかというのが知れたことも良かったなと思います。特に今来てるAIツールは何かみたいな話とかもできたのは面白かったです・・・笑
改めて、今回Kaigi on Railsに参加することを快く送り出してくださったチームメンバーの皆さんに感謝です。
ここで得た気づきを日々の業務に活かしていきたいと思います!