LoginSignup
8
12

NestJSについてキャッチアップしてみた

Posted at

案件で絶賛対応中になります。
初めて触るため、備忘がてらキャッチアップした内容を書いてみようと思います。

NestJSとは

Nest(NestJS)は、効率的でスケーラブルなNode.jsサーバーサイドアプリケーションを構築するためのフレームワークです。プログレッシブJavaScriptを使用し、TypeScriptで構築され、TypeScriptを完全にサポートし(それでも開発者は純粋なJavaScriptでコーディングできる)、OOP(オブジェクト指向プログラミング)、FP(関数型プログラミング)、FRP(関数型反応プログラミング)の要素を組み合わせている。

Node.jsのフレームワークということは理解できました。
今度はNode.jsについてサクッと調査します。

Node.jsとは

Node.js は、オープンソースのクロスプラットフォームの JavaScript ランタイム環境です。ほぼあらゆる種類のプロジェクトで人気のあるツールです。

公式ドキュメントの表現っていまいちイメージしづらいですよね...笑
こういう時はQiitaで分かりやすい表現を探すに限ります。
@non_cal さんの記事がめっちゃ分かりやすかったので共有しますね。

@non_calさんの記事(抜粋)によると

Node.jsは 「JavaScriptの実行環境」 になります。

Node.jsではJavaScriptでOSの機能にアクセスするプログラムを組むことができます。

「Node.jsはサーバサイドのJavaScript実行環境としてもクライアントサイドJavaScriptの開発環境としても利用される」というのが実態となっています。

との事です。
分かりやすい!ありがとうございます!

NestJSのフォルダ構成

では本題。
npmがインストールされている前提で

$ npm i -g @nestjs/cli
$ nest new project-name

を実行することで以下のコアファイルが配置されるようになります。
今回の記事では以下ファイルに絞ってご紹介します。

app.controller.ts
app.service.ts
app.module.ts

スクリーンショット 2024-04-28 22.11.51.png

app.controller.tsファイル

app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

デコレータと呼ばれる仕組みを使いコードを構成していきます。
デコレータは上記のコードで言う「@ Controller」や「@ Get」の部分を指します。
上記の場合、getHello関数(CRUD:Rを指す)を定義してます。
では、上記関数の詳細はどこで記述されているかで言うと、app.service.tsで記述されています。

app.service.tsファイル

app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

公式の情報によると、serviceは「Providers」として紹介されていますが、ファイルとしてはserviceになるみたいです。
今回の「getHello関数」では、'Hello World'を返す内容が記述されています。
Controllerでは関数のみ定義する、serviceでは関数の詳細を定義するとの事で、役割が明確で個人的には好きな書き方です。

app.module.tsファイル

app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

ここでもデコレータが使われてますね。「@ Module」がデコレータになります。
このファイルでは、アプリケーション全体の設定や構成を行います。
本記事では触れないですが、データベースの環境変数を設定する「database.module.ts」ファイルなどは、本ファイルの「imports」の配列の中に設定したりもします。

さいごに

パッと触ってみた感想をお伝えすると「直感的な実装」ができそうな印象でした。
TypeScriptを絡めた実装もできそうなので、公式ドキュメントを見ながら少しずつキャッチアップしていこうと思います。
まだまだ知見が足りない箇所もたくさんあると思うので、過不足あればぜひアドバイスをいただきたいです。
最後まで読んでいただき、ありがとうございました!

8
12
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
8
12