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 を編集します。
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 に定義していきます。
src/app.module.ts
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',},}),],})exportclassAppModule{}
サーバーを起動し、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
docker-compose.yml
version:'3.7'services:db:build:.command:--default-authentication-plugin=mysql_native_passwordrestart:alwaystty:trueports:-'3306:3306'environment:MYSQL_ROOT_PASSWORD:exampleMYSQL_DATABASE:develop
最後に docker を起動して正常に動作するか確認します。
$docker-compose up
$docker ps -a
4. mysql の依存関係を構築する
公式ドキュメントを目安に依存関係を構築していきます。
$npm install--save @nestjs/typeorm typeorm mysql
上記のインストールが完了したら、app.module に必要な設定を記載していきます。お行儀が悪いですが、とりあえず動くように設定を記載していきます。
src/app.module.ts
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,}),}),],})exportclassAppModule{}
上記で簡易的な設定が完了したと思うので、あとは適宜 GraphQL を記載していけば実装できます。