サーバーサイドエンジニアの千葉です。
メドピアがゴールドスポンサーで協賛している技術カンファレンス「Kaigi on Rails 2022」が10月21日と22日の2日間で開催されました。私自身も2日間通してオンライン参加してきたので、聞いたセッションの中からいくつか簡単に紹介したいと思います。
RBSとSteepで始める型のあるRails開発とその運用
静的型解析を導入したRailsアプリケーションでの運用事例やメンテナンスコストを下げるための工夫、発生した課題についての発表です。
「RBSから受ける恩恵>RBSを導入するコスト」を実現するために、以下のような取り組みをプロジェクトで行っているとのことです。普段の開発で行うことをRBSにも導入する感じですね。
- ドキュメントを整備することで学習コストを抑える
- 自動更新・スクリプトを活用することで手作業を減らす
- CIを活用し不正な状態が入らないように管理する(steep checkが通る、RBSが最新である等)
静的型解析を実際のアプリケーションに導入・運用していくには課題点がいくつか残っているそうですが、バグを検知する仕組みの1つとしてマイクロサービスへの導入を検討してみても良さそうと感じました。
今後はuntypedを減らす取り組みを行っていきたいとのことでしたので、それらで得られた知見もぜひ聞いてみたいですね。
7つの入金外部サービスと連携して分かった実践的な”状態管理”設計パターン3選
外部サービスと連携した際の「状態管理」の設計パターンについての発表です。
外部サービスを使用することで実装コストは低くなる一方、複数システム間の「状態管理」の難易度は上がってしまいます。このセッションではテーブル設計上での要件や不整合が発生するケース、不整合が発生した場合の監視・リカバリ方法について、3つのパターン(リアルタイム型・事前予約型・完全非同期型)を踏まえながら解説してくださっています。
DBトランザクションやエラー検知・リカバリ方法といったパターン毎に抑えるべきポイントや実際のテーブル設計例を挙げていただいたことで、外部サービスをあまり利用したことがない人でも実装イメージがつきやすいと感じるセッションでした。
3つのパターンのうち、事前予約型の「状態管理」を理解していれば他の2パターンはその応用であるという点も面白いですね。
森羅万象に「いいね」するためのデータ構造
似ているけど少し異なる「いいね機能」を実装するにあたり、失敗したデータ設計や開発中の悩み・苦しみ、それらを解決していくリファクタリングの道筋についてのセッションです。
リファクタリング前は商品・トピック・クチコミなどそれぞれで「いいねテーブル」を作成していましたが、ポリモーフィック関連を用いたリファクタリングを行ったことで変更に耐えられるデータ構造になったそうです。リファクタリングに伴うデータの移行手順についても解説されており、より実践的な内容だと感じました。
リファクタリングに取り組む予定があるプロジェクトに参画中の方は特に有意義なセッションだったのではないでしょうか。
歴史あるプロジェクトのとある技術的負債を隙間プロジェクトの 210 PullRequests で倒しきった話
巨大な技術的負債解消への取り組み方、変更リスクとコストを下げた方法についての発表です。(個人的にタイトルで一番気になっていたセッションです。)
具体的には、7年間育った歴史あるRailsアプリに開発初期から存在していたオレオレフレームワーク「Crud Controller」を撃退した方法を以下の4つのポイントに絞って解説してくださっています。
- スクリプト化
- 変更リスクの軽減
- チーム戦
- モチベーションの維持
Crud Controllerとは
- includeするとクラスメソッドcrud_controllerが生える
- アクションメソッドをよしなに定義してくれる
- search_one、scopeなどよしなにメソッドが生える
- メソッドをオーバーライドしてレスポンスをカスタマイズできる
Crud Controllerのデメリット
- コールバックの順序に依存が発生し、バグが生まれやすい
- メタプロで可読性が低く、学習コストが高い
- メソッドのオーバーライド等により、認知コストが高い
技術的負債を抱えているプロダクトは多いと思うので、それらを打倒するための計画やモチベーションの維持方法など参考になったという方も多いセッションだったのではないでしょうか。
とりあえず抑えておきたい、Railsでの「テストの内容」の考えかた
テストコードを書く上で抑えておきたいテストで扱うべき「内容」に関しての発表です。
具体的には、テストケースを作成するためのノウハウ「テスト技法」の内の「同値分割法」と「境界値分析」について例題を踏まえながら解説してくださっています。
自身もどこまでテストを書くべきなのか分からなくなるタイミングがあるため、非常にためになるセッションでした。「同値分割法」と「境界値分析」は取り入れやすい技法であるため、日頃から頭に入れておくと良さそうですね。
終わりに
Kaigi on Railsのコアコンセプトが「初学者から上級者までが楽しめるWeb系の技術カンファレンス」 ということもあり、比較的参加しやすいカンファレンスだと感じました。発表者・参加者からもRailsに対する熱量が伝わってくるイベントでもあり、ぜひ来年も参加したいと思いました。「カンファレンス参加はハードルが高そう、、、難しそう、、、」と思っている方でもぜひ積極的に参加してみてください。
メドピアでは一緒に働く仲間を募集しています。
ご応募をお待ちしております!
■募集ポジションはこちら
https://medpeer.co.jp/recruit/entry/
■開発環境はこちら