セットアップ
これは、Entをはじめて使うユーザーのためのガイドです。 プロジェクトをゼロから設定します。 はじめる前に、以下のツールがインストールされていることを確認してください。
前提条件
これらの依存関係をインストールした後、プロジェクトのディレクトリを作成し、Goモジュールを初期化します。
mkdir todo
cd $_
go mod init todo
インストール
以下のGoコマンドを実行してEntをインストールし、 Todo
スキーマの作成とプロジェクトの初期化を行います。
go get entgo.io/ent/cmd/ent
go run -mod=mod entgo.io/ent/cmd/ent new Todo
After installing Ent and running ent new
, your project directory should look like this:
.
├── ent
│ ├── generate.go
│ └── schema
│ └── todo.go
├── go.mod
└── go.sum
ent
ディレクトリは生成されたアセットを保持しており(次のセクションを参照)、 ent/schema
ディレクトリには、 エンティティスキーマが含まれます。
コード生成
When we ran ent new Todo
above, a schema named Todo
was created in the todo.go
file under thetodo/ent/schema/
directory:
package schema
import "entgo.io/ent"
// Todoは、Todoエンティティのスキーマ定義を保持します。
type Todo struct {
ent.Schema
}
// Todoのフィールド
func (Todo) Fields() []ent.Field {
return nil
}
// Todoのエッジ
func (Todo) Edges() []ent.Edge {
return nil
}
ご覧のとおり、スキーマにはフィールドやエッジがまだ定義されていません。 Todo
エンティティを扱うファイルを生成するコマンドを実行しましょう。
go generate ./ent
テストケースの作成
go generate ./ent
を実行すると、Entの自動コード生成ツールが起動し、schema
パッケージで定義したスキーマを使用して、データベースと対話するためのGoコードを生成します。 この時点で、./ent/client.go
の下に、Todo
のエンティティを取得、変更できるクライアント・コードが生成されました。 Let's create a testable example to use this. このテストケースでは SQLite を使います。
go get github.com/mattn/go-sqlite3
touch example_test.go
ent.Client
をインスタンス化し、データベース内のすべてのスキーマ(テーブル、カラムなど)を自動的に作成する以下のコードをexample_test.go
に貼り付けてください。
package todo
import (
"context"
"log"
"todo/ent"
"entgo.io/ent/dialect"
_ "github.com/mattn/go-sqlite3"
)
func Example_Todo() {
// インメモリーのSQLiteデータベースを持つent.Clientを作成します。
client, err := ent.Open(dialect.SQLite, "file:ent?mode=memory&cache=shared&_fk=1")
if err != nil {
log.Fatalf("failed opening connection to sqlite: %v", err)
}
defer client.Close()
ctx := context.Background()
// 自動マイグレーションツールを実行して、すべてのスキーマリソースを作成します。
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
// 出力します。
}
次に、 go test
を実行して、すべてが期待どおりに動作することを確認します。
go test
プロジェクトの設定が終わったので、Todo リストを作成しましょう。