案件で絶賛対応中になります。
初めて触るため、備忘がてらキャッチアップした内容を書いてみようと思います。
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
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ファイル
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ファイル
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を絡めた実装もできそうなので、公式ドキュメントを見ながら少しずつキャッチアップしていこうと思います。
まだまだ知見が足りない箇所もたくさんあると思うので、過不足あればぜひアドバイスをいただきたいです。
最後まで読んでいただき、ありがとうございました!