6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gorm とは? 〜Goのデータ操作を自動化する最強のロボット〜

Posted at

gorm は、Go 言語でデータベースを簡単に操作できるようにする ORM(Object-Relational Mapping)ライブラリ です。

通常、Go でデータベースを操作するには SQL を直接書かなければなりませんが、gorm を使うと Go のコードだけで直感的にデータの保存・検索・更新・削除(CRUD)を実行できるようになります。

要するに、gormとは、データベースと Go の間を仲介してくれる便利なツールです。

gormを例えるなら…

あなたは 最先端のAI研究所の所長です 🔬
日々、大量のデータを管理し、必要に応じてデータを保存・更新・取得 しなければなりません。

そこで、最強のデータ管理ロボット「gorm」 を開発しました!

gorm は、あなた(Goアプリ)の指示を受け取り、
データベースという広大なデータセンターにアクセスし、
最適なSQLを自動生成&実行 してくれます。

🎩 AI研究所の所長(Goアプリ) vs データ管理ロボット(gorm)

あなたの指示(Goコード) データ管理ロボット gorm の仕事(SQL変換)
「新しいユーザーを登録してくれ!」 INSERT INTO users (name, email) VALUES ("John", "john@example.com");
「IDが1のユーザー情報を取ってきて!」 SELECT * FROM users WHERE id = 1;
「ユーザーの年齢を更新してくれ!」 UPDATE users SET age = 31 WHERE id = 1;
「このユーザーを削除して!」 DELETE FROM users WHERE id = 1;

つまり gorm を使うことで、SQL を書かずに直感的な Go のコードだけでデータベース操作ができる ようになります!

gormのインストール

ロボット gorm を起動するために、まずインストールを行いましょう。

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

これで、gorm が MySQL データベースと通信できるようになります。

gorm の基本機能

1. データベースと接続

まず、gorm にデータベースとの接続情報を設定します。

package main

import (
	"fmt"
	"log"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	// データベース接続情報(DSN)
	dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"

	// 🤖 `gorm` を起動し、データベースに接続
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatal("データベース接続エラー:", err)
	}

	fmt.Println("✅ gormロボットがデータベースと接続しました!")
}

2. モデル(データ構造)を定義

データを保存するために、テーブルを Go の構造体で表現します。

type User struct {
	ID    uint   `gorm:"primaryKey"`
	Name  string `gorm:"size:255"`
	Email string `gorm:"unique"`
	Age   int
}

この User 構造体を gorm に渡すことで、自動的に users テーブルが作成されます。

3.データベースにテーブルを作成(マイグレーション)

通常 SQL で CREATE TABLE を手書きする必要がありますが、
gorm に頼めば 自動でデータベース構造を作成 してくれます。

db.AutoMigrate(&User{})

すると、MySQL に以下の SQL を実行してくれます。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    email VARCHAR(255) UNIQUE,
    age INT
);

まさに 「SQL自動生成ロボット」 ですね!🤖✨

CRUD 操作(基本的なデータ操作)

データの追加(CREATE)

新しいユーザーをデータベースに保存したいときは、以下のように書きます。

user := User{Name: "John Doe", Email: "john@example.com", Age: 30}
db.Create(&user)

これが SQL に変換されて、自動でデータが保存されます。

INSERT INTO users (name, email, age) VALUES ("John Doe", "john@example.com", 30);

データの取得(READ)

ID=1 のユーザーを取得したいときは:

var user User
db.First(&user, 1)  // SELECT * FROM users WHERE id = 1 LIMIT 1;
fmt.Println("取得したユーザー:", user)

また、すべてのユーザーを取得する場合:

var users []User
db.Find(&users)  // SELECT * FROM users;
fmt.Println("全ユーザー一覧:", users)

var users []User
db.Find(&users) が全てのユーザーを示します。

データの更新(UPDATE)

例えば、ユーザーの年齢を更新したい場合:

db.Model(&user).Update("Age", 31)

これは、以下の SQL に変換されます。

UPDATE users SET age = 31 WHERE id = 1;

データの削除(DELETE)

不要になったデータを削除する場合:

db.Delete(&user)

SQL に変換すると…

DELETE FROM users WHERE id = 1;

gormの便利な機能

1. WHERE 条件付き検索

特定の条件でデータを取得したい場合も、直感的に書けます。

db.Where("age > ?", 25).Find(&users)

これは以下の SQL に変換されます。

SELECT * FROM users WHERE age > 25;

2. 1対多リレーション(関連テーブル)

例えば、「ユーザーが複数の投稿を持つ」関係を作りたいとき:

type Post struct {
	ID     uint
	Title  string
	UserID uint
}
type User struct {
	ID    uint
	Name  string
	Posts []Post `gorm:"foreignKey:UserID"`
}

Posts []Post `gorm:"foreignKey:UserID"
が1(UserID)対多(Posts)リレーションを表します。

このコードを書くだけで、gormユーザーと投稿の関係を自動で管理 してくれます。

3. トランザクション(複数の処理をまとめる)

データベース処理を 失敗したらすべて取り消す ようにすることも簡単にできます。

err := db.Transaction(func(tx *gorm.DB) error {
    if err := tx.Create(&user).Error; err != nil {
        return err
    }
    if err := tx.Create(&post).Error; err != nil {
        return err
    }
    return nil
})
if err != nil {
    log.Println("トランザクション失敗:", err)
}

まとめ

gorm はデータベース操作を自動化するロボット🤖!
SQL を手書きせずに、Go のコードだけでデータを操作できる!
マイグレーション(テーブル作成)を自動でやってくれる!
リレーションや検索、トランザクションも簡単に扱える!

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?