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

それVIEWでできるよ!(Kaigi on Rails _2021_ new LT)

それVIEWでできるよ!(Kaigi on Rails _2021_ new LT)

2021/10/10開催のKaigi on Railsプレイベント Kaigi on Rails _2021_ newのLT枠で発表した内容です。

https://kaigionrails.doorkeeper.jp/events/127339

37b01da9150c1e789f35771b06d36890?s=128

Masato Mori

October 10, 2021
Tweet

More Decks by Masato Mori

Other Decks in Programming

Transcript

  1. それVIEWでできるよ! @morimorihoge (Masato Mori) 2021/10/10 Kaigi on Rails _2021_ new

    LT枠
  2. ある日の機能リクエスト ECサイトを運用しているサイトで 「こんな感じの顧客別売上集計機能が欲 しいんだけど・・・」と相談される

  3. None
  4. できたで! めでたしめでたし

  5. ありがとう!特定の商品カテゴリに絞って出せるかな? 検索項目が一つ増えるだけだし、         簡単だよね?(禁句)

  6. 簡単? • 思ったよりRelationが遠いぞ・・・ • 今までは注文テーブルの合計金額を出せば良かったけど、今度は注文明細を合計 しないと同一注文中の別カテゴリ商品の金額も計算されちゃうなあ • そもそもこんなに複雑なJOIN、ActiveRecordでどう書くんだっけ・・・?

  7. ActiveRecordでJOIN….一応できる!

  8. しかし・・・ • 今後検索したいカラムが増えるとひたすらコードが煩雑になりそう ◦ 特に#selectに渡す中身は集計に使いたい条件にもなるので複雑になりがち • 集計データのロジックは他でも再利用したいが、複雑に組み立てられた AR::Relationオブジェクトは使いにくい ◦ #group

    なども呼ばれているため、追加で scoped chainして条件を増やそうとしたときに意図しない 動作をさせてしまう可能性も・・・ • そもそも1か月後に自分がこのコードを読んで理解できる自信がなくなってくる 😇😇😇😇😇 そんなコードで大丈夫か? 引用:エルシャダイ無料倉庫より
  9. そこで summary view 一番良いのを頼む

  10. こんなVIEWを作る(CREATE VIEW文) ※VIEWはTABLEと同様にSELECTできる

  11. 集計しやすい状態になったVIEWができる

  12. VIEWはActiveRecordオブジェクトとしても使える

  13. 他にも色々あるけど時間が無いので割愛 • VIEWのmigration管理にはScenicというGemがあるよ • パフォーマンス上の問題が出そうならマテビューとかインデックスチューニングが必 要だよ • VIEWは普通にSQLで叩けるのでRedash等BIツールとも相性が良いよ • Rails側のコードでないと欲しい情報が導出できないような条件とは相性が悪いよ

    (そもそもSQLと相性が悪い) • summary view以外にもVIEWが活躍できるケースは色々あるよ ◦ ActiveRecordから使いやすいような VIEWを作るのを意識すると夢が広がる
  14. 自己紹介 • BPS株式会社で受託開発チームをやってます ◦ TechRachoという技術ブログをやってます。良かったらみてね! • 銀座Railsの運営やってます ◦ 次回10/29(金)の発表者、まだ募集中です!!ぜひご登録を! ▪

    15分・30分枠があります。微調整なども応相談可です👍 ◦ Twitter: @GinzaRails からどうぞ