OSS探訪GitHubでログイン

ActiveRecordやMongoidのN+1、不要なeager loading、counter cache候補を開発中に検出して通知する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
7,337
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/08/29
ページ内ナビ

概要

BulletはRuby/Railsなどの開発中にデータベースアクセスを監視し、N+1 query、使われていないeager loading、counter cacheで減らせるCOUNT queryを検出するgemです。ログやブラウザ通知に加え、Sentry・Slack・OpenTelemetryなどへ警告を送る構成も選べます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

N+1 queryを検出して必要なeager loadingを示す

ActiveRecordやMongoidのassociation accessを監視し、同じ関連を繰り返し取得するN+1 queryを検出します。ログには対象model・associationと、includesなどで改善するための手掛かりが表示されます。

出典:[1]

不要なeager loadingとcounter cache候補も検出する

先読みしたassociationが実際には使われていない場合や、関連件数の取得をcounter cacheで減らせる場合も別のdetectorで通知できます。必要なdetectorだけを有効・無効にできます。

出典:[1]

開発ログからSentry・Slack・OpenTelemetryまで通知先を選べる

Bullet log、Rails log、browser consoleのほか、Sentry、Honeybadger、Bugsnag、AppSignal、Airbrake、Rollbar、Slack、OpenTelemetryなど複数のnotification backendを設定できます。

出典:[1]

向いている用途

Rails/Mongoidのクエリ効率問題を開発・テスト段階で早く見つけたい場合に向く

画面表示やrequestを動かした時点でORM由来のquery patternを確認し、productionへ出す前にN+1や過剰な先読みを修正したいWeb applicationに適します。Bullet.raise = trueを使えばtest failureとして扱う構成も可能です。

出典:[1]

導入前の確認

8.2.0はActiveRecord 7未満・Mongoid 8未満をサポートしない

8.2.0のCHANGELOGはActiveRecord 7未満とMongoid 8未満のsupportを削除したと明記しています。gem自体はRuby 2.7以上を要求するため、既存applicationへ更新する場合はORMとRubyのversionを先に確認してください。

出典:[2][3]

基本はdevelopment/staging向けで、runtime切替はthread-safe APIを使う

READMEはdevelopmentやstagingなどでの利用を推奨しています。またBullet.enableをruntimeで切り替えるのではなく、thread-safeなBullet.skip・pause・resumeを使うよう注意しています。

出典:[1][2]

参考にした公式資料

  1. [1]Bullet 8.2.0 source snapshot README(2026-10-04)
  2. [2]Bullet 8.2.0 changelog(2026-10-04)
  3. [3]Bullet 8.2.0 gemspec(2026-10-04)
編集部からの補足

Bulletは本番APMの代替ではなく、開発中にORMのquery patternへ即座にフィードバックを返す道具として使うと効果が分かりやすいです。8.2.0ではActiveRecord 7+ / Mongoid 8+が前提なので、古いRails系ではversion固定も確認してください。

3ステップで試す

  1. 1

    Rails applicationへBullet 8.2.0をdevelopment用に追加する

    Bullet 8.2.0はActiveRecord 7以上を前提にします。既存Rails applicationのdevelopment groupへversionを固定して追加します。

    cd your-rails-app && bundle add bullet --version 8.2.0 --group development
  2. 2

    Bulletの標準設定を生成する

    upstream READMEのgeneratorでdevelopment設定を追加します。generatorの質問でtest environmentにも入れるか選択できます。

    cd your-rails-app && bundle exec rails g bullet:install
  3. 3

    導入versionと有効状態を確認する

    applicationを起動する前に8.2.0が読み込まれていることを確認します。実際のN+1検出はdevelopment requestを動かしてlog/bullet.logなどで確認します。

    cd your-rails-app && bundle exec rails runner 'puts "Bullet #{Bullet::VERSION} enabled=#{Bullet.enable?}"'
公式READMEで確認

成長

成長の推移 · 直近30日

7,337 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
0
Open PR
6

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る
Stars
7,337
Forks
457
Watchers
67
Open Issues
0
Contributors
168
所有者種別
User
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/08/29

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?