RailsでN+1問題を検出する - Bullet
RailsでN+1問題を検出するBullet
N+1問題とその解消方法について、以前まとめました。
そんなN+1問題を検出するライブラリがRailsにはあります。
Bulletというライブラリです。
Bulletを実際使ってみる (Rails)
N+1問題を発生させる (TodoとUser)
以前にN+1問題をまとめた記事のTodoとUserのN+1を検出してみます。
utouto97.hatenablog.com utouto97.hatenablog.com
N+1を発生させるので、問題解消前のincludes
がない状態です。
def index @todos = Todo.all end
<% @todos.each do |todo| %> <div> <%= todo.title %> : <%= todo.user.name %> </div> <% end %>
Bulletをインストール
Bulletはgemで簡単にインストールできます。
まず、Gemfileのgroup :development
の中に、gem bullet
を書きたします。
group :development do gem 'bullet' end
その後、bundle install
を行います。
$ bundle install
インストールが終わったら、以下のコマンドでbulletの初期化をします。
$ rails g bullet:install
development環境へ自動で追加されます。
加えて、test環境へも追加するかどうか聞かれますので、適当に答えておきます。
上のコマンドを実行すると、config/environments/development.rb
に数行追加されています。
(Bulletの設定です。)
config.after_initialize do Bullet.enable = true Bullet.alert = true Bullet.bullet_logger = true Bullet.console = true # Bullet.growl = true Bullet.rails_logger = true Bullet.add_footer = true end
ここまでで、準備が整いました。
N+1を検出するとアラート発生
ここまでで、ブラウザからアクセスすると以下のアラートが表示されます。
これがBulletによる通知です。
終わり