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 のコードだけでデータを操作できる!
✅ マイグレーション(テーブル作成)を自動でやってくれる!
✅ リレーションや検索、トランザクションも簡単に扱える!