トラブルが起きたとき、昔ながらの方法が役立つこともある
Wayne Truong from Houston, TX, CC BY 2.0, via Wikimedia Commons
こんにちは。株式会社kickflowプロダクト開発本部の小本です。
Bulletは何の問題点も検出しないが実際に動かすと何故か遅い
Rails業界ではBulletなどのクエリの問題点を検出するツールが普及していますが、それらも万能ではありません。時には生のクエリログが解決の糸口になることがあります。
普通にRailsアプリケーションを作ると、development環境では以下のようなクエリログが出力されるようになっています。
例:
CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."tenant_id" = '6fa44ea2-cbbd-4901-980b-abbe3e0f66cc' AND "users"."id" = '4344b765-595e-4ee7-bf91-a627cbfce622' LIMIT 1
MonthlyActivityLog Load (6.5ms) SELECT "monthly_activity_logs".* FROM "monthly_activity_logs" WHERE "monthly_activity_logs"."tenant_id" = '6fa44ea2-cbbd-4901-980b-abbe3e0f66cc' AND "monthly_activity_logs"."year" = 2025 AND "monthly_activity_logs"."month" = 3 AND "monthly_activity_logs"."user_id" = '4344b765-595e-4ee7-bf91-a627cbfce622' LIMIT 1 /*action='show',application='Kickflow',controller='tenant'*/
↳ app/controllers/api/v1/user_controller.rb:4:in 'Api::V1::UserController#show'
↳ app/models/monthly_activity_log.rb:47:in 'MonthlyActivityLog.create_log'
しかし、標準のクエリログは、
- 人間が読むためにフォーマットされているため機械的に処理しにくい(JSONでくれ!)
log/development.log に他ログと一緒に出力されるので、クエリログを発見しにくい。
- 全てのアクションのログが1ファイルに出力される(調べたいのは特定の重いアクションだけなのだ。)
という問題があります。そこで、この記事ではクエリログをJSON形式で出力する方法を説明します。
続きを読む