Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

できたで! めでたしめでたし

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

ActiveRecordでJOIN….一応できる!

Slide 8

Slide 8 text

しかし・・・ ● 今後検索したいカラムが増えるとひたすらコードが煩雑になりそう ○ 特に#selectに渡す中身は集計に使いたい条件にもなるので複雑になりがち ● 集計データのロジックは他でも再利用したいが、複雑に組み立てられた AR::Relationオブジェクトは使いにくい ○ #group なども呼ばれているため、追加で scoped chainして条件を増やそうとしたときに意図しない 動作をさせてしまう可能性も・・・ ● そもそも1か月後に自分がこのコードを読んで理解できる自信がなくなってくる 😇😇😇😇😇 そんなコードで大丈夫か? 引用:エルシャダイ無料倉庫より

Slide 9

Slide 9 text

そこで summary view 一番良いのを頼む

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

他にも色々あるけど時間が無いので割愛 ● VIEWのmigration管理にはScenicというGemがあるよ ● パフォーマンス上の問題が出そうならマテビューとかインデックスチューニングが必 要だよ ● VIEWは普通にSQLで叩けるのでRedash等BIツールとも相性が良いよ ● Rails側のコードでないと欲しい情報が導出できないような条件とは相性が悪いよ (そもそもSQLと相性が悪い) ● summary view以外にもVIEWが活躍できるケースは色々あるよ ○ ActiveRecordから使いやすいような VIEWを作るのを意識すると夢が広がる

Slide 14

Slide 14 text

自己紹介 ● BPS株式会社で受託開発チームをやってます ○ TechRachoという技術ブログをやってます。良かったらみてね! ● 銀座Railsの運営やってます ○ 次回10/29(金)の発表者、まだ募集中です!!ぜひご登録を! ■ 15分・30分枠があります。微調整なども応相談可です👍 ○ Twitter: @GinzaRails からどうぞ