ホーム自己紹介ブログ
NO.94
DATE2022. 10. 15

GraphQL Guildのエコシステムって便利だね

GraphQL Guild ってご存知ですか? GraphQL 界隈だと、Code Generator が有名と思いますが、GraphQL Guild は、それら GraphQL 関連の OSS を開発しているグループです。(詳しくは、こちら)

GraphQL Guild のエコシステムって便利だな〜って感じたことがあったので、紹介します。 試したソースコードは、こちらにあります。

  • https://github.com/silverbirder/playground/tree/main/node/supabase-graphql-guild-app

GraphQL Schema をダウンロードできる

スキーマ駆動開発をすると、GraphQL のクライアントとサーバーのリポジトリ(GraphQL Schema が置いてある)が分かれることがあります。そうすると、クライアントのリポジトリに、サーバーのリポジトリにある GraphQL の Schema が欲しくなると思います。その状況では、次の解決手段が想像できると思います。

  • git submodule で、サーバーリポジトリをクライアントリポジトリに入れる
  • git clone で、GraphQL Schema ファイルをダウンロードするスクリプトを書く

git を扱うと、CI/CD のプロセスやいくつかの場面で、面倒なことがあります。 そこで、GraphQL の SchemaURL を指定するだけで、Schema をダウンロードする機能が、GraphQL CLI にあります。

  • https://www.graphql-cli.com/introduction

具体的には、GraphQL Config を作成し、graphql codegen と実行します。

  • https://the-guild.dev/graphql/config/docs

Schema をダウンロードするために、GraphQL のエンドポイント URL を指定します。

Config ファイルの形式は、yml、json、js、ts のどれかを選べます。 私の場合、(supabase を使っている関係で)GraphQL のエンドポイントへアクセスする認証情報を環境変数から読み込みたかったため、Typescript(ts)を選びました。

具体的には、次の Config ファイルを生成します。

// graphql.config.ts
import type { IGraphQLConfig } from "graphql-config";
import { config } from "dotenv";
 
config();
 
/** @type {import('graphql-config').IGraphQLConfig} */
const graphqlConfig: IGraphQLConfig = {
  schema: [
    {
      [`${process.env.SUPABASE_URL}/graphql/v1`]: {
        headers: {
          apikey: process.env.SUPABASE_ANON_KEY || "",
          authorization: `Bearer ${process.env.SUPABASE_ANON_KEY}`,
        },
      },
    },
  ],
  extensions: {
    codegen: {
      generates: {
        "generated/schema.graphql": {
          plugins: ["schema-ast"],
        },
      },
    },
  },
};
 
export default graphqlConfig;

必要なパッケージをインストールした状態で、graphql codegen と実行すると generated/schema.graphql が生成されます!

GraphiQL が Config だけで動く

GraphQL を利用する側としては、どのようなクエリが書けるか試せす場所が欲しくなります。 サーバー側から GraphiQL を用意頂くでも全然良いのですが、GraphQL Yoga というものを使えば簡単にできます。

  • https://the-guild.dev/graphql/yoga-server

yarn add graphql-yoga したあとに、先程の graphql.config.ts が存在すれば、yarn yoga するだけで GraphiQL が手に入ります!一切、サーブするコードを書いていません。最高でした。

GraphQL CLI には色々便利な機能がある

GraphQL CLI には、GraphQL 関連で便利な機能があります。

  • https://github.com/Urigo/graphql-cli

具体的には、次の 3 つです。

  • @graphql-cli/coverage
    • Document のオペレーションを元に、Schema がどれくらい使われているかわかる
  • @graphql-cli/diff
    • ローカルとリモートの GraphQL Schema の違いを教えてくれる
  • @graphql-cli/validate
    • Document のオペレーション が、GraphQL Schema 定義に反していないかチェックしてくれる

終わりに

GraphQL Guild は、GraphQL Config が中心になっている印象を受けました。 Config があれば、他のエコシステムはそれを見て機能が動くため、準備するものが少なくて済みます。

関係ないですが、supabase で GraphQL を使うのもすごく簡単で、ありがたいです。

バックエンド

-

シェアする

フォローする

次のページ

ObsidianでiPhoneからGit Commitする

前のページ

クローリングをシュッとやるのに、Crawleeが便利だった

関連する記事

タグ「バックエンド」の記事

Storybook上で tRPC通信をMSWでモックする方法

はじめに tRPCは、型安全なAPIを簡単に構築できるフレームワークです。開発中、バックエンドの実装を待たずに、Storybook上でフロントエンドの開発を進めたい場合、Mock Service Worker (MSW) を使用してAPIのモックを行うことができます。この記事では、maloguertin/msw-trpc を用いて、tRPC通信をMSWでモックする方法について解説します。実用例として、サンプルコードをGitHubリポジトリ silverbirder/trpc-msw-storybook-nextjs で共有しています。

2024-03-07

テスト
バックエンド
Stable Diffusion API 開発

Stable Diffusion は、文章を渡すと画像を生成してくれる AI で OSS です。これを自前で動かそうとすると、GPU が必要になります。

2022-09-03

AI
バックエンド
成果物
CI/CDのDaggerで、GithubActionsとCircleCIにシュッと連携してみた

前々から気になっていた、CI/CD の非ベンダーロックインな Dagger というツールを試してみました。本記事では、試した内容について共有しようと思います。

2022-08-23

バックエンド
DevOps
クローリング
← ブログ一覧へ