Railsで開発をしているとぶち当たるN+1問題を教えてくれるgem bullet

Railsで開発をしていると最初にぶち当たる問題があります。俗にいうN+1問題です。

これは簡単にいうと一覧表示などでデータを100件表示する場合、100回SQLを発行してしまう問題です。

コンソールログなどを見てると、すぐに気づきます。

たとえばある一覧画面を表示するとこんな感じでSQLのログが表示されます。

スクリーンショット 2015 05 25 21 59 21

これを解決すると以下のような感じになります。

スクリーンショット 2015 05 25 22 01 12

これはジョインして取得すれば1回で発行できるデータを1レコードづつ取得しているために起こる問題のようです。

で、これは普通に開発を行っていると、気をつけてないとすぐに発生してしまうので、やっかいなのですが、このbulletというgemは、それを画面上に問題ありだよと表示してくます。

こんな感じ

N+1

そしてログではこんな感じでどのプログラムの何行目かを表示してくれます。

N+1 2

これはなかなか重宝するgemなので、入れておいて損はないと思います。

導入方法はこれまた簡単で、

group :development, :test do
 gem 'bullet'
end

gemを開発に追加し、bundleします。

※Rails4からbundle installじゃなく、bundleでOKになったようです。

その後、configファイルに以下のように記載します。

config/environments/development.rb

config.after_initialize do
  Bullet.enable = true
  Bullet.rails_logger = true
  Bullet.add_footer = true
end

これでRailsを再起動すればOKです。
まだ導入していない方は是非

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です