Open16
NestJSについて🌟
ピン留めされたアイテム
NestJS の概要
- NestJSの特徴や哲学について、公式の説明から引用する。
説明
- Nest は、効率的でスケーラブルなNode.jsサーバー側アプリケーションを構築するためのフレームワークです。
- 最新の JavaScript を仕様しており、次のような要素を組み合わせて作成されています。
- TypeScriptで構築(純粋な JavaScript との互換性を維持)
- OOP (オブジェクト指向プログラミング)
- FP (関数型プログラミング)、および FRP (関数型リアクティブ プログラミング)
- Nest は内部的にExpressを利用しますが、 Fastifyなどの他の幅広いライブラリとの互換性も提供し、利用可能な無数のサードパーティ・プラグインを簡単に使用できるようにします。
哲学
- 近年、Node.js のおかげで、JavaScript はフロントエンド アプリケーションとバックエンド アプリケーションの両方にとって Web の「共通語」となっています。
- フロントエンド アプリケーションに関しては、Angular、React、Vueなどの素晴らしいプロジェクトを生み出し、開発者の生産性を向上させ、高速、テスト可能、拡張可能です。
- ただし、サーバー側には、Node 用の優れたライブラリ、ヘルパー、ツールがたくさんありますが、主要な問題であるアーキテクチャを効果的に解決できるものはありません。
- NestJSは、高度にテスト可能でスケーラブルで、疎結合で保守が容易なアプリケーションを簡単に作成できます。
- NestJSは、すぐに使えるアプリケーション アーキテクチャを提供することを目指しています。
- このアーキテクチャは Angular から多大な影響を受けています。
参考・引用
Docker でサクッとNestJS 環境構築 (NestJS ✖️ PostgreSQL ✖️ TypeORM)
- NestJS でBackEnd環境を構築する
- NestJS ✖️ PostgreSQL ✖️ TypeORM
NestJS 環境構築の基本形
1. Nest CLI をインストール
- local に NestJS CLI が Install されていない場合は、まずは CLI を install しましょう。
npm install -g @nestjs/cli
2. プロジェクトの作成
nest new --strict .
🙀 Packages installation failed!エラーに遭遇。。。
nest new --strict .
で新規プロジェクトを作成中に、🙀 Packages installation failed!エラーに遭遇。。。
app % nest new --strict .
⚡ We will scaffold your app in a few seconds..
? Which package manager would you ❤️ to use? yarn
CREATE .eslintrc.js (663 bytes)
CREATE .prettierrc (51 bytes)
CREATE README.md (3347 bytes)
CREATE nest-cli.json (171 bytes)
CREATE package.json (1942 bytes)
CREATE tsconfig.build.json (97 bytes)
CREATE tsconfig.json (541 bytes)
CREATE src/app.controller.ts (274 bytes)
CREATE src/app.module.ts (249 bytes)
CREATE src/app.service.ts (142 bytes)
CREATE src/main.ts (208 bytes)
CREATE test/jest-e2e.json (183 bytes)
CREATE src/app.controller.spec.ts (617 bytes)
CREATE test/app.e2e-spec.ts (630 bytes)
▹▹▹▹▹ Installation in progress... ☕
Failed to execute command: yarn install --silent
✖ Installation in progress... ☕
🙀 Packages installation failed!
In case you don't see any errors above, consider manually running the failed command yarn install to see more details on why it errored out.
Thanks for installing Nest 🙏
Please consider donating to our open collective
to help us maintain this package.
🍷 Donate: https://opencollective.com/nest
とあるので、yarn install
を実行してみる。。。
app % yarn install
yarn install v1.22.19
info No lockfile found.
[1/4] 🔍 Resolving packages...
warning @nestjs/cli > fork-ts-checker-webpack-plugin > memfs@3.6.0: this will be v4
[2/4] 🚚 Fetching packages...
error @angular-devkit/core@17.1.2: The engine "node" is incompatible with this module. Expected version "^18.13.0 || >=20.9.0". Got "16.15.1"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
Nodeのバージョンエラーであることが判明!
Nodeのバージョンをv18.18.0
に変更して解決🙆♂️
app % nodebrew ls
v16.15.1
v18.4.0
v18.12.0
v18.18.0
current: v16.15.1
app % nodebrew use v18.18.0
use v18.18.0
参考・引用
NestJS ✖️ Prisma
NestJS 入門
NestJS ✖️ TypeORM
NestJS で REST ful な API を実装する
NestJS プロジェクトのDefault設定 Ver. package.json
-
nest new --strict .
で新規作成したプロジェクトのpackage.json
ファイルの設定
package.json
{
"name": "app",
"version": "0.0.1",
"description": "",
"author": "",
"private": true,
"license": "UNLICENSED",
"scripts": {
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.0.0",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",
"@nestjs/schematics": "^10.0.0",
"@nestjs/testing": "^10.0.0",
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.1",
"@types/supertest": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.42.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.0",
"jest": "^29.5.0",
"prettier": "^3.0.0",
"source-map-support": "^0.5.21",
"supertest": "^6.3.3",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.1.3"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
NestJS 公式 Document
Top Introduction
Overview
First steps
Database
SQL・ORM(TypeORM)
公式Doc 解説系
NestJS 実践者のLog🌟
NestJS 系をカスタムする🌟
NestJSは簡単に言えば、Express同様にNode.jsのフレームワークである。主な特徴は以下の通り。
- デフォルトでTypeScriptが使える
- Expressの知識をそのまま応用できる
- OOP(オブジェクト指向プログラミング)、FP(関数型プログラミング)、FRP(関数型リアクティブプログラミング)の要素をフル活用できる
- テストが簡単。専用のテストフレームワークが用意されている
- 設計思想がAngularに影響されている
- GraphQLとREST APIの開発を両方ともサポートしている
- マイクロサービスを開発しやすい
- WebSocketと連携できる
- 拡張性が高い
- コマンド一つで開発に必要な機能がデフォルトで揃っている
- 日本語に対応していないものの、公式ドキュメントが非常にわかりやすく丁寧に書かれており初心者でもスムーズに習得できるのが最大の魅力である。
NestJS と Express の比較
NestJSは、Node.jsのためのフレームワークであり、サーバーサイドのアプリケーション開発を容易にすることを目的としています。
TypeScriptで書かれており、効率的かつスケーラブルなアプリケーションの構築を支援します。
NestJSは、デザインパターンとして依存性注入を採用しており、モジュール性、再利用性、テストのしやすさを重視しています。
一方、ExpressはNode.jsのミニマルなフレームワークであり、Webアプリケーションの基本的な機能を提供します。
シンプルさと柔軟性が魅力で、開発者は中間件やルーティングの設定など、必要な機能を自由に追加できます。
NestJSとExpressの主な違いは、
NestJSがフルスタックフレームワークとしてより多くの機能を備え、アプリケーションアーキテクチャに一定の構造を提供することです。
一方で、Expressはよりベーシックで、開発者により多くの自由度を提供しますが、大規模なアプリケーションでは構造と整理が必要になる場合があります。
参考・引用
NestJS ハンズオン講座🌟
NestJS プロジェクトを作成する
- NestJS CLI を Global Install します。
npm i -g @nestjs/cli
- プロジェクトを作成する
nest new nestjs-example
TypeORMのセットアップ
TypeORM の install
npm install --save @nestjs/typeorm typeorm mysql2
# または。。。
yarn add @nestjs/typeorm typeorm mysql2
データベースとの接続で使用する環境変数
- データベースに接続するために必要な情報は、環境変数でアプリケーションに渡します。
- NestJSで環境変数を取得するライブラリとして、@nestjs/configを使用します。
yarn add @nestjs/config
-
config/configuration.ts
を作成する
config/configuration.ts
export default () => ({
database: {
host: process.env.DATABASE_HOST || 'localhost',
port: parseInt(process.env.DATABASE_PORT, 10) || 3306,
username: process.env.DATABASE_USER || 'test',
password: process.env.password || 'password',
name: process.env.database || 'test',
},
});
参考・引用
NestJSで、App開発
NestJS 要点・Input記事
NestJS の DTO と Validation の基本