😽

GORM Genで解決:interface{}を使わない100%型安全なGo ORM

に公開

はじめに

私は今まで、interface{}の多用による型安全性の欠如を懸念して、GORMの選択を避け、型安全なクエリを生成するORMを選択していました。

// 従来のGORMの問題例
var users []User
db.Where("age > ?", 18).Find(&users) // コンパイル時に型チェックができない

GORM Gen は、この問題を完全に解決する「100% Type-safe DAO API without interface{}」を実現するコード生成ツールです。

GORM Genの特徴

  • 100%型安全: interface{}を使わない完全な型安全性
  • コード生成: データベーススキーマから自動的にGoコードを生成
  • 直感的なAPI: SQLライクな記述でクエリを構築

型安全性の実現

GORM Genを使用すると、以下のような型安全なクエリが書けます:

// 生成されたクエリを使用
u := query.User

users, err := u.WithContext(ctx).
    Where(u.Age.Gt(18)).           // age > 18 - 完全に型安全
    Where(u.Status.Eq("active")).  // フィールド名の typo も検出
    Order(u.CreatedAt.Desc()).
    Find()

従来のGORMと比較して:

  • コンパイル時エラー検出: フィールド名の typo や型の不整合を事前に発見
  • IDE支援: オートコンプリートとリファクタリングが完全にサポート
  • 型安全な結果: 戻り値も完全に型付けされている

さいごに

実践では利用したことがありませんが、GORMとの併用もできるようなので、既にGORMを使っているプロジェクトに関わることがあれば、試してみたいと思いました。


参考: GORM Gen 公式ドキュメント

Discussion