Rails5系の場合は問題なくgraphql-codegenを使ってTypeScriptの型定義の自動生成できていたのですが、
Rails6にアップデードしたら、エラーになり自動生成ができなくなったのでその解決方法を記載しておきます。
開発環境はdockerでフロントエンドとバックエンドでそれぞれコンテナが存在しています。
各コンテナへのURLは以下の通り
フロントエンド http://localhost
バックエンド http://localhost:3001
Rails6からHost Authorization
という機能が追加されたのですが、これが原因でした。
バックエンド側のコンテナにはdocker-compose.yml
にbackend-api
というホスト名を付与しており、フロントエンド側のコンテナからgraphql-codegen
を実行する際はhttp://localhost:3001
ではなくてhttp://backend-api
に向けて実行します。
# docker-compose exec frontend bash
bash-5.0# yarn graphql-codegen --config codegen.yml
codegen.yml
overwrite: true
schema: "http://backend-api/graphql"
documents: "graphql/**/*.graphql"
generates:
graphql/generated/graphql.ts:
...
その際、Rails側にbackend-apiというホスト名のホワイトリストに入れてあげないとリクエストが許可されない。
config/application.rb
config.hosts << 'backend-api'
これでRailsを再起動させて、再度graphql-codegen
を実行すれば、無事TypeScriptの型定義が自動生成されるはずです。
簡単な説明ですが、以上となります。