Bulletをテスト環境で実行してN+1を調査する

公開日時

[[config/environments/test.rb]]にbullet設定を追加。

bulletを入れるとテスト実行時間が長くなってしまうのでCI(Github Action)実行時は有効にしないようにした。

Rails.application.configure do
  if ENV["CI"] != true
    config.after_initialize do
      Bullet.enable = true
      Bullet.bullet_logger = true
      Bullet.raise = false
    end
  end
end

[[spec/support/bullet.rb]]に以下を追加する。

そのままだとログに追記されていくので、テスト実行のたびにログファイルを消すようにした。

# frozen_string_literal: true

RSpec.configure do |config|
  if Bullet.enable?
    config.before(:suite) do
      bullet_log_path = Rails.root.join("log/bullet.log")
      File.write(bullet_log_path, "")
    end

    config.before do
      Bullet.start_request
    end

    config.after do
      Bullet.perform_out_of_channel_notifications if Bullet.notification?
      Bullet.end_request
    end
  end
end

これでrspecでのテストを実行し、N+1が存在する場合は[[log/bullet.log]]にログが出力される。

参考


Related #ruby

VSCode + PrettierでRubyのコードを自動フォーマットする

@prettier/plugin-rubyを利用

VSCodeでRails環境を整える

ショートカット大事

VSCodeでRubyのコード補完と関数ジャンプができるようにする

ruby拡張とsolargraph拡張を入れる

Action Mailerのインターセプタを使ってバウンスメールのチェックを行う

AWS SESを使っている場合はバウンス対応をやっておかないとサービス停止になってしまう

open-uriでhttpリクエストを送信する際のtimeout設定

モンキーパッチを当てた

docker-composeでRails6環境をrails newしたら途中で止まってしまった

--skip-gitオプションを追加する必要があった