メインコンテンツへスキップする

はじめに

スキーママイグレーションフロー

Entはスキーマの変更を管理するための2つの異なるワークフローをサポートします:

  • 自動マイグレーション - ランタイムに全て実行する宣言型のスキーママイグレーションです。 このフローでは、接続しているデータベースのスキーマとent.Schema定義の差異を満たすために必要なスキーマの変更を計算し、その変更をデータベースに適用します。
  • バージョン管理型マイグレーション - スキーマのマイグレーションを先にSQLファイルとして記述し、Atlasgolang-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.
}

このコードはデータベースに接続し、自動マイグレーションツールを実行してすべてのスキーマリソースを作成します。

次に、バージョン管理型マイグレーションのためにプロジェクトを設定する方法を見てみましょう。