はじめに
スキーママイグレーションフロー
Entはスキーマの変更を管理するための2つの異なるワークフローをサポートします:
- 自動マイグレーション - ランタイムに全て実行する宣言型のスキーママイグレーションです。 このフローでは、接続しているデータベースのスキーマと
ent.Schema
定義の差異を満たすために必要なスキーマの変更を計算し、その変更をデータベースに適用します。 - バージョン管理型マイグレーション - スキーマのマイグレーションを先にSQLファイルとして記述し、Atlasやgolang-migrateなどの専用ツールでデータベースに適用するワークフローです。
自動マイグレーションフローが簡単に始められるため、多くの場合、自動マイグレーションフローから始めますが、プロジェクトが大きくなるにつれ、マイグレーションプロセスをより細かくコントロールする必要があると感じ、バージョン管理型マイグレーションフローに切り替えることがあります。
このチュートリアルでは、既存のプロジェクトを自動マイグレーションからバージョン管理型マイグレーションにアップグレードする手順を説明します。
対応するリポジトリ
このチュートリアルで紹介するすべての手順は、GitHub のrotemtam/ent-versioned-migrations-demoリポジトリで見ることができます。 各セクションでは、リポジトリ内の関連するコミットにリンクしています。
このチュートリアルで更新していくEntの初期プロジェクトは、こちらでご覧いただけます。
自動マイグレーション
このチュートリアルでは、既存の Ent プロジェクトがあり、自動マイグレーションを使用していると想定します。 多くの単純なプロジェクトでは、main.go
ファイルにこのようなコードブロックがあります。
package main
func main() {
// Connect to the database (MySQL for example).
client, err := ent.Open("mysql", "root:pass@tcp(localhost:3306)/test")
if err != nil {
log.Fatalf("failed connecting to mysql: %v", err)
}
defer client.Close()
ctx := context.Background()
// Run migration.
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
// ... Continue with server start.
}
このコードはデータベースに接続し、自動マイグレーションツールを実行してすべてのスキーマリソースを作成します。
次に、バージョン管理型マイグレーションのためにプロジェクトを設定する方法を見てみましょう。