Chapter 03

GraphQLスキーマを外部ファイル化する

Eringi_V3
Eringi_V3
2021.09.08に更新

この時点では、GraphQLスキーマがsrc/index.tsに直書きされています。
スキーマはこの後膨らんでいくことが容易に想像できるので外部ファイルに記述し、それを読み込んで使うようにしましょう。

.graphqlファイルを読み込むのに必要な依存をインストールします。

yarn add @graphql-tools/graphql-file-loader @graphql-tools/load @graphql-tools/schema

次にルートディレクトリにスキーマファイルを作成し、src/index.tsに直書きされている内容を転記します。

schema.graphql
type Book {
  title: String
  author: String
}

type Query {
  books: [Book!]!
}

src/index.tsは以下のようになります。

src/index.ts
import { GraphQLFileLoader } from '@graphql-tools/graphql-file-loader';
import { loadSchemaSync } from '@graphql-tools/load';
import { addResolversToSchema } from '@graphql-tools/schema';
import { ApolloServer } from 'apollo-server';
import { join } from 'path';

const schema = loadSchemaSync(join(__dirname, '../schema.graphql'), {
  loaders: [new GraphQLFileLoader()],
});

const books = [
  {
    title: 'The Awakening',
    author: 'Kate Chopin',
  },
  {
    title: 'City of Glass',
    author: 'Paul Auster',
  },
];

const resolvers = {
  Query: {
    books: () => books,
  },
};

const schemaWithResolvers = addResolversToSchema({ schema, resolvers });
const server = new ApolloServer({ schema: schemaWithResolvers });

server.listen().then(({ url }) => {
  console.log(`🚀  Server ready at ${url}`);
});

これでスキーマの外部ファイル化が完了しました。

このチャプター完了時のソースコード

https://github.com/EringiV3/apollo-server-prisma-todo-app/tree/bcee594c5d0a26e612a0d5c1983675ef9559936d