WEB制作nest.jsが来ます。それも恐ろしい速度で。

nest.jsが来ます。それも恐ろしい速度で。

たぶん、laravelバックエンドの代わりに、
nest.jsを使ったバックエンドに置き換わっていく時代が来ます。

本日はnest.jsの最小単位のプロジェクトコードを紹介します。

1. Nest.jsプロジェクトを初期化

npm init -y
npm install @nestjs/core @nestjs/common rxjs

2. main.tsファイルの作成

import { NestFactory } from '@nestjs/core';
import { Module, Controller, Get } from '@nestjs/common';

@Controller() // デフォルトルート
class AppController {
  @Get()
  getHello(): string {
    return 'Hello World!';
  }
}

@Module({
  controllers: [AppController],
})
class AppModule {}

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

3. サーバーの起動

node main.ts

これで、ブラウザで http://localhost:3000 にアクセスすると、「Hello World!」が表示されます。

DB扱う時の最小コードが知りたい

ですよね。

ステップ 1: Nest.js プロジェクトの初期化

npm init -y
npm install @nestjs/core @nestjs/common @nestjs/prisma @prisma/client @nestjs/config rxjs

ステップ 2: Prismaの初期化とスキーマ設定

  1. Prismaを初期化します。
npx prisma init
  1. prisma/schema.prismaファイルを編集して、ブログのデータモデルを定義します。
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite" // SQLiteを使用しますが、他のDBMSもサポートしています
  url      = "file:./dev.db"
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
  createdAt DateTime @default(now())
}
  1. Prismaのマイグレーションを実行して、データベースにモデルを反映させます。
bashコードをコピーするnpx prisma migrate dev --name init

ステップ 3: PrismaService の作成

src/prisma.service.tsファイルを作成し、Prismaクライアントを管理するサービスを実装します。

import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
  async onModuleInit() {
    await this.$connect();
  }

  async onModuleDestroy() {
    await this.$disconnect();
  }
}

ステップ 4: BlogService と BlogController の作成

  1. src/blog/blog.service.tsを作成し、ブログの一覧を取得するサービスを実装します。
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma.service';

@Injectable()
export class BlogService {
  constructor(private prisma: PrismaService) {}

  async getPosts() {
    return this.prisma.post.findMany();
  }
}
  1. src/blog/blog.controller.tsを作成し、ブログの一覧を返すエンドポイントを定義します。
import { Controller, Get } from '@nestjs/common';
import { BlogService } from './blog.service';

@Controller('blog')
export class BlogController {
  constructor(private readonly blogService: BlogService) {}

  @Get()
  async getPosts() {
    return this.blogService.getPosts();
  }
}

ステップ 5: BlogModule の作成

src/blog/blog.module.tsを作成し、モジュールを定義します。

import { Module } from '@nestjs/common';
import { BlogService } from './blog.service';
import { BlogController } from './blog.controller';
import { PrismaService } from '../prisma.service';

@Module({
  controllers: [BlogController],
  providers: [BlogService, PrismaService],
})
export class BlogModule {}

ステップ 6: AppModule の修正

src/app.module.tsを編集して、BlogModuleをインポートします。

import { Module } from '@nestjs/common';
import { BlogModule } from './blog/blog.module';

@Module({
  imports: [BlogModule],
})
export class AppModule {}

ステップ 7: アプリケーションの起動

Nest.jsを起動します。

npm run start

結果の確認

ブラウザで http://localhost:3000/blog にアクセスすると、Prismaデータベースに保存されたブログの投稿一覧が表示されます。

補足

  • 必要に応じて、npx prisma studioでPrisma Studioを使い、データを確認・編集できます。