みるべあのエンジニア日記

勉強したことについてTwitterとガチブログの中間くらいのスタンスで書く日記

Hasura でマイグレーションとシードデータを管理する

f:id:milkybear814:20211003115230p:plain Hasura を使えば API を自分で実装する手間が省けて、フロントエンドの開発に注力できるのでは?
ただでさえなかなか進まない個人開発なので、やらなくてもいいことは極力やりたくない。
ということで、ここ最近は Hasura を触ってイイ感じに個人開発を進められないか試していました。

hasura.io

Hasura CLI のインストールと config.yaml の作成

コマンドライン上から Hasura を操作することが多々あるので下記のページを参考にインストールします。

hasura.io

次に、Hasura CLI を使えるようにするための設定ファイル config.yaml を作成します。
hasura init コマンドを使うと config.yaml を含めてディレクトリやファイルが生成されます。
この辺のこともドキュメントに書いてあるので調べてみてください。

hasura.io

ひととおり終えると👇のディレクトリ構成になっているはずです。
f:id:milkybear814:20211003014617p:plain

Docker 環境の準備

Hasura が docker-compose.yml のサンプルを提供してくれているので、そのまま使わせてもらいます。
下記のページを参考にすれば Hasura コンソール画面の起動と PostgreSQL との接続が簡単にできます。

hasura.io

マイグレーションファイルの作成

マイグレーションファイルの作成も簡単です。
起動した Hasura コンソール画面からテーブルやカラムを作成するとマイグレーションファイルが自動生成されます。
もしすでに DB にテーブルやカラムはあるけれどマイグレーションファイルが生成されていない場合でも、下記コマンドを実行すれば生成できます。

hasura migrate create "出力したディレクトリに付ける名前" --from-server

f:id:milkybear814:20211003093722p:plain

中身はテーブルやカラムを作成するためのSQLが書かれています。 f:id:milkybear814:20211003093601p:plain

例えば今まで、Hasura Cloud と Heroku の PostgreSQL で試していたけど、ローカル環境で開発を始めようとなった場合に、
1. Heroku の PostgreSQL からバックアップをダウンロード
2. Hasura コンソールと接続されているローカル環境の DB にリストア
3. マイグレーションファイルの出力

を実行すれば良いですね!

マイグレーションファイルがあれば、共同開発者にも開発環境を共有でき、デプロイもスムーズにできるでしょう。
マイグレーションファイルの適用方法ですが、メタデータと一緒に適用します。

Hasura needs 2 pieces of information to recreate your GraphQL API, the underlying PG database schema and the Hasura metadata which is used to describe the exposed GraphQL API.

適用方法は hasura migrate applyhasura metadata apply コマンドを実行します。

マイグレーションメタデータの詳細に関しては下記ドキュメントに書かれています。

hasura.io

シードデータの作成

アプリの初期データとして投入するシードデータの作成も簡単です。
全てのテーブルに保存されているデータを出力することもできますが、テーブルごとに出力することも可能です。
テーブルごとに出力した方が1ファイルあたりのサイズが大きくならずに済みますし、1ファイル1テーブルで分かりやすく管理できますね。

下記のように hasura seed create コマンドを実行すると seeds/DB名 ディレクトリ配下にSQLファイルが生成されます。

hasura seed create 出力されたファイルに付ける名前 --from-table テーブル名

f:id:milkybear814:20211003092819p:plain

中身はシードデータを投入するためのSQLが書かれています。

f:id:milkybear814:20211003093030p:plain

マイグレーションファイルを同様、共同開発者に共有したりデプロイ時のデータ投入もスムーズにできるでしょう。
シードデータを適用するときは hasura seed apply コマンドを実行するだけです。

まとめ

Hasura を使えば簡単/迅速に GraphQL サーバーを構築できますし、DBやAuth0などの認証サービスとの連携もスムーズに実装できます。
マイグレーションファイルやシードデータの管理も簡単にできるので、複数人での開発や CI/CD もやりやすい印象です。
何より自分でイチからAPIを作らなくて済むので、フロントエンドの開発に注力できるのは大変助かります。

チュートリアルも提供してくれているので、興味があればぜひ試してみてください。

hasura.io