1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NestJSとGraphQLで開発用の環境を作成する

Posted at

NestJS と GraphQL で開発用の環境を作成する

目次

  1. NestJS のアプリケーションを作成
  2. GraphQL の依存関係を構築する
  3. mysql(docker)を用意する
  4. mysql の依存関係を構築する

1. NestJS のアプリケーションを作成

NestCliを用いて NestJS のアプリケーションを構築する。

cli を install していない時は、上の URL から cli を install してアプリケーションを作成します。

$ nest new nestjs-graphql
$ npm run start:dev

localhost:3000で下記画面が表示されることを確認します。

localhost.png

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',
      },
    }),
  ],
})
export class AppModule {}

サーバーを起動し、play groundにアクセスして paly groud が表示されることを確認します。

$ npm run start:dev

下記のように Play Ground が表示されます。

playgorund.png

3. mysql(docker)を用意する

docker-compose.ymlDockerfileを追加していきます。

$ 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_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 に必要な設定を記載していきます。お行儀が悪いですが、とりあえず動くように設定を記載していきます。

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,
      }),
    }),
  ],
})
export class AppModule {}

上記で簡易的な設定が完了したと思うので、あとは適宜 GraphQL を記載していけば実装できます。

レポ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?