コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

『銀座Rails #26』をみたよメモ

【オンライン開催】銀座Rails#26@リンクアンドモチベーション - connpass をZoomで視聴したのでそのメモ

各発表の感想

※資料スライドは見つけたら貼ります。


大量データでもサクサク動くRailsになるために

スライドはなさそうなので、発表のメモだけ

発表メモ

SaaSのプロダクトが大企業にも注目され大手顧客対応としてパフォーマンス向上が課題になってきており、そこに関しての取り組みに関しての体験談のお話。

ActiveRecordのValidation問題

validationで他のモデルを参照していると一気に更新処理をかける場合、1件ごとに確認がかかるのでN+1がかかる。 この場合は、一気に処理できるような記述に切り替えると良い。

callback関数の問題

dependnet: destory などがあると一個ずつdeleteがかかるので重くなる。 こちらも、一括で処理できるような処理をする。

ActiveRecordのオブジェクトがでかい問題

何も指定しないと該当レコードのすべてのカラムを撮ってきてしまう。そのためメモリを逼迫してしまう。

selectでカラム名を指定することで参照する時間を減らしたり、pluckでarrayにすることで早くすることができる。

n+1問題

関連レコードをn+1で取得してしまうことがあるので、includeなどを使う。

あぶり出すときにはbulletなどを活用する。ただし鵜呑みにしすぎるとよくないので参考程度にするといい。

DBへのindex問題

リリース重視で開発すると、indexを使わない状態になりがち。

見つけ方としては

  1. slow.logをみる
  2. EXPLAINで検証しつつ、適切なindexをつくる

その他問題になった箇所の問題

  • 仕様を変える、設計をかえる

パフォーマンス改善でやっていて感じること

コードだけで解決できる問題は少ない。DB設計を変更しないといけないケースが3割。

感想

  • 約9ヶ月かけてすごいパフォーマンス改善をした地道なレベルの話
  • activerecord-importにvalidationがあったとは知らなかった…ので勉強になった。

関連リンク


これからの Ruby と今の Ruby について

感想

  • Ruby3.0の新しい機能のひとくち紹介的なスライド
  • 型定義とかどういう風になっていくのかすごく楽しみになった
  • 新しい機能を見ていくと、Rubyのカッコ省略を空スペースで表現できるのがかなり混乱の種だな…と思った。

関連リンク


タイトル

感想

  • DDDのコアドメインに関する話とそれを基軸にRailsでどういう改善活動をしたかのお話
  • ドメイン駆動設計」の「(コア)ドメイン」に重きがおかれており、ドメインってURLの前の部分でしょ?みたいな認識度合いの人に読んでもらうには良さそうな形の内容でした。
  • ここから発展して「MVCのModelとドメインモデルというのは切り口が違う」とか「ドメインが重要なのはわかったけどなんで密結合だと駄目なの?」とか「ドメインの処理とActiveRecord一緒にしちゃ駄目なの?」とかを整理してしゃべれるといいのかもしれない。
  • 疎にするということはコードが増える、コードが増えるということは動作を保証するための作業も増える、その際にRubyはテストコード頼りだが、静的型付けは型でもカバーしてくれる。そういうところが疎に切り離す壁になっている部分は多いなと感じる。
  • 作中で話が上がっていたが「ユースケース」という形に着目してRailsに乗ってみる開発に関してはしたことがあるので、業務の話がでない体験談レベルで切り出してアウトプットしてみたくなりました。

関連リンク


全体を通しての感想

  • DDDの話とRuby3の新しい機能というRailsの直球なお話というよりも取り巻く内容の話が濃い回でした。
    • Ruby3の型が登場する話と、静的型付けじゃない言語は不得手という話が出てきて、地味なコラボレーションがある回でもあるきがしました
  • 自分自身もDDD+Railsには色々思うところがあり、実践できる場面では実践してきたしまだまだ学びが足りない部分もあるので補強してブログなりにしたためていきたいと思いました。
  • 家事の合間に聞けるのですごいありがたいリモート開催。最近懇親会参加できないのを悔やみまくってますが、リアルでできるようになっても中継があると嬉しいなと思います。。

関連リンク