サーバレスでフルマネージドなGraphQLサービスGrafbaseを試してみた
はじめに
こんにちは、CX事業本部Delivery部MADグループの森茂です。
Supabaseのように手軽にデータベースが使え、さらにGraphQLエンドポイントが利用できるGrafbaseというサービスのプライベートベータが開始されていたのでさっそく試してみました。
まだプライベートベータのためサービスの価格など全容は公開されていないのですが、サイトやブログからの情報では、GrafbaseはGraphqlのスキーマをデプロイするだけでDynamoDBとGraphQLのエンドポイントを構築してくれるBaaSのようです。プライベートベータのため招待制となっていますが、私が申請した7月27日現在では数分後には招待メールが届き利用できるようになりました。
下記ブログ記事によると、GrafbaseのプラットフォームはRustでつくられており、Cloudflare Workers上、つまりエッジに展開されている?ようです。
またRust製のCLIツールも提供されており、ローカルで開発サーバーを起動することもできます。 (GrafbaseのRust製ローカルサーバーはCLIツールとともにGitHubに公開されています。)
$ npx grafbase dev Need to install the following packages: grafbase Ok to proceed? (y) y Grafbase CLI 0.3.0 ? listening on port 4000 - playground: http://127.0.0.1:4000 - endpoint: http://127.0.0.1:4000/graphql
試してみた
さっそくどのように使うことができるのか試してみました。
2022年7月現在Grafbaseでプロジェクトを開始するには2つの方法があるようです。なお、どちらもGitHubとの連携が必須となっています。
- 公式テンプレートからGitHubへリポジトリを作成して開始
- 既存のGitHubリポジトリを連携してGraphQLスキーマをインポート
公式テンプレートを使った場合
公式テンプレートを利用する場合は自身のGitHubにスキーマファイルが配置された新規リポジトリを作成してくれます。
スキーマファイルを更新し、mainブランチにマージするだけで更新されたスキーマなGraphQLエンドポイントをデプロイしてくれます。
既存のGitHubリポジトリを連携する場合
GitHubアカウントを連携すると所有するリポジトリが表示されるので、インポートしたいリポジトリを選択します。なお、制限事項としてスキーマファイルがgrafbase/schema.graphql
として配置されていることが必須となっています。
Next.jsでためしてみた
公式のGitHubリポジトリにNext.jsを使ったサンプルコードがあったので、それを使ってGrafbaseの動作を試してみました。
Next.jsのセットアップ
サンプルプロジェクトをdegit
でローカル環境にチェックアウトします。
$ npx degit grafbase/grafbase/examples/nextjs grafbase-with-nextjs $ cd grafbase-with-nextjs
Grafbaseプロジェクトの作成
プロジェクトの作成にはGitHubリポジトリとの連携が必要です。
サンプルプロジェクトは公式テンプレートのTodoを利用しているので、公式テンプレートのTodoをGitHubへインポートして利用するか、チェックアウトしたNext.jsを自身のGitHubに新規リポジトリとして設置してプロジェクトを作成します。
今回はサンプルプロジェクトを利用した新規リポジトリを作成してプロジェクトを作成しました。
Next.jsとの連携
プロジェクトが無事にデプロイされるとAPI KeyとEndpointが発行されます。その値を.env
ファイルに追記すれば準備完了です。
動作を見てみる
準備ができたところでNext.jsを動かしてみます。
$ yarn dev or npm run dev
ローカル環境で試したところ、エンドポイントのデプロイはコールドスタートなしのエッジ環境にされるよう?なのですが、レスポンスがだいぶ遅い感もあるので、まだDBなどリソースのリージョンがUSなどに限定されているからかもしれません。
また、ダッシュボードからPlaygroundを利用して直接クエリを操作することもできます。
さいごに
公式サイトのサンプルコードをベースにGrafbaseを試してみました。何度か試していたところ、まだレスポンスに時間がかかったり、デプロイに失敗することなどがありましたが、この手軽さはすごいですね:)
GraphQL環境が利用できるサービスと言うとHasuraが有名かもしれません。HasuraはPostgreSQLを利用していますが、GrafbaseはDynamoDBを利用している点が大きく異なります。まだまだプライベートベータということもあり機能は数少ないですが下記の通り今後の進化が楽しみです。
Over the coming months, we will be working closely with the community to make Grafbase the best platform to build and deploy instant serverless GraphQL backends.
なお、公式サイトを見てみると出資者がなかなか豪華な顔ぶれとなっております。この顔ぶれからも今後に期待しないわけにはいかなそうです:)