Hasura でマイグレーションとシードデータを管理する
Hasura を使えば API を自分で実装する手間が省けて、フロントエンドの開発に注力できるのでは?
ただでさえなかなか進まない個人開発なので、やらなくてもいいことは極力やりたくない。
ということで、ここ最近は Hasura を触ってイイ感じに個人開発を進められないか試していました。
Hasura CLI のインストールと config.yaml の作成
コマンドライン上から Hasura を操作することが多々あるので下記のページを参考にインストールします。
次に、Hasura CLI を使えるようにするための設定ファイル config.yaml を作成します。
hasura init コマンドを使うと config.yaml を含めてディレクトリやファイルが生成されます。
この辺のこともドキュメントに書いてあるので調べてみてください。
ひととおり終えると👇のディレクトリ構成になっているはずです。
Docker 環境の準備
Hasura が docker-compose.yml のサンプルを提供してくれているので、そのまま使わせてもらいます。
下記のページを参考にすれば Hasura コンソール画面の起動と PostgreSQL との接続が簡単にできます。
マイグレーションファイルの作成
マイグレーションファイルの作成も簡単です。
起動した Hasura コンソール画面からテーブルやカラムを作成するとマイグレーションファイルが自動生成されます。
もしすでに DB にテーブルやカラムはあるけれどマイグレーションファイルが生成されていない場合でも、下記コマンドを実行すれば生成できます。
hasura migrate create "出力したディレクトリに付ける名前" --from-server
中身はテーブルやカラムを作成するためのSQLが書かれています。
例えば今まで、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 apply
と hasura metadata apply
コマンドを実行します。
マイグレーションとメタデータの詳細に関しては下記ドキュメントに書かれています。
シードデータの作成
アプリの初期データとして投入するシードデータの作成も簡単です。
全てのテーブルに保存されているデータを出力することもできますが、テーブルごとに出力することも可能です。
テーブルごとに出力した方が1ファイルあたりのサイズが大きくならずに済みますし、1ファイル1テーブルで分かりやすく管理できますね。
下記のように hasura seed create
コマンドを実行すると seeds/DB名 ディレクトリ配下にSQLファイルが生成されます。
hasura seed create 出力されたファイルに付ける名前 --from-table テーブル名
中身はシードデータを投入するためのSQLが書かれています。
マイグレーションファイルを同様、共同開発者に共有したりデプロイ時のデータ投入もスムーズにできるでしょう。
シードデータを適用するときは hasura seed apply
コマンドを実行するだけです。
まとめ
Hasura を使えば簡単/迅速に GraphQL サーバーを構築できますし、DBやAuth0などの認証サービスとの連携もスムーズに実装できます。
マイグレーションファイルやシードデータの管理も簡単にできるので、複数人での開発や CI/CD もやりやすい印象です。
何より自分でイチからAPIを作らなくて済むので、フロントエンドの開発に注力できるのは大変助かります。
チュートリアルも提供してくれているので、興味があればぜひ試してみてください。