Open14

Next.js ✕ Graphql ✕ Railsの知見まとめ

tama8021tama8021

Apollo ClientでSSR

  • キャッシュ関係で上手くデータが取れなくて詰まったときに参考になった記事たち

https://qiita.com/sijiaoh/items/b55b398b26f58c982512

  • 公式サイトの参考箇所
    • キャッシュをどうするかというフェッチポリシーというものがある

https://www.apollographql.com/docs/react/data/queries/#setting-a-fetch-policy

  • デフォルトの値を変えちゃう

https://www.apollographql.com/docs/react/api/core/ApolloClient/#example-defaultoptions-object

  • キャッシュ大変そう

https://qiita.com/acro5piano/items/8395ca9ae878ffcac17f

tama8021tama8021

こんな感じでやったらできたけど、クエリの結果がキャッシュに保存されないらしいからapolloを使うありがたみが減るみたい

function createApolloClient() {
  return new ApolloClient({
    ssrMode: typeof window === 'undefined',
    ssrForceFetchDelay: 100,
    defaultOptions: {
      watchQuery: {
        fetchPolicy: 'no-cache',
      },
      query: {
        fetchPolicy: 'no-cache',
      },
    },
    cache: new InMemoryCache(),
  });
}
tama8021tama8021

model migrationファイルの作成コマンド

$ bundle exec rails g model User

Running via Spring preloader in process 73716
      invoke  active_record
      create    db/migrate/20211002031333_create_users.rb
      create    app/models/user.rb
      invoke    rspec
      create      spec/models/user_spec.rb
      invoke      factory_bot
      create        spec/factories/users.rb

tama8021tama8021
tama8021tama8021

最終的な codegenファイル

codegen.yml
overwrite: true
schema: './schema.graphql'
documents: 'src/libs/graphql/**/*.graphql'
generates:
  // graphqlを呼び出すファイル(命名はご自由に)
  src/libs/graphql/graphql.ts:
    plugins:
      - 'typescript'
      - 'typescript-operations'
      - 'typescript-react-apollo'
tama8021tama8021
  • 適当なqueryかmutationを書いて
query users {
  getUsers {
    id
  }
}
  • generateコマンドを叩く
> yarn generate
yarn run v1.22.10
$ graphql-codegen --config codegen.yml