Kaigi on Rails 2025の参加レポート

Posted by Ryo Hayakawa on October 08, 2025 · 4 mins read

NaCl東京支社の早川です。
2025年10月26日(金)~2025年10月27日(土)に開催されたKaigi on Rails 2025に参加しました。
弊社からは前田、小倉、早川の3名が参加しました。
本記事では参加レポートとして、私の参加したセッションと感想をまとめました。

Kaigi on Rails 2025

Kaigi on Rails 2025は、東京のJPタワー ホール&カンファレンスで開催されました。

01_photo_booth.jpg

NaClもスポンサーとして参加しております!
02_sponsor.jpg

基調講演 dynamic!

MOROHASHI Kyosukeさん(@moro)によるキーノートです。
03_dynamic.jpg
「動的(ダイナミック)」な開発の重要性を説いた発表でした。
最初から完璧を目指すのではなく、IRBでの対話的開発のように、小さく作ってフィードバックを受けながら改善していくアプローチを、Ruby/Railsの3つのスケール(コード、アプリ、チーム)で実践する方法を紹介されました。
「ハッピーパス」から始めて段階的に機能を追加する考え方、フォース(コードを取り巻く「こうした方が良さそう」という感覚)に注意を払うこと、そして「最もシンプルで、うまくいきそうなもの」にする、といった内容が印象に残りました。
dynamic!はこれまでの諸橋さんの登壇、発表されてきた内容が凝縮されたようなキーノートだと感じました。
変化を受け入れること、変化を楽しむことが重要であるというメッセージは、アジャイルマニフェストに通じる内容で、Railsの思想を再確認できる素晴らしい発表でした。

入門 FormObject

Shu Oogawaraさん(@expajp)による、FormObjectを理解して向き合うことを目的とした、FormObjectの使いどころを体系的に整理した発表でした。
「なぜ必要か」という問いから始め、Rails Wayの2つの仮定(①1つのモデル操作、②1つのライフサイクル処理パターン)に反する時が使いどころと明快に定義されていました。
具体的には「モデルを操作しない」「2個以上のモデル操作」「ライフサイクル処理の分割」の3パターンに分類して紹介されています。
「FormObjectって具体的にどういうタイミングで使えばいいのだろう」という疑問に対するわかりやすい解答であり、まさに入門者にとって「知りたかった~」と言える内容でした。

Railsアプリケーション開発者のためのブックガイド

Masayoshi Takahashiさん(@takahashim)による、Railsアプリケーション開発者におすすめの書籍紹介です。
Ruby/Rails、Linux/UNIX、ネットワーク、セキュリティ、データベース、設計・アーキテクチャなど、幅広い分野の書籍が紹介されました。
また、なぜ本を読むべきかという点にも触れられており、書籍は文化の継承、時間を超えて知識を共有できる優れたツールであると語られていました。
AIの時代でも本は重要で、特に詳しくない領域では何を聞けばいいか分からないため、本から学ぶ方が効率的であるとお話しされていました。
紹介される本がどれも魅力的で、「本を読まねば!」と感じる内容でした。
『必要な部分だけ読んでも良い』『完璧に読まなくても良い』というメッセージは「自分には難しいかも…」と、躊躇してしまう気持ちが楽になる、素敵なメッセージだと感じました。

あなたのWebサービスはAIに自動テストしてもらえる?アクセシビリティツリーで読み解く、AIの『視点』

Yusuke Iwakiさん(@YusukeIwaki)による、AI時代のブラウザテスト自動化に関する発表です。
Browser-useやPlaywright-MCPといった最新ライブラリを解析し、生成AIがWebページを理解する仕組みを調査されたということです。
重要なのはアクセシビリティツリーで、独自実装のアコーディオンやアイコンフォントなど、人間には問題なくてもAIには認識困難なパターンを実例で紹介されていました。
また、Capybaraを用いたAI自動テストでもスクリーンショット方式からアクセシビリティベースに改善することで、速度・精度ともに大幅な向上が期待できるそうです。
アクセシビリティが単なる配慮でなく、AI自動テストの実用性に直結するという視点が新鮮でした。
E2EテストをAIが自動で行ってくれる、自然言語でテストコード生成できる未来というのは開発者としてとても楽しみだと思いました。

Railsによる人工的「設計」入門

Yasuko Ohbaさん(@nay)による設計を体得できない人を強制的に設計へ導く「逆算メソッド」の提案です。
初心者がやりがちな「マイグレーションから順に作る」アプローチではなく、完成形から逆算して必要な要素を洗い出す手法を、CSVインポート機能を例に解説されました。
完成したシステムを先に想像し、ゴール(本質)を見定め、「それには何が必要か」を逆算的に考える、デザインパーツを仮置きしながら全体像を構築する、といった具体的な手法が紹介され、設計を教える側にも、知る側にも学びのある発表でした。
「設計=手順の説明」になってしまうというありがちな罠を指摘されていて、大変共感しました。
ActiveRecordの関連やパラメータ構造など、デザインパーツを意識的に使いこなすことの重要性を再認識しました。

2重リクエスト完全攻略HANDBOOK

ShoheiMitaniさん(ShoheiMitani)による2重リクエストの回避に関する発表です。
サブミットボタンの連打、登録画面のリロードなど、2重リクエストの発生原因から始まり、フロントエンド、バックエンド、フロントとバックエンド協調の防御策が紹介されました。
基本的にはサブミットボタン制御 + PRGパターン + 排他制御 + テーブル設計で十分なケースが多いが、発生時の被害とメリットを想定して適切なアプローチを選択すべきということでした。
実際に発生すると致命的な問題になりかねない2重リクエストについて、改めて考える機会になる発表だと感じました。

履歴 on Rails: Bitemporal Data Modelで実現する履歴管理

Makoto Chibaさん(@hypermkt)による履歴管理とBitemporal Data Modelの紹介です。
従来のバージョン型や有効期間型では実現困難だった「ある時点の状態再現」と「後からの履歴修正」を、2つの時間軸(有効期間とシステム期間)を持つBitemporal Data Modelで解決されたということでした。
ActiveRecord::Bitemporalというgemを使えば、複雑なSQLを意識せずRailsで実装可能だそうです。
ただし、データ肥大化や実装の複雑化というデメリットもあり、「本当に必要か」の見極めが重要というお話でした。
実際の運用課題(timestamp型からdate型への変更など)も紹介され、実践的な知見が得られる発表でした。

階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜

Yuhi-Satoさん(@yuhi)による階層構造データによるパフォーマンス改善事例の紹介です。
フォルダ階層などでよく使うAdjacency List(parent_id方式)は実装が簡単ですが、祖先・子孫の取得で大量のN+1が発生してしまいます。
解決策として、全経路を保持するClosure Tableへ移行することで、最大931倍の高速化を達成できたそうです。
実験データと実装例も豊富で、階層構造の設計判断に役立つ実践的な内容でした。
Rails 7.2からのwith_recursiveによるRecursive CTE活用や、規模に応じた手法選択の指針が紹介され、学びのある発表でした。

非同期jobをtransaction内で呼ぶなよ!絶対に呼ぶなよ!

Yuto Urushimaさん(@alstrocrack)による、『たまに謎の非同期jobエラーが起こる』、Rails非同期job実装の落とし穴に関する発表です。
transaction内で非同期jobをエンキューすると、DBのCOMMITよりも先にjobが実行されActiveRecord::RecordNotFoundが発生する問題を解説されました。
対策として、jobをtransaction外に記述、after_commit_everywhere gem利用、Rails 7.2以降のenqueue_after_transaction_commit設定の3つが紹介されました。
Rails 7.2以降であればenqueue_after_transaction_commitというずばりそのものな新機能を活用することで、チーム全体のコード品質向上につながるという、有益な知見が得られました。

ドメイン指定Cookieとサービス間共有Redisで作る認証基盤サービス

@kokuyouwindさん(@kokuyouwind)による、認証基盤サービスの実装方法についてのお話です。
認証基盤とは何なのか?どういうときに必要なのか?という初心者にもわかりやすい説明付きで、セッション共有によるシンプルなアプローチが紹介されました。
興味深いのはgem(leaner_authenticatable)による共通化です。各プロダクトでの認証ロジックの重複を排除し、設定を渡すだけで使える抽象化レイヤーを提供しているということです。
OpenID Connectを「自社サービスには過剰」と判断し、よりシンプルな方式を選んだ点が印象的でした。要件に応じた適切な技術選定の重要性を再認識しました。

rails g authenticationから学ぶRails8.0時代の認証

Shinichi Maeshimaさん(@willnet)による、Railsの認証ジェネレーターの解説です。
Rails 8.0で追加された認証ジェネレーター(rails g authentication)の仕組みが詳しく解説され、認証機能の実装とセキュリティについて学ぶ内容でした。
生成されるコードを読み解きながら、has_secure_passwordの仕組み、bcryptによるパスワードハッシュ化、セッション管理の考え方など、認証の本質を学べる内容でした。
特に印象的だったのは、専用のSessionモデルを作る理由(不正ログインの検知や一括無効化)や、authenticate_byによるタイミングアタック対策など、セキュリティを考慮した実装の数々です。
「何を使えばOK」という答えはなく、継続的な学習が必要だという指摘は重要な視点だと感じました。

基調講演 Building and Deploying Interactive Rails Applications with Falcon

Samuel Williamsさん(@ioquatix)によるキーノートです。Ruby用Webサーバー「Falcon」に関する内容でした。
2017年から「Rubyの並行処理を効率的、スケーラブル、エレガントに」という目標を掲げ、ファイバーベースの並行処理を実現してきた取り組みの集大成です。
Shopifyでの本番導入では1日300億リクエストを処理し、数千台のサーバー削減に成功したとのことでした。
発表ではFalconのRails対応について丁寧に解説されました。
Active Recordのファイバーモード設定、Async Jobによる高速なバックグラウンドジョブ処理、HTTP/2対応のAsync Cable、systemdのプロセス準備プロトコルサポートやKubernetesでのデプロイ方法まで、実用的な内容が盛りだくさんでした。
特にPumaと比較して200%以上のスループット向上というベンチマーク結果には驚きました。
ライブコーディングでは、Claudeに『Kaigi on Railsゲーム』を作らせるデモが披露されました。
最後に「Rails 8を完全サポート。Shopifyスケールで実証済みのFalconで次世代のWebアプリケーションを構築しましょう」というメッセージで締めくくられ、RubyとRailsの今後の可能性を感じるキーノートでした。

まとめ

昨年に引き続き、今年も現地参加することができました。
会場では参加者の方々と直接お話しする機会に恵まれ、Ruby/Railsコミュニティの温かさと熱量を改めて実感しました。
セッションで紹介された新しい取り組みやチャレンジに触れ、私自身も新たなことに挑戦したいという気持ちが強く湧いてきました。
次回開催は2026年10月16日~17日で、会場は渋谷となるそうです。
04_next_info.jpg
来年の開催も楽しみです!