【Hasura】導入に際して気をつけること。DB設計など
こんにちは、フリーランスエンジニアの太田雅昭です。
Hasura
HasuraはGraphQLを用いたエンドポイントを簡単に作成してくれます。具体的には以下の点で、優れていると考えられます。
- SubscriptionでDBの変更をリアルタイムで検知できる
- Permissionでロールベースなど細かい制御が可能
他にもいろいろあるかと思いますが、しばらく使ってみての所感では、特に上記の点で優れていると感じます。
導入に際して気をつけること
Hasuraでは、特に以下の点に気をつける必要があります。
ポリモーフィックは避ける
ポリモーフィックはDB設計で、同じテーブル構造を使い回す手法です。例えばエンティティーAに関する翻訳と、エンティティーBに関する翻訳があったとします。翻訳テーブルは locale, key, textといった定番のフィールドがあるため、A, B共通で1つのテーブルを使いまわそうとするものです。以下のような具合です。
model PolyTranslation {
id Int
entityType String
entityId Int
locale String
key String
text String
}
このようなテーブルを1つ作るだけで、entityTypeとentityIdの組み合わせで、A, B両方に対応できます。
ただしこうしたポリモーフィックは、Hasuraでは向いていません。なぜならHasuraのPermissionはリレーションによって行います。そのため、リレーションがなければPermission機能を十分に発揮できないことになります。
ポリモーフィックに限らず、できるだけリレーションを繋げたDB設計にするのが望ましいです。
とにかくidフィールドをつける
idフィールドはテーブルに不要な場合があります。しかしHasuraでは大体は、Apollo Clientを使用することになるかと思います。Apollo Clientでは、idフィールドを使用して、キャッシュの調整を自動で行なってくれます。そのため、idがないとキャッシュ機能がうまくいかず、エラーメッセージが流れ続けることになります。idとするフィールド名を指定する方法もあるかもしれませんが、面倒なので最初から全てのテーブルにidフィールドをつけるのがいいかと思います。
以上、Hasura導入に際して気をつけるべき事象をまとめてみました。また気づいたことがありましたら、更新します。
余談
Youtubeで見たのですが、スターバックスはグァテマラブレンドだそうですね。私も店をやっていた頃は、最高級のグァテマラを少し混ぜていました。業者さんがだいぶ安くしてくれていたので助かりました。ただグァテマラだけだと、ちょっと物足りないんですよね。なのでブレンドが良い感じです。