NestJS と GraphQL で開発用の環境を作成する
目次
- NestJS のアプリケーションを作成
- GraphQL の依存関係を構築する
- mysql(docker)を用意する
- mysql の依存関係を構築する
1. NestJS のアプリケーションを作成
NestCliを用いて NestJS のアプリケーションを構築する。
cli を install していない時は、上の URL から cli を install してアプリケーションを作成します。
$ nest new nestjs-graphql
$ npm run start:dev
localhost:3000で下記画面が表示されることを確認します。
2. GraphQL の依存関係を構築する
Qiita 記事で記載しましたが、依存関係を解決していきます。
GraphQL を利用するのに必要な 4 つをインストールしていきます。
$ npm i --save @nestjs/graphql graphql-tools graphql apollo-server-express
library の型定義で error がはかれないように、tsconfig.json を編集します。
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
//ここから追記
"skipLibCheck": true
//ここまで追記
},
"exclude": ["node_modules", "dist"]
}
公式ドキュメントをもとに GraphQL の依存関係を app.module に定義していきます。
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { join } from 'path';
@Module({
imports: [
GraphQLModule.forRoot({
debug: false,
playground: true,
typePaths: ['./**/*.graphql'],
definitions: {
path: join(process.cwd(), 'src/graphql.ts'),
outputAs: 'class',
},
}),
],
})
export class AppModule {}
サーバーを起動し、play groundにアクセスして paly groud が表示されることを確認します。
$ npm run start:dev
下記のように Play Ground が表示されます。
3. mysql(docker)を用意する
docker-compose.ymlとDockerfileを追加していきます。
$ touch docker-compose.yml
$ touch Dockerfile
現状のディレクトリ構成は、以下になる想定です。
$ tree -L 1 -I node_modules
.
├── Dockerfile
├── README.md
├── dist
├── docker-compose.yml
├── nest-cli.json
├── package-lock.json
├── package.json
├── src
├── test
├── tsconfig.build.json
└── tsconfig.json
MySQL のみの docker を作成するので、起動に必要な設定を作成していきます。
FROM mysql:5.7
version: '3.7'
services:
db:
build: .
command: --default-authentication-plugin=mysql_native_password
restart: always
tty: true
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: develop
最後に docker を起動して正常に動作するか確認します。
$ docker-compose up
$ docker ps -a
4. mysql の依存関係を構築する
公式ドキュメントを目安に依存関係を構築していきます。
$ npm install --save @nestjs/typeorm typeorm mysql
上記のインストールが完了したら、app.module に必要な設定を記載していきます。お行儀が悪いですが、とりあえず動くように設定を記載していきます。
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { join } from 'path';
@Module({
imports: [
GraphQLModule.forRoot({
typePaths: ['./**/*.graphql'],
definitions: {
path: join(process.cwd(), 'src/models/graphql.ts'),
outputAs: 'class',
},
}),
TypeOrmModule.forRootAsync({
useFactory: () => ({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'example',
database: 'develop',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
}),
],
})
export class AppModule {}
上記で簡易的な設定が完了したと思うので、あとは適宜 GraphQL を記載していけば実装できます。