RailsでN+1問題を検出する - Bullet

f:id:utouto97:20210704221944p:plain

RailsでN+1問題を検出するBullet

N+1問題とその解消方法について、以前まとめました。
そんなN+1問題を検出するライブラリがRailsにはあります。
Bulletというライブラリです。

github.com

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による通知です。

f:id:utouto97:20210724212035p:plain

終わり