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

セットアップ

これは、Entをはじめて使うユーザーのためのガイドです。 プロジェクトをゼロから設定します。 はじめる前に、以下のツールがインストールされていることを確認してください。

前提条件#

これらの依存関係をインストールした後、プロジェクトのディレクトリを作成し、Goモジュールを初期化します。

mkdir todo
cd $_
go mod init todo

インストール#

以下のGoコマンドを実行してEntをインストールし、 Todoスキーマの作成とプロジェクトの初期化を行います。

go get entgo.io/ent/cmd/ent
go run entgo.io/ent/cmd/ent init Todo

Ent をインストールして ent initを実行すると、プロジェクトディレクトリは以下のようになります:

.
├── ent
│ ├── generate.go
│ └── schema
│ └── todo.go
├── go.mod
└── go.sum

ent ディレクトリは生成されたアセットを保持しており(次のセクションを参照)、 ent/schema ディレクトリには、 エンティティスキーマが含まれます。

コード生成#

ent init Todoを実行すると、todo/ent/schema/ディレクトリのtodo.goファイルにTodoというスキーマが作成されます。

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のエンティティを取得、変更できるクライアント・コードが生成されました。 このコードを試すために、 testable example を作成しましょう。 このテストケースでは 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 リストを作成しましょう。