サイトを運営していると、レスポンスを早くするにはどうすればいいかと常に考えますね。 サーバーの性能を上げたり、ネットワーク環境を良くしたりとハードウエアでの対応も重要ですが、実際に動いているコードの最適化が一番大切な所ですね。 123ishはRailsで出来ていますが、コードの最適化にBullet というジャムを使っています。 Rails の便利なオブジェクト関連性の定義によって、実は一つで済むようなSQL呼び出しが、関連するレコードをSQLから一つ一つ呼び出すという、とても時間のかかる実装に陥ってしまうことがあります。 一括読読み込みをすれば2回ですむSQL呼び出しが、そうでないと11回もSQL呼び出しをすることになってしまうという簡単な例と共に、このN+1クエリ問題についてRailsガイドに詳しく載っています。 このN+1クエリ問題を見つけてくれる便利なジャムがBullet です。 また、何時でも一括読み込みをすれば良いのでもなく、むしろ要らない読み込みはメモリーの浪費と逆にレスポンスを遅くしてしまいます。 この無駄な一括読み込みもBullet によってレポートされます。つまりBullet によって N+1クエリ問題の発見 無駄な一括読み込みの発見 が出来るのです。 Bulletジャムの導入方法 BulletジャムをGemfile に記述 新しい環境ファイル optimization.rbの設定 ジャムをoptimizationの時にのみ取り込み 実行 1. BulletジャムをGemfile に記述 2020年7月現在でバージョンは6.1.0でした。 2. 新し環境設定 Bulletを実行する環境を、optimizationとして普段使っているdevelopmentから分けます。development.rbをコピーしてobpimization.rbとしてconfig/environments に作り、以下のような設定を施します。 Bullet.enable = tureはBulletジャムを使って最適化を行うことを可能にします。 Bullet.alert = tureは問題点をjavascript のalertを使って表示することを可能とします。 Bullet.bullet_logger =…