プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • GraphQL
  • 【GraphQL】「graphql-codegen」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【GraphQL】「graphql-codegen」について

10.06

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

graphql-codegenとは?

GraphQLのデータ型を自動生成するパッケージです。

インストール

1
yarn graphql-codegen init

What type of application are you building?

使っているフレームワークを選択します。もしReactであれば「Application built with React」を選択します。

Where is your schema?

graphQLサーバーのURLパス(エンドポイント)を指定します。

Where are your operations and fragments?

プロジェクトの中に定義されているクエリの内容を解析して自動で変換してくれるのでプロジェクト内のクエリの場所を指定します。(例:queries/**/*.ts)

Where to write the output

変換後ファイルの出力先を指定します。

Do you want to generate an introspection file?

「introspection fileを作りますか?」と言われているので基本これはNoで問題ないでしょう。

How to name the config file?

codegenの設定ファイル名をどうするか聞かれています。基本何でも良いですが、わかりやすいように「codegen.yml」などにしておくと良いでしょう。

What script in package.json should run the codegen?

自動生成を実行するコマンドの名前です。「gen-types」などと指定すると良いでしょう。

生成する設定ファイル

1
2
3
4
5
6
7
8
9
overwrite: true
schema: 'https://key-horse-81.hasura.app/v1/graphql'
documents: 'queries/**/*.ts'
generates:
  types/generated/graphql.tsx:
    plugins:
      - 'typescript'
      - 'typescript-operations'
      - 'typescript-react-apollo'

package.json

上記設定の場合は以下のバージョン付近でないと動作しないので注意です。(最新版とかだと複数ファイルに分かれて変換されてしまい期待した動作にならなくなります。)

1
2
3
4
5
6
7
8
9
  "dependencies": {
    "graphql": "^15.5.0",
  },
  "devDependencies": {
    "@graphql-codegen/cli": "1.21.3",
    "@graphql-codegen/typescript": "^1.21.1",
    "@graphql-codegen/typescript-operations": "1.17.15",
    "@graphql-codegen/typescript-react-apollo": "2.2.3",
  }

最終的にプラグインのインストール

1
yarn

クエリの定義

以下のようにクエリを定義します。

1
2
3
4
5
6
7
8
9
10
11
import { gql } from '@apollo/client'
 
export const GET_USERS = gql`
  query GetUsers {
    users(order_by: { created_at: desc }) {
      id
      name
      created_at
    }
  }
`

変換の実行

1
yarn gen-types

注意点

  • 上で決めたコマンド名をそのまま使っているだけなので「gen-types」は任意のコマンド名になります。
  • 同じクエリ名があるとエラーになるので一意のクエリ名にすると良いです。

自動生成後のファイル

1
types/generated/graphql.tsx

上記に自動生成されたデータ型が全て格納されます。プロジェクトから必要な型をインポートして使っていきます。

生成されたファイルの仕組み

1
2
3
4
5
6
7
export type GetUsersQuery = (
  { __typename?: 'query_root' }
  & { users: Array<(
    { __typename?: 'users' }
    & Pick<Users, 'id' | 'name' | 'created_at'>
  )> }
);

クエリの命名規則

「{定義したクエリ名}Query」という型が自動生成されます。

__typename

Hasura上の対象のフィールドの名前が来る。クエリがルートに定義されている場合は「query_root」、それ以外のテーブル名とかの場合は「users」などと表示されます。

Pick

実際に取得するデータやカラム名などはここに入ります。

スポンサーリンク
  • 2022 10.06
  • miyabisan2
  • コメントを書く
  • GraphQL
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2022 10.08

    【React】GraphQL &Apollo Clientでの状態管理

  2. 2022 10.03

    【GraphQL】構成(「クエリ言語」、「スキーマ言語」)

  3. 2022 10.09

    【GraphQL】「Apollo Server」について

  4. 2021 08.14

    【GraphQL】GaphQLの基本、「Node」と「Edge」の概念について

  5. 2022 10.08

    【React】react-queryでGraphQLを使う

  6. 2022 10.08

    【Next.js】「Hasura」と「Apollo Client」の連携

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【GraphQL】構成(「クエリ言語」、「スキーマ言語…

【React】GraphQL &Apollo Clie…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー