このチャプターの目次
この時点では、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}`);
});
これでスキーマの外部ファイル化が完了しました。
このチャプター完了時のソースコード