Gormのデバッグモード
はじめに
先日、gormの機能にデバッグモードがあると気付いたのでこれの概要と使用するべき場面を紹介します。
目次
- デバッグモードの概要
- 使用したら効果的な場面
デバッグモードの概要
使用方法
使用方法はいたって簡単でgormで宣言した「データベース接続用インスタンス」をデバッグ用に変更するだけです。
例として以下のようなコードがあったとします。
db.go
var (
db *gorm.DB
err error
)
if env == "prod" {
db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
log.Println("Setup postgresql database")
}
if err != nil {
panic("Failed to connect database")
}
db = db.Debug()
return db
上記には下記のような記述があります。
db.go
db = db.Debug()
これだけでデータベース接続用のインスタンスがデバッグモードに変更されます。
例としてこの処理を行うとgormを用いてPOSTリクエストを行ったときに下記のようなものがターミナルに表示されます。
2025/01/26 14:14:28 C:/Users/user/Documents/webapp/product/PortfolioPlatform/backend/repositories/Portfolio_repository.go:27
[6.100ms] [rows:1] INSERT INTO "posts" ("created_at","updated_at","deleted_at","title","description","genres","skills","user_id") VALUES ('2025-01-26 05:14:28.43','2025-01-26 05:14:28.43',NULL,'作品名','作 品の説明文','{"ゲーム開発"}','{"GCP"}',84) RETURNING "id"
ここには以下のものが記述されています
- いつリクエストが呼び出されたか
- どのファイルからの呼び出しがあったか
- 実行時間
- 返却された行数
- 実際に使用されたSQL文
ここでは例としてPOSTリクエストを挙げていますが他のCRUD操作でも表示されるものは同じです。
使用したら効果的な場面
この機能を使用するのに有効な場面としては下記のような場面があげられます。
- 実際にどのような SQL が発行されているのか確認したい
- SQL の実行速度(ミリ秒)や結果件数を見て、クエリの最適化やインデックスの検証をしたい
- クエリの実行元(どのファイル・行で発行されたか)を特定したい
また逆に大規模なシステムなどでは大きい負荷がかかってしまったり、ログが大量に排出されてしまって煩雑になる場面での使用は向かないと思われます。