Upgrade to Pro — share decks privately, control downloads, hide ads and more …

限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】

RND
September 29, 2023

限界ORM!BOOTHとギフトとライブラリ【PIXIV MEETUP 2023 LT】

かつてBOOTHのライブラリは、自分が購入した商品を並べるシンプルな世界でした。そんな世界に<購入せず、所有ができる>ギフトという概念が生まれ、シンプルだった世界は終焉を迎えます。BOOTHのギフト機能実装の際にハマったActiveRecordの落とし穴とその解決策の話です。

RND

September 29, 2023
Tweet

Other Decks in Technology

Transcript

  1. これまで BOOTH 所有者 = 購入者 注文 LineItem 注文と商品 関連テーブル 商品

    購入者 (所有者) * 所有 * * これが... 注文完了かつ、LineItemがあれ 所有してる
  2. ギフト 場合 所有者 ≠ 購入者 注文 LineItem 注文と商品 関連テーブル 商品

    購入者 * 所有(ギフトじゃない時) * * ギフト 受取ユーザー 所有(ギフト 時)
  3. ということ 所有=購入で運用されてきたサービス 所有と購入を分離、影響箇所 ... 注文 LineItem 注文と商品 関連テーブル 商品 購入者

    発送 売り上げ管理 カート pixivFACTORYと 連携 送り状(伝票) 生成 レコメンド アルゴリズム 無限にある
  4. ということ 所有=購入で運用されてきたサービス 所有と購入を分離、影響箇所 ... 注文 LineItem 注文と商品 関連テーブル 商品 購入者

    発送 売り上げ管理 カート pixivFACTORYと 連携 送り状(伝票) 生成 レコメンド アルゴリズム 無限にある it’s 無理
  5. まとめ:教訓 ActiveRecord、なんかすぐ限界になりがち 限界が見えたら 1. まず要件と仕様を見直す。 コードを書かずに解決しよう 2. テーブル設計を見直す。 プロダクトをシンプルに保とう 3.

    ActiveRecord芸を頑張ったり、生SQLもありかも (ユニットテストがしっかり書かれててCIでテストがちゃんと動いてるなら生SQLで別にいいんじゃないか(小声))