👻

Kaigi on Rails 2022 セッションレポート #4

2022/10/28に公開

株式会社TOKIUMの小口です!この記事では、10月21日(金)-22日(土)の2日間に渡り開催されたKaigi on Rails 2022にて、聴講したセッションの中でも印象に残ったモノをいくつか紹介していきます。

本記事でご紹介するセッションは、以下の2つです。

森羅万象に「いいね」するためのデータ構造

解説

クックパッド株式会社のソフトウェアエンジニア・Natsuko Nadoyamaさんによる、あらゆるテーブルに対して共通の「いいね」機能を実装できるデータ構造の紹介セッションです。

結論から言うと、ポリモーフィック関連を用いることで森羅万象に「いいね」できるデータ構造を達成されていました。
しかしながら、ここに至るまでは下記のように紆余曲折あったそうです。

  1. 最初は各「いいね」対象ごとに「いいね」テーブルを独立して作った(旧「いいね」テーブル)
  2. 開発が進むにつれ、「いいね」対象は増えるが「いいね」に求められる挙動は共通であることがわかった
  3. 上記を受け、ポリモーフィック関連をつかって「いいね」対象に簡単に「いいね」を持たせられるデータ構造を新たに作った(新「いいね」テーブル)
  4. 旧「いいね」テーブルから新「いいね」テーブルへの移行を戦略的に行った

感想

弊社サービスでは「いいね」を直接取り扱いませんが、新規実装においてどのようなデータ構造を採択していくか、という考え方について参考になる点がとても多かったです。
その中でも、次の3点が特に印象的でした。

  • 最初に変更に耐えうるシンプルなデータ構造を採択していたことが功を奏したこと
    開発が進むにつれて仕様が変わることを見越しておくのは、基本的でありながら絶大な効果を発揮するものだと再認識できました。
    もしこれが、逆にポリモーフィック関連の構造から単独のテーブル構造に切り分けるような必要が生じた場合を想像すると身震いがしてきます...。
  • 結果としてポリモーフィック関連が採用されたこと
    私は比較的STIを採用することが多く、逆にポリモーフィック関連はほとんど使ったことがなかったため、ポリモーフィック関連の特徴を含めてとても参考になりました。
    また、開発者として常に複数の選択肢を手札に持っておく意識をしていきたいと思うこともできました。
  • データ構造の移行をサービスを止めずに達成されたこと
    データの移行が必要になる局面は案外多いと感じており、実際に戦略的な解決をされたお話はとても参考になるものでした。
    特に、一時的に新旧両方のテーブルにデータを永続化するという手法は私にとって新鮮でした。

大量塩基配列登録申請システムができるまで

解説

フリーランスのプログラマ・Keita Urashimaさんによる、大量塩基配列という10GBもあるファイルをパースしつつアップロードできるようにするまでの軌跡を紹介するセッションです。

解説は大きく分けて4つの問題を順番に解決する構成をとられていました。

  1. 大容量のファイルをどうアップロードするか
    RailsのActive Storageを使用してダイレクトアップロードを行うことでストレージサービスに丸投げして解決
  2. アップロードだけでなく、当該ファイルをパースする必要が生じた
    ブラウザのStreams APIを用いて細切れで読み込むことで、ファイルアップロード完了を待たず少ないタイムラグ・メモリ消費にて解決
  3. パース時に画面が固まってしまう
    パース処理専用のWeb Workersを立ち上げ、メインスレッドによる画面描画などを妨げずにパース処理を行うことで解決
  4. アップロード時に行われるハッシュ値計算が遅い
    Active Storageはすでに高速なハッシュ値計算ができていたが、WebAssemblyを用いることでさらに高速化することに成功

感想

このセッションはそもそもRailsへのフォーカスではなくWeb全般の観点で紹介されている点で印象的でした。
(以下、Kaigi on Rails 2022 トップページより抜粋)

また、名前の通りRailsを話題の中心に据えるカンファレンスではありますが、広くWebに関すること全般(例えばフロントエンドやプロトコルなど)についてもカバーすることで参加者の知見を深め、また明日からの仕事に役立てていただければと考えています

普段触っているRailsというフレームワークばかりを視野に入れず、Web全般に目を向けて精進していかねばと刺激をいただくことができました。

内容についても、Streams APIやWeb Assemblyといった普段関わりのない概念が価値を発揮しているサービスを知ることができ、とても新鮮でした。
今後も視野を広げて様々なサービス・コードに触れていくことで見聞を広げていきたいと感じました。

全体を通して

Kaigi on Railsに限らずカンファレンス自体への参加が初めてだったのですが、どのセッションも大変興味深く、気づいたら1日目すべてのセッションを聴講してしまっていました。
ひとつの会社でもくもくとコードを書いているだけでは絶対に味わうことができない、Railsの広い世界の片鱗を感じ取ることができてとても楽しかったです!
ぜひ来年も参加し、まだ見ぬコードに触れたいと思っています。

最後に、カンファレンスの開催・運営にご尽力いただいた皆様には頭が上がりません。本当にありがとうございました!

株式会社TOKIUM テックブログ

Discussion