132 Views
January 18, 24
スライド概要
1/11 ent.について データモデル定義編
2/11 ent.とは? グラフ構造に特化したGolangのORMライブラリ ・データベーススキーマをグラフ構造で簡単にモデル化可能 ・gqlgenと組み合わせることで、自動的にGraphQLリゾルバを構築できる ・データ間の関係性を定めてしまえば、極めて簡単なコードでDB操作ができる ・作成元はFacebookなので、GraphQLのベストプラクティスに則りやすい
3/11 GraphQLとは? 柔軟かつ効率的なデータ通信を行うための、比較的新しいAPI向けクエリ言語 リクエスト クライアント バックエンド レスポンス クライアント側のクエリ言語から リクエストを作成して送信する 受け取ったリクエストとスキーマ言語より レスポンスを作成して送信する 欲しいデータのみが JSON型で返される
4/11 ent.のデータモデリングについて RDBのデータをグラフ構造として扱うにあたり、ent.で次のように定義する ・テーブルのフィールド:ノードのプロパティ ・テーブル名:ノードのラベル ・データ間の関係:エッジとそのプロパティ ラベル Pet Name: Tilly Age: 2 Species: Cat ノード Pet Owner エッジ User Name: John Age: 18 Club: Soccer Friend Friend User Name: Mike Age: 17 Club: Soccer
5/11 今回用意したテーブル構造 ・汎用なSNSを想定 ・アカウントはポストを投稿できる ・ポストには位置情報を追加できる ・ポストには「いいね」とコメントができる ・アカウント同士でフレンド関係を作れる ・特定のアカウントをミュートにできる
データテーブル設定ファイルの作成 go run -mod=mod entgo.io/ent/cmd/ent init テーブル名 を実行してテーブルごとの設定ファイルを作成する Annotations()でテーブルの基本設定を行う 6/11
テーブルのフィールド設定 データテーブルごとの設定ファイル内でフィールドを定義する ・テーブル名.goのFields()でテーブルのフィールド定義を行う ・RDBのフィールド設定と同じように値に制限を付けることができる ・Mixin()を用意すると、複数のテーブルで同じフィールド定義を追加できる 7/11
8/11 エッジの設定① データテーブルごとの設定ファイル内でエッジを定義する ・テーブル名.goのEdges()でエッジ定義を行う posts Account Post edge.Toでエッジの向きとプロパティなどを設定する
9/11 エッジの設定② もう片方の設定ファイルで逆向きのエッジを定義する posts Account Post account edge.Fromで逆向きのエッジやプロパティなどを設定する
定義したデータモデルの確認 プロジェクトルートで go run -mod=mod entgo.io/ent/cmd/ent describe ./ent/schema を入力すると、設定したモデル定義を確認できる 10/11
11/11 ここまでのまとめ ・グラフ構造でデータモデリングを行うことで、GraphQLでDB操作をしやすくできる ・RDBのテーブル定義をグラフ構造で直感的に定義できる ・現時点で設定しているデータモデル定義をいつでも確認できる