NestJSの環境構築(備忘録)

2023/03/05に公開

NestJSの環境構築手順(Windows)

0. npmをインストールする

1. Node.jsをインストール

https://nodejs.org/ja/

1. NestJSのプロジェクトを作成

1. まずはNest CLIを使えるようにしよう

npm install -g @nestjs/cli

2. プロジェクトを作ろう

nest new example

※npm・yarnどっちでも大丈夫

2. GitLabにアップロードする(git使いたい人向け)

1. gitをインストール

https://www.curict.com/item/60/60bfe0e.html

2. ローカルでコミットまでする

git init
git status
git add .
git commit -m "コメント"

https://qiita.com/Futo_Horio/items/4d669f695680bc13d5fa

3. git configの設定

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

https://reasonable-code.com/git-init-setting/

4. GitLabの設定

  • 新規プロジェクトを作成
  • READ.MEのチェックを外しておく

5. GitLabへプッシュ(すでにローカルにレポジトリがある時)

cd existing_repo
git remote rename origin old-origin
git remote add origin <url>
git push -u origin --all

6. エラー:fatal: Not a git repository (or any of the parent directories): .git 対処方法

  • 下記を実行する
git init

 git config --global user.email "you@example.com"
 git config --global user.name "Your Name"

7. .gitignoreの設定を確認

  • 重要な情報は.envに入れる
.gitignore
.env

https://qiita.com/anqooqie/items/110957797b3d5280c44f
https://qiita.com/harutakaoka522/items/e0abddfd0311eb4fb32b

8. ブランチ名をmasterからmainに変える

git branch -m master main
git push -u origin main
  • GitLab上でmainをデフォルトブランチに設定
  • masterブランチを削除

https://qiita.com/NeK/items/863ff25a46c6eefeb623

3. DockerでPostgresを起動する

1. docker-compose.yamlを配置

docker-compose.yaml
version: '3'

services:
  db:
    image: postgres:14
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - db-store:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
volumes:
  db-store:

2. docker desktopをインストールする

https://www.docker.com/products/docker-desktop/

3. Docker Desktopが起動しない対処方法

  • Linux カーネルを更新しないといけない
  • 手順4をダウンロードして実行するだけでOK

https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

4. コンテナの起動

  • Docker Desktopで起動していればOK!
docker-compose up -d

4. 実装

1. module/controller/serviceを作る

nest g module example
nest g controller example 
nest g service example

https://qiita.com/daikiojm/items/a35065e0b691f878d53c

2. バリデーションチェックの導入

npm install --save class-validator class-transformer

https://docs.nestjs.com/techniques/validation

3. TypeError: classTransformer.plainToClass is not a function at ValidationPipe.transformの対処方法

  • バージョンが合っていないから
 "class-transformer": "^0.5.0",

https://github.com/typestack/class-validator/issues/1411

4. 中身の実装はほかのサイト参考にしてください!

5. ORMの導入

  • TypeORMの導入をします
npm install typeorm
npm install pg # MySQLの場合はmysql
npm install reflect-metadata
npm install @types/pg --save-dev

5. entityを作成する

user.entity.ts
@Entity()
export class Item {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  name: string;
}

6. ormconfigの設定をする

  • docker-compose.yamlと同じ内容にすること
  • entityやmigrationのパスを合わせること
ormconfig.js
module.exports = {
  type: 'postgres',
  host: 'localhost',
  port: 5432,
  username: 'postgres',
  password: 'postgres',
  database: 'postgres',
  autoLoadEntities: true,
  entities: ['dist/entities/*.entity.js'],
  migrations: ['dist/migrations/*.js'],
  cli: {
    entitiesDir: 'src/entities',
    migrationsDir: 'src/migrations',
  },
};

7. migrationを行う

  • distが更新できてないとうまくできない
yarn build
npx typeorm migration:generate -n example 
npx typeorm migration:run 
  • scriptsに登録すると実行が楽になる
package.json
"migration": "npx typeorm migration:run"

8. 完成

  • このような流れでDB作成まで行えます

ex. あったら便利

Postman

1. Postmanをインストールする

https://www.postman.com/downloads/

2. リクエストの作成

  • 以下のように作成

3. エクスポートしてプロジェクトに保存

  • jsonでエクスポートしてGitに保存すればほかのPCでも簡単に利用できる
  • 以下の形でエクスポート
postman_collection.json
{
	"info": {
		"_postman_id": "8deab7a4-686d-42c3-a836-05687e997ac4",
		"name": "demo",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "findAll",
			"request": {
				"method": "GET",
				"header": [],
				"url": {
					"raw": "http://localhost:3000/demo",
					"protocol": "http",
					"host": [
						"localhost"
					],
					"port": "3000",
					"path": [
						"demo"
					]
				}
			},
			"response": []
		}
	]
}

Discussion