🧙‍♀️

【Go】gqlgenでGraphQLのスキーマへMapのスカラー型を指定してみる

に公開

概要

gqlgenのスキーマの項目設定では、Mapのscalarが用意されています。これはGoでのmap型に変換され、キー項目に対して任意の型の値を設定することができます。今回はこのMapのスカラーを使ってみたのでメモ書きします。

前提

  • 使用したgqlgenのバージョンはv0.17.74です。

実装サンプル

まずはスキーマファイルで、以下のような定義を用意します。

schema.graphqls
scalar Map

input TaskInput {
  title: String!
  mapSetting: Map
  detail: String
}

type Mutation {
  createTask(input: TaskInput!): Boolean!
}

これをジェネレートすると、以下のようなモデルが生成されます。

models_gen.go
type TaskInput struct {
	Title      string                `json:"title"`
	MapSetting map[string]any        `json:"deadLineCheckSubSetting,omitempty"`
	Detail     *string               `json:"detail,omitempty"`
}

フロントエンド側では今回はobject型で渡すようにします。以下のように、codegen.tsのgenerate
sへscalarsを設定します。なお、Parseのロジックを別途実装することで、Map型を設定することも可能と思います。

codegen.ts
generates: {
    "./src/graphql/gen/graphql.tsx": {
      plugins: ["typescript", "typescript-operations", "typescript-urql"],
      config: {
        scalars: {
          Map: "object",
        },
      },
    },

Discussion