Kaigi on Rails 2024に参加してきました!

こんにちは。@akitoshigaです。

10/25に有明にて行われたKaigi on Rails 2024のDay1に有志のみんなで行ってきました!

当日の様子

 

エムスリーキャリアは今年スポンサーとして初の参加になりました。

会場ではエムスリーキャリアのロゴを掲載していただきました!

 

スポンサーブースもすごい盛り上がりを見せていました。



エムスリーキャリアはスポンサーノベルティとしてステッカーを用意しました。

こちらもたくさんの来場者の方に、お手に取っていただきました!

 

会場のホールはとても大きかったのですが、それにもかかわらず基調講演は満員になるほどの盛り上がりでした。

Vladimir Dementyevさんの基調講演『RAILS WAY, OR THE HIGHWAY』

セッションレポート

以下に自身が参加したセッションのレポートを一部掲載いたします。

Railsの仕組みを理解してモデルを上手に育てる - モデルを見つける、モデルを分割する良いタイミング 

オブジェクトを作成する際は以下を活用した方がよい。

  •  イベント型モデル
    • 『〇〇する』で表せるモデル
      • 適切なイベント型モデルを探し出せると、責務が適切なモデル設計が行える
      • モデルなのでRailsWayに沿っている
  • PORO(Play Old Ruby Object)
    • ActiveRecordを継承せずテーブルとも結びつかないクラス
    • Railswayから外れそうなな境界にあるのでチームでルールを策定するのがオススメ
    • クラス名には返却するオブジェクトの名前を名詞でつける
    • このルールに基づいていればモデルにしたくなったときに移行が容易になる
  • Serviceは作らない方が良い
    • Railsはレイヤー分割を減らして密結合にしている
    • 密結合することにより以下所に書いたコードが複数の役割を担当して認知負荷を減らしている
    • 新たなレイヤーを増やすことはRailsの利点をスポイルしている
    • Serviceをつくらないことで設計判断に迷いがなくなる
      • Serviceの定義が人によってバラバラになりがちなので、ならばいっそないほうが良いという考え
  • モデルを分割するタイミングはコードの量で判断しないほうがいい
    • そのまま書くのがつらくなったとき、かつそのときに良い分割方法があるときに分割する
    • 時間と共に良いモデルは変わるので、最初から最適化しようとしないのがオススメ

 

Serviceを作るなとよく耳にしていましたが、その理由を解説してもらえて良かったです。

再三にわたってServiceを作るなとおっしゃっていたのが印象的でした。

speakerdeck.com

 

Sidekiqで実現する長時間非同期処理の中断と再開

  • ジョブの停止にはデータや処理の不整合など懸念点が多い
  • 以前はタイミングをはかってSidkickを手動停止していたがつらい
  • Sidekiqのプロセス停止を検知して任意のタイミングで非同期処理を停止、それを安全に再開出来る仕組みを構築する

中断処理

  • Sidekiq設定ファイルにイベントハンドリングを設定する
  • Sidekiqの停止を検知したら例外を送出して処理を中断するメソッドを定義する
  • 中断処理はperformメソッド内の区切のよいタイミングにいれることでデータの整合性を保つことができる

再開処理

  •  Redisでジョブの進捗を管理するようにする
  • 再開時に中断したジョブを検索して再実行する
  •  CSVファイルなど行のデータを処理する場合は行番号を保持するようにする
  •  再開時に処理済みの行はスキップする処理を実装
  •  中断時に一時ファイルを退避させるにはGCSが最適

2024/7/3に公式からSidekiq Iterationが導入された

  • コールバックをつかえるので中断・再開時の柔軟な個別処理が実装しやすくなる
  • 現状はβ版だけど、今後導入する可能性がありそう

 

そもそも非同期処理を中断したり再開したりするのはなるべく避けるべきだと思っていたので実装方法がとても参考になりました。

例外を利用するのはなるほどと思いました。

speakerdeck.com

 

Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?

  • 自然言語システムテストを書くことを目指す
  • 人間のテストのステップをそのまま生成AIに渡すとコンテキストもあるべき状態も情報が欠落してしまう
  • 人間から見たときは同じでも実装が異なるとテストは壊れる
  • 生成AIへ視覚や操作によるフィードバックを持たせることでこのギャップを埋める
  • 自然言語Rubyコードを出力してもらい、それによりフィードバックを得る
  • デモではUIが同じだけどCSSセレクタが違うものに対して自然言語で書かれたテストを実行
  • InputToolを使用すれば能動的なテストが可能になり 途中でミスをしても自動で軌道修正が可能

 

E2Eテストは壊れやすいのでこれが実用段階に進めば革新をもたらしそうだと思いました。生成AIが独自でフィードバックサイクルを回せるのが本当にすごいと思いました。

speakerdeck.com

 

さいごに

どれも実践に裏付けられた大変学びの深いセッションでした。

ここで培った知見を活かして、エムスリーキャリアのより良いプロダクト開発につなげていきたいと思います!