🎸

GraphQL Mesh で The Guild が目指す Web API エコシステムの世界観

2023/10/02に公開

The Guild は GraphQL Code GeneratorGraphQL Yoga を筆頭に、多くの GraphQL 関連 OSS をメンテナンスしています。これらは一見 GraphQL エコシステムにフォーカスしているように見えますが、The Guild は Web API エコシステム全体の改善を目指しているようです。

その世界観について、GraphQLConf 2023 で The Guild CEO の Urigo から聞いた内容をもとに、僕の解釈を交えて紹介します。

GraphQL Mesh によって全てが GraphQL になる

GraphQL Mesh は、様々なデータソースから自動的に GraphQL スキーマを生成して配信するゲートウェイです。別の GraphQL API はもちろん、REST API (OpenAPI, JSON Schema) や gRPC などのGraphQL ではない API に加え、PostgreSQL や MySQL などの RDBMS もデータソースとして扱うことができます。


https://the-guild.dev/graphql/mesh/docs/getting-started/overview

たとえば、以下のように JSON Schema をデータソースに設定します。

.meshrc.yml
sources:
  - name: Example API
    handler:
      jsonSchema:
        endpoint: https://example.com/graphql
        operations:
          - type: Query
            field: me
            path: /me
            method: GET
            responseSchema: ./user.json#/definitions/User
user.json
{
  "definitions": {
    "User": {
      "type": "object",
      "title": "User",
      "properties": {
        "firstName": {
          "type": "string"
        },
        "lastName": {
          "type": "string"
        },
        "jobTitle": {
          "type": "string"
        }
      }
    }
  }
}

このとき、出力となる GraphQL スキーマは以下になります。

type Query {
  me: User
}

type User {
  firstName: String
  lastName: String
  jobTitle: String
}

ここで GraphQL Mesh の機能は詳しく解説しませんが、自動生成したスキーマを拡張してリレーションを定義したりAPIリクエスト/レスポンスの例からスキーマを予測したりと割と多機能で、リッチなAPIを構築できるようになっています。

これにより、文字通りすべてを GraphQL として扱えるようになります。

中間言語としての GraphQL にツールチェインを適用する

The Guild は GraphQL 向けに様々なツールを提供しています。

  • GraphQL Code Generator: コード・型生成
  • GraphQL Hive: スキーマレジストリ、モニタリング
  • GraphQL Inspector: 破壊的変更の検知

これらのツールはもちろん GraphQL Mesh によって生成されたスキーマにも適用できます。つまり、様々なデータソースを中間言語としての GraphQL に変換することで、統一されたツールチェインで開発体験を最適化できるのです。

このようなツールは GraphQL でなくとも、OpenAPI や Protobuf のようなスキーマ定義があれば実現できると思います。実際、破壊的変更の検知だけを見ても、oasdiffBuf のようなツールが存在します。

しかし、プロトコルごとに個別にツールを開発するのではなく GraphQL に一本化することで、より効率的に Web API 全体の開発プロセスを改善することができます。

Web API として配信する

GraphQL Mesh には、GraphQL サーバーである GraphQL Yoga も組み込まれており、様々なデータソースをまとめて GraphQL API として配信できます。当然どんなデータソースであってもこれを通すことで、 GraphQL として統一的なメトリクスをとったりキャッシュ機構を入れたりすることができます。

それだけでなく、GraphQL SOFA と組み合わせることで、この GraphQL API を REST API として配信することもできます。自分はこれが欲しいような経験をしたことがないんですが、Public API のようなケースでは、REST API も欲しいこともあるんじゃないでしょうか。

このように、GraphQL をあくまで中間言語として捉えることで、クライアントの要求に合わせた Web API として配信することができます。

まとめ

GraphQL を単なる通信プロトコルではなく中間言語として扱うことで、GraphQL に閉じない Web API のエコシステム全体を改善する The Guild の取り組みを紹介しました。

Urigo は GraphQLConf 2023 で、“Don’t think GraphQL, think APIs” と繰り返し言っていました。もうすぐ The Guild から新しいゲートウェイもリリースされるようですし、この世界観が実現されていくのが楽しみですね。


https://www.youtube.com/watch?v=pq449oB9GOU

なお、この内容は懐の深いイケてるテックカンパニーであるところのUbie株式会社が費用を負担してくれたおかげで知ることができました。いい会社です!

Ubie テックブログ

Discussion