こんにちは。@akitoshigaです。
10/25に有明にて行われたKaigi on Rails 2024のDay1に有志のみんなで行ってきました!
当日の様子

エムスリーキャリアは今年スポンサーとして初の参加になりました。
会場ではエムスリーキャリアのロゴを掲載していただきました!


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

エムスリーキャリアはスポンサーノベルティとしてステッカーを用意しました。
こちらもたくさんの来場者の方に、お手に取っていただきました!

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

セッションレポート
以下に自身が参加したセッションのレポートを一部掲載いたします。
Railsの仕組みを理解してモデルを上手に育てる - モデルを見つける、モデルを分割する良いタイミング
オブジェクトを作成する際は以下を活用した方がよい。
- イベント型モデル
- 『〇〇する』で表せるモデル
- 適切なイベント型モデルを探し出せると、責務が適切なモデル設計が行える
- モデルなのでRailsWayに沿っている
- 『〇〇する』で表せるモデル
- PORO(Play Old Ruby Object)
- ActiveRecordを継承せずテーブルとも結びつかないクラス
- Railswayから外れそうなな境界にあるのでチームでルールを策定するのがオススメ
- クラス名には返却するオブジェクトの名前を名詞でつける
- このルールに基づいていればモデルにしたくなったときに移行が容易になる
- Serviceは作らない方が良い
- モデルを分割するタイミングはコードの量で判断しないほうがいい
- そのまま書くのがつらくなったとき、かつそのときに良い分割方法があるときに分割する
- 時間と共に良いモデルは変わるので、最初から最適化しようとしないのがオススメ
Serviceを作るなとよく耳にしていましたが、その理由を解説してもらえて良かったです。
再三にわたってServiceを作るなとおっしゃっていたのが印象的でした。
Sidekiqで実現する長時間非同期処理の中断と再開
- ジョブの停止にはデータや処理の不整合など懸念点が多い
- 以前はタイミングをはかってSidkickを手動停止していたがつらい
- Sidekiqのプロセス停止を検知して任意のタイミングで非同期処理を停止、それを安全に再開出来る仕組みを構築する
中断処理
- Sidekiq設定ファイルにイベントハンドリングを設定する
- Sidekiqの停止を検知したら例外を送出して処理を中断するメソッドを定義する
- 中断処理はperformメソッド内の区切のよいタイミングにいれることでデータの整合性を保つことができる
再開処理
- Redisでジョブの進捗を管理するようにする
- 再開時に中断したジョブを検索して再実行する
- CSVファイルなど行のデータを処理する場合は行番号を保持するようにする
- 再開時に処理済みの行はスキップする処理を実装
- 中断時に一時ファイルを退避させるにはGCSが最適
2024/7/3に公式からSidekiq Iterationが導入された
- コールバックをつかえるので中断・再開時の柔軟な個別処理が実装しやすくなる
- 現状はβ版だけど、今後導入する可能性がありそう
そもそも非同期処理を中断したり再開したりするのはなるべく避けるべきだと思っていたので実装方法がとても参考になりました。
例外を利用するのはなるほどと思いました。
Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?
- 自然言語でシステムテストを書くことを目指す
- 人間のテストのステップをそのまま生成AIに渡すとコンテキストもあるべき状態も情報が欠落してしまう
- 人間から見たときは同じでも実装が異なるとテストは壊れる
- 生成AIへ視覚や操作によるフィードバックを持たせることでこのギャップを埋める
- 自然言語でRubyコードを出力してもらい、それによりフィードバックを得る
- デモではUIが同じだけどCSSセレクタが違うものに対して自然言語で書かれたテストを実行
- InputToolを使用すれば能動的なテストが可能になり 途中でミスをしても自動で軌道修正が可能
E2Eテストは壊れやすいのでこれが実用段階に進めば革新をもたらしそうだと思いました。生成AIが独自でフィードバックサイクルを回せるのが本当にすごいと思いました。
さいごに
どれも実践に裏付けられた大変学びの深いセッションでした。
ここで培った知見を活かして、エムスリーキャリアのより良いプロダクト開発につなげていきたいと思います!