今回は、オリジナルアプリを作成する中で、N+1問題を検出する「bullet」というGemを使ってみました。
実際にどうやって使うのか、どんなふうに活用できるのか紹介します。
目次
#1. bulletとは?
そもそもbulletというGemはどんなライブラリなのか、公式の説明を抜粋しました。
The Bullet gem is designed to help you increase your application's performance by reducing the number of queries it makes. It will watch your queries while you develop your application and notify you when you should add eager loading (N+1 queries), when you're using eager loading that isn't necessary and when you should use counter cache.
僕なりの理解ですと、bulletはアプリケーションのパフォーマンスを向上させるように考えており、実行するクエリの回数を減らすことを目的としています。
開発中のアプリケーションのクエリを監視して、不要な読み込みをしている場合に通知します。
(他にも読み込みを追加で必要な場合やカウンターキャッシュを使用する場合も通知するらしいですが、今回はN+1問題をへらすことのみに着目します)
Google翻訳がわかりやすい、、!!
ということでアプリケーションを開発しているときに、無駄なクエリの読み込みしている場合に通知してくれるとか。
めっちゃ便利なので、積極的に使っていきましょう。
#2. 具体的な使い方
まずGemfileに記述します
group :development do
gem 'bullet'
end
このとき、本番環境で通知させないように必ず「group :development do」に入れるのが大事です。
そして、ターミナルで以下を実行します
$ bundle install
インストールが完了したら、以下のコマンドでbulletが使用できるようになります。
$ bundle exec rails g bullet:install
これで自動的にN+1問題が発生している箇所を特定し通知してくれるようになりました。
具体的には、N+1問題が発生しているページに遷移するとアラートが表示されます。
これでN+1問題によるサーバーの負荷をへらすことができます!
#3. 参考
下記の記事を参考にさせていただきました。
https://techtechmedia.com/nplusone_query-bullet-rails/