自分にやさしく学ぶプログラミング

プログラミング学習記録、備忘録

Kaigi on Rails 2022に参加しました!(2日目レポート )

本日は、Kaigi on Rails 2022 の2日目でした!
引き続き面白くためになるトークが満載でした・・・!
以下レポートです。

1日目レポート

Kaigi on Rails 2022に参加しました!(1日目レポート )

2日目の各トークについてのレポート、感想など

入社数ヶ月の newbie が稼働 7 年超の Rails プロジェクトに"型"を導入して見えた世界 by Fu-ga

新人としてプロジェクトへの型導入を進められた経験をもとに、「newbie こそ型定義するべき」というご自身の考えや、型導入を実際にどのように提案していったかなどを詳しく説明されていました!
型自体の恩恵によってコードを読み解きやすくなっていっただけでなく、型定義を通してプロジェクトの全容把握ができていったり、gem の実装を読むことに抵抗がなくなっていったり、興味の裾野が広がったりと、いろいろな良いことがあったというお話でした!
また、型導入を提案するにあたって、小さく少しずつを意識して、できるだけ他の人に影響がないよう配慮したり、型エラーを全て無くすことより型の充実による開発体験向上の方にフォーカスしたりというポイントを説明してくださいました。
Ruby の静的型を気軽に始めるために、とても参考になる発表でした!

sassc-rails を利用している我々は、Sass の@import の非推奨化をどのように乗り越えていくか by Hirotaka Miyagi

Sass の@import は削除予定であり、@use に切り替えていく必要があるというお話でした!
@use は DartSass のみの機能なので、sassc-rails(LibSass を採用してる)を使っている場合は別のものに差し替える必要があるそうです。
また、実際 gem を差し替えてみたところ、一部 scss の記述を修正しないといけないところもあったそうで、それらについても解説してくださいました。
私は@import が使えなくなること自体恥ずかしながら知りませんでした・・・!実際移行する時参考にしたいと思います!

実践 Rails アソシエーションリファクタリング by Kei Shiratsuchi

巨大な Rails アプリケーションの中で使われていたポリモーフィック関連づけを中間テーブルに置き換えるリファクタリングのお話でした!
すでに運用されているプロジェクトであるため、ダウンタイムなしで置き換えていく必要があったので、新しいデータ構造を追加しつつ、古いデータ構造も残してお互いのデータが同期するような状況を作ったり、抜け漏れ防止のために旧データ構造のインスタンスが作られたことを検知できるような仕組みを作って修正を進めているとのことです。
大規模アプリのデータ構造を修正するのはとても大変そうですが、修正手順が詳しく解説されていました。
自分には想像つかない規模のお話な気がしましたが、実践的な内容でとても参考になりました!
と同時に、やはりそういうことが必要になる前に早いうちにリファクタリングしていきたいと改めて思いました・・・!

ルビイストの目で見た PostgreSQL のデータ型 by Andrey NOVIKOV

似ているけどちょっと違う、RubyRails)と PostgreSQL のデータ型の違いを、一つ一つ丁寧に解説してくださいました!
ちょっと理解し切れなかった部分もありましたが、かなり重要で役立つ内容だったと思います。
恥ずかしながら知らないデータ型もいくつかあったので、 PostgreSQL 改めて勉強したいです!
また、現在私が参加してるプロジェクトで JSON 型のカラムがあるのですが、発表の中で JSON をモデルっぽく扱える store_model gem が紹介されていました。こちらもチェックしたいと思います!

モノリシック Rails アプリケーションをモジュラモノリスへ移行している note の事例 by Hiroya Shimamoto

アプリの大規模化により開発効率が低下しており、高凝集・疎結合なシステムにするために、Packwerkというgemを活用する取り組みのお話でした!
Railsアプリのトップディレクトリ直下にpackagesというディレクトリを置いて、その中でpackageごとにapp, lib, configなどを置いたり、依存関係を管理できるようになるとのことで、マイクロサービス化するよりも手軽にサービスを分割していけるようでした。
ファイルの移動だけで分割していけるのとても良さそうだったので、Packwerk覚えておきたいです!

ActiveRecord::Relation ってなに? by osyo

ActiveRecord で where メソッドなど使用した時に返される ActiveRecord::Relation について、その仕組みをライブコーディングしながら説明してくださいました!
「where しただけでは SQL 発行されない」くらいは理解してたのですが、中身を追いかけてみるとメタプロの技術が駆使されてとても複雑なことが行われているようです。
特に、scope は呼び出した時に初めてクラスメソッドとして定義されて使えるようになるというのが驚きでした・・・!
かつてここらへんのコードを自分で追いかけようとした記憶があるのですが、あまりに複雑で全く理解できず、結局あきらめてしまいました。今回、実際に読み解いていく過程を見せていただけたのでとても参考になりました。アーカイブ出たら改めて動画見ながら一緒にコードリーディングしてみたいです!

十年ものアプリのセッションストレージをクッキーから Redis に移行するときに気にしたこと、それでも起きてしまったこと by hogelog

セッションストレージを CookieStore から Redis に変更する際の流れや、発生した問題についてのお話でした!
セッション数 1000 万オーダーという状況でその管理方法を変更するということで、色々検討し準備の上取り組んだにも関わらず、設定の間違いや非ログインユーザーのセッション情報などにより、一発で上手くはいかず苦労されたという内容でした。
私はこれまでセッション関連の詳細実装やインフラまで考慮が必要な場面に出会したことなく、あまりこの辺の知識ないのですが、考えてみれば rails new しただけでインフラなしでセッションストレージ使えるのって凄いことですね・・・。
改めてセッションのこと学び直したい!

今年できたチームの生産性を向上させたプラクティスの紹介 by Yuki Akamatsu

チームのタスク完了率が低い状況を改善するための取り組みのお話でした!
色々試したなかで、設計を議論するチャンネルの開設、ペアプロ、設計ドキュメントの作成という3つのプラクティスが特に効果的だったとのことでした。
ペアプロは常にやらなくても良い、設計ドキュメントはあくまで一時的な「当時の記録」としての扱いにするなど、チームの状況に合わせて柔軟にルールを設定して取り組まれていたのが印象的でした。
おそらく多くの開発チームが同じような悩みを抱えていると思うし、私が所属するチームにも当てはまるお話で、とても参考になる発表でした!

とりあえず抑えておきたい、Rails での「テストの内容」の考えかた by しんくう

自動テストのいいところは「仕様通りに動くことをいつでも確認できる」ということで、それを確認できるテストコードを書くためにテスト技法を活用しようというお話でした!
発表の中では、同値分割法と境界値分析を使ってテストを書く方法が説明されていました。 具体的な例題をもとに説明されていたので、イメージしやすかったです。
テスト技法は個人的に勉強していたものの、実際テストコード書くときにあまり使えていないので、これを機会に普段の開発の中でも活用していきたいと思います!

自分だけの小さな Selenium「Olenium」を作って始める、ブラウザ自動化技術の理論と実践 by ikuma-t

E2E テストなどでお馴染みの selenium のようなブラウザ自動化ツールについて、その仕組みを理解するために自分だけの「Olenium」「OlayWright」を作ってしまったというお話でした!
各自動化技術の概要説明から始まり、プロトコルや仕様の詳細解説のほか、それを活用して作ったブラウザ操作プログラムのデモをしていただきました。
自動化の仕組みって今まで全く気にしてこなかったので完全にブラックボックスでしたが、例えば webdriver の場合は起動してエンドポイントを curl で叩くとブラウザが操作できたりと、思ったよりシンプルな仕組みなんだということがわかりました。
理解するために作ってみるというムーブ、すごく尊敬します!見習わなければ!

All About Queueing In Rails Applications by Nate Berkopec

サービスの速度改善を考える上で、所定の処理を実行するのにかかる時間だけでなく、ジョブがキューの中に存在する時間を計測しないといけないというお話でした!
Sidekiqのキュー、WEBサーバー上のリクエストのキュー、GVL(Rubyのスレッドの話?ちょっとわからなかった・・・)のキューという3つのキューそれぞれについて、その特徴やキュー時間の計測方法などを解説していただきました。
Sidekiqのキューの分け方について、ドメイン(例えばメール配信、データ移行とか)で分割するのではなく、SLAに基づいた分割(例えば30秒以内、5分以内、1時間以内、1週間以内とか)の方が実用的だし、アラートの設定もしやすいというお話があり、なるほどと思いました!
WEBサーバー上の話やGVLについてはあまり理解できなかったので、改めて勉強せねば・・・。

全体を通して

初級者にもわかるお話しからかなり上級者向けのお話まで、色々な発表を通して多くの学びを得ることができました!日々の開発や勉強に活かしていきたいと思います。
運営の皆様、発表者の皆さま、スポンサーの皆様、素敵なイベントをありがとうございました!
次回は物理開催を目指しているとのことで、すごく楽しみです🙌