I_Want_To_Check_The_Type_Of_A_Query_Before_Executing_It_With_Graphql-Client

背景

  • 弊社にはバックエンドのアプリケーションが2つある
  • バックエンド間の通信にGraphQLを採用している
flowchart LR

App <-- GraphQL --> バックエンドアプリケーション <-- GraphQL --> 検査専用アプリケーション

抱えている課題

  • GitHub社のライブラリである graphql-client を利用している
  • 以下のような実装ミスをしてしまったが、リリースするまで気づかなかった
  • テスト側でもモックする際に同じように実装ミスをしていたため、リリース後にエラーが発生して初めて発覚した
module UpdateProfileCommand
  class << self
    def call(user_id)
      GRAPHQL_QUERY = <<~GRAPHQL.freeze
        mutaiton ($input: updateProfileInput!) {
          updateProfileInput(input: $input) {
            profile {
              name
            }
        }
      }
      GRAPHQL
  
      response = ::GraphqlClient.query(
        GRAPHQL_QUERY,
        variables: {
          input: {
            # ↓ キーはキャメルケース(userId )で実装する必要があった
            user_id: user_id,
            }
          }
        }
      ).data
    end
  end
end

原因

  • 実装時に気づきにくい
    • TypeScript のような型がある言語であれば実装時点で気づくことができるが、Ruby には型がないため気づきにくい
  • テスト時に気づきにくい
    • 統合テストでも通信部分はモックしているため、モックでミスするとテストで気づけない

やりたいこと

  • サーバー側のスキーマを持っている
  • リクエスト実行前にそのクエリの型が正しいかをどうか検証したい

調べたいこと or 調べたこと

graphql-client に機能がないか?

  • なさそう、、、

代替ライブラリがないか?