スキップしてメイン コンテンツに移動

GoでGORM入門:CRUD

GoでGORM入門:CRUD

Go実践とORMの概要

Go言語はシンプルで高速な実行速度が特徴ですが、データベース操作を行う際にSQLを直接書くと、コードが煩雑になりがちです。そこでORM(Object‑Relational Mapping)を利用すると、構造体とテーブルをマッピングし、SQLを意識せずにデータ操作が可能になります。Goで人気のORMライブラリにGORMがあります。

GORM基礎とインストール

GORMはGoで最も広く使われているORMで、gorm.io/gormgorm.io/driver/sqlite(またはMySQL, PostgreSQL等)をインストールします。

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

インストール後は、以下のようにDB接続を行います。

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }
    // 以降の操作は db 変数を使用
}

gorm.ModelとAutoMigrate

GORMでは gorm.Model を埋め込むことで、ID、CreatedAt、UpdatedAt、DeletedAt のフィールドを自動で持つ構造体を作成できます。これにより、レコードの管理が簡単になります。

type User struct {
    gorm.Model
    Name  string
    Email string
}

テーブルを自動生成するには AutoMigrate を呼び出します。

db.AutoMigrate(&User{})

これで users テーブルが作成され、必要なカラムが揃います。

CRUD操作:Create, First, Where

データの作成は Create メソッドで行います。

user := User{Name: "Alice", Email: "alice@example.com"}
db.Create(&user)

レコードを取得する際は First を使い、条件付き検索は Where で行います。

var u User
db.First(&u, 1) // ID が 1 のレコードを取得

db.Where("email = ?", "alice@example.com").First(&u)

これらのメソッドは内部でSQLを生成し、実行します。開発者は構造体とメソッド呼び出しだけで済むため、コードが読みやすくなります。

データベース操作とSQL抽象化

GORMはSQL抽象化レイヤーとして機能し、複雑なクエリもメソッドチェーンで表現できます。例えば、複数条件での検索やソート、ページングは以下のように書けます。

var users []User
db.Where("name LIKE ?", "%a%").
   Order("created_at desc").
   Limit(10).
   Offset(20).
   Find(&users)

このように、ORMを使うことでSQLの構文を意識せずにデータベース操作が可能になり、開発速度と保守性が向上します。Go実践においては、ORMを上手く活用することで、ビジネスロジックに集中できる環境を構築できます。

この記事はAIによって作成されました。

コメント