
プロダクト開発本部の渡辺です。昨年に引き続き、「Kaigi on Rails 2025」に参加してきました。
kickflowは今年もシルバースポンサーとして協賛しており、次回の開催時にはブース出展も検討しております。
本記事では、会場レポートや個人的に気になったセッションなどをご紹介いたします。
「Kaigi on Rails」はRuby on Railsの話題を中心としたテックカンファレンスです。
コアコンセプトは「初学者から上級者までが楽しめるWeb系の技術カンファレンス」 ということもあり、登壇者の年齢層も幅広い印象があります。
Kaigi on Rails当日の前後にもたくさんの関連イベントが開催されており、RubyやRuby on Railsのコミュニティの賑わいが感じられました。
会場はJP TOWER Hall & Conferenceという場所でした。東京駅からも近く、アクセスが良いです。




2日間で40近くのセッションやLTが発表されました。
今回もこの中から気になったものをいくつかピックアップしてみようと思います。
Day1
RailsのPostgreSQL 18対応
要約
Ruby on RailsがPostgreSQL 18に対応した際の要点は、バージョン互換性の確保と新機能への対応の2点です。
バージョン互換性のための対応
-
クエリキャンセルの仕様変更への対応
- 問題: PostgreSQL 18で、クエリをキャンセルする仕組みのセキュリティが強化されましたが、古いRailsの依存ライブラリ(
pggem)がこれに対応していませんでした。 - 解決策: 関連ライブラリを更新し、Rails側のキャンセル処理を修正して問題を回避しました。
- 問題: PostgreSQL 18で、クエリをキャンセルする仕組みのセキュリティが強化されましたが、古いRailsの依存ライブラリ(
-
パーティション表の仕様変更への対応
- 問題: PostgreSQL 18で、パーティション表の
UNLOGGEDというオプションが廃止されました。 - 解決策: この機能を使っていたRailsの内部テストコードを修正し、新しい仕様に合わせました。
- 問題: PostgreSQL 18で、パーティション表の
新機能への対応
-
SQL統計機能の改善
- PostgreSQL 18でSQLの統計情報がより賢く集計されるようになり、Railsもその恩恵を受けられるようになりました。
-
仮想生成列のサポート (Rails 8.1)
- PostgreSQL 18の新機能である「仮想生成列」(データを保存せず、アクセス時に値を計算する列)をサポートしました。
- これにより、他のデータベースと同じシンプルな記述でこの機能が使えるようになりました。
感想
Hondaさんのセッションは昨年に続き、拝聴しました。Ruby on Railsコミッターならではの視点から語られるテーマは、いつも大変勉強になります。昨年はGithub Issuesの立て方や作法について詳しく解説されていました。
今回のテーマはPostgreSQL 18への対応でしたが、関連するプルリクエストをセッションの最後にマージするという演出が斬新で、とてもかっこよかったです。
このプルリクエストでは、バージョン互換性の確保と新機能への対応がなされています。個人的に注目したのは仮想生成列のサポートで、Rails 8.1から利用できるようです。弊社プロダクトkickflowの「分析レポート」のような管理者向け機能での活用や、ディスク容量の節約といった効果が期待できそうです。
Railsによる人工的「設計」入門
要約
ソフトウェア設計における初心者の課題は、設計を「実装の手順」と誤解し、コードから考えてしまうことです。これにより、抽象的な設計ができず、ベテランとの認識にズレが生じます。
この解決策として、「逆算」という設計手法が提案されていました。
逆算による設計のポイント
- 完成形から考える: まずユーザーが使う最終的なシステムを具体的にイメージします。
- 本質的なゴールを特定する: そのイメージから、システムが達成すべき最も重要な機能を見つけます。
- ゴールから逆算する: 「ゴール達成に何が必要か?」を問いかけ、必要な要素(部品)を洗い出します。
- 思考をシンプルにする:
- 短い名前を付ける: 抽象的な要素に簡単な名前を付けて、考えやすくします。
- 仮置きする: 選択肢が多い部分は一旦一つに決めて、全体の流れを整理します。
この「逆算」アプローチにより、初心者は実装からではなく、システムの全体像から設計するスキルを身につけることができます。
感想
アプリケーション設計に関するセッションを拝聴しました。特に、ジュニアメンバーに設計を教えるための考え方が見事に言語化されており、参考になる部分が多いと感じました。
セッションでは、設計の初心者が陥りがちな「実装の手順から考えてしまう」という課題に対し、「完成形から逆算する」というアプローチが提示されました。この考え方は、ジュニアメンバーの教育だけでなく、AIを活用した現代の開発プロセスにおいても重要な示唆を与えてくれると感じています。
というのも、AIにコーディングの仕様書や実装計画を作成させるには、人間(ジュニアメンバー)に教えるのと同様に、抽象度の高いゴールを明確に伝える必要があるからです。
kickflowではスペック駆動開発に取り組もうとしており、コーディングにAI(Claude/Codex)を活用していますが、まさにその「AIに渡す実装計画」の質を高める上で、「逆算」の思考法が強力な武器になると感じました。
Day2
Range on Rails ― 「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
要約
chocoZAPの予約システムの課題は、24時間いつでも予約できるため、「他ユーザーの予約」「店舗休業」「設備故障」といった複数の条件が絡み合い、予約可否の判定ロジックが複雑化してしまうことでした。これにより、直近の予約状況を一覧で表示する機能の実装も困難になっていました。
この解決策として、「多重範囲型」を用いた期間の計算が採用されました。
「範囲」を使ったロジック単純化のポイント
- 「期間」として捉える: 予約できない全ての条件を、「開始から終了までの期間」という一つのデータとして扱います。
- 「差集合」で算出する: ユーザーが確認したい全期間から、予約できない期間の合計を引き算(差集合)することで、予約可能な時間帯を導き出します。
- 複数の期間を一つにまとめる:
- 課題: 予約可能な時間帯が複数に分断されてしまう。
- 解決策: 複数の期間を一つのデータとして扱える「多重範囲型」を使い、効率的に計算します。
この「多重範囲型」アプローチにより、開発者は複雑な条件分岐から解放され、読みやすくシンプルなコードで予約システムを実装することが可能になりました。
感想
数学的な「集合」の概念を用いて複雑な課題をシンプルに解決しており、まさにタイトル通りの分かりやすい設計でした。
ひと口に「予約システム」と言っても、在庫や時間枠の捉え方で多様なアプローチがあるのだと、改めて実感しています。昨年のKaigi on Rails 2024で拝見したfalcon8823さんの発表『推し活のハイトラフィックに立ち向かうRailsとアーキテクチャ』で語られたロジックも大変勉強になりましたが、今回も新たな知見を広めることができました。
「技術負債にならない・間違えない」権限管理の設計と実装
要約
Webサービスの権限管理について、役割(例: admin?)に依存した実装は、変更に弱くアンチパターンであると指摘していました。
その解決策と効果の要点は以下の通りです。
解決策:「権限」ベースの設計
-
「何ができるか」で判断する
if user.admin?(役割)ではなくif can_create_project?(権限)でコードを書きます。- これにより、役割の追加・変更があっても、修正箇所が最小限に済みます。
-
権限を4つの要素に分割して管理する
- 複雑な権限を「対象」「役割」「操作」「条件」に分けてモジュール化します。
- この設計により、非エンジニアでも権限設定を理解できるほどシンプルになります。
導入効果
- 不具合と問い合わせがゼロに: 1年間、権限に関するバグや社内からの問い合わせがなくなりました。
- 生産性の向上: 開発効率が大幅にアップしました。
- UI表示も一貫して制御: サーバー側の権限情報をフロントエンド(Next.js)でも利用し、画面の表示制御も一貫して行えるようになりました。
感想
権限管理の設計に関するセッションを拝聴しました。
提示されたサンプルコードが明快だっただけでなく、セッション全体の構成も非常に分かりやすく、内容と伝え方の両面で大変参考になりました。
特に印象的だったのは導入効果の大きさです。従来、ユーザーの権限に関する問い合わせのたびにエンジニアがソースコードを読んで対応していた状況が、この設計の導入によってPdMなどの非エンジニアでも理解・判断できるようになったとのお話でした。この一点だけでも、この設計がいかに大きなインパクトをもたらすかが伝わってきました。
今回で2回目の参加となりました。昨年はRails 8.0のリリース直前ということもあり、関連するテーマで大きな盛り上がりを感じましたが、今年は大きなトピックが一段落した分、より地に足のついた実用的なテーマが多かったように感じます。
昨今のトレンドであるAIを絡めたセッションは少なかった一方で、純粋にRailsフレームワークと向き合い、現場で得た知見やTipsを共有するセッションが多く、開発の核心に迫る議論が活発に行われていました。
また、若手エンジニアの方々が具体的な課題に対する解決策を共有されていたのに対し、経験豊富なベテランエンジニアの方々はRailsを通じた開発体験やマインドセットといった、より高い視座からの発表が多く、その対比も非常に興味深かったです。
最後に、素晴らしいカンファレンスを企画・運営してくださったスタッフの皆様、有益な知見を共有してくださった登壇者の皆様、そして現地で交流してくださったすべての参加者の皆様に心から感謝申し上げます。来年はさらに大きな会場で、より国際的なカンファレンスを目指すとのこと、今から開催が待ち遠しいです!
kickflowでは、バックエンドエンジニアを大募集しています。
ご興味のある方は、ぜひ採用サイトをご覧ください。
コメント