GraphQL + Node.js -Introduction-

ここではNode.js(Express)を使ってGraphQLサーバーを構築します。はじめはシンプルなAPIから実装し、最後はログイン機能を持ったアプリケーションを作っていきます。Node.jsだけではなくデータベースやORMについても学習するので大変かもしれませんが 手を動かしながら一緒に覚えていきましょう。

Projectの作成

まずターミナルを開き、graph-nodeというディレクトリを作り、プロジェクトのルートに移動します。
次にnpm init -yでpackage.jsonファイルを作成します。

mkdir graph-node

cd graph-node

npm init -y

3つの基本となるパッケージをインストールします。
apollo-serverについて(公式ドキュメント)

npm install express graphql apollo-server-express

エントリーポイントとなるファイルindex.jsをsrcディレクトリ内に作成します。基本的にnode src/index.jsでサーバーを起動します。好みでnodemonなど使うと効率よく開発できます。

mkdir src

touch src/index.js

作成したindex.jsに以下のようにコードをかいてください。説明は上から順に行っていきます。

                
    // src/index.js

    const express = require('express');
    const { ApolloServer, gql } = require('apollo-server-express');
    
    const typeDefs = gql
      type Query {
        hello: String!
      }
    
    const resolvers = {
      Query: {
        hello: () => 'Hello world!'
      }
    }
    const server = new ApolloServer({
      typeDefs,
      resolvers,
    })
    
    const app = express();
    server.applyMiddleware({ app });
    
    app.listen({ port: 4000 }, () =>
      console.log('🚀 Server ready at http://localhost:4000/graphql')
    );
                                   

1.まずtypeDefsについて、ここではGraphQLのスキーマの定義をしています。このページではシンプルにhelloというnon-nullableなString型を持つフィールドを定義しています。

2.続いて、resolversについて、typeDefsで定義したスキーマを実際に実行しています。

3.最後にtypeDefsresolversapollo-server-expressからインポートしたApolloServerにわたして、そこからサーバーにどのようにそれがを動かすのかを伝えています。

実際にアプリケーションの作成時などにはそれぞれファイルを見やすいように分けることが多いですがここでは、全てindex.jsにまとめます。

実行してみよう

node src/index.js

おそらく下のターミナルに次のようにでているので、

🚀 Server ready at http://localhost:4000/graphql

http://localhost:4000/graphqlにアクセスすると

上のようなページにとぶので、早速以下のコードを実行しよう。

                
query {
  hello
}
                                   

queryは省略可

上のように出ればとりあえず成功です!!次に進みましょう。次はもう少し複雑なQueriesを扱います。