Web制作、Web開発の歩き方

初心者のためのNestJS入門

第3話:ORMとデータベース操作1 -Prismaの設定とユーザ登録-

(最終更新日:2022.11.27)

NestJSのイメージ
この記事は7分で読めます!
(絵が小さい場合はスマホを横に)

「楽にデータベースを扱いたい!」

Expressなど、他のNode.jsフレームワークと同様、NestJSもデータベース操作にORMが使える。 代表的なものでは、SequelizeやTypeORM、Prismaなどが使える。 その中でも、筆者としてはTypeORMとPrismaが使い勝手が良いと感じているが、 TypeORMは最新バージョンでは、NestJSと合わせて上手くコンパイルできない。 そこで、現在(2022年11月)安定して使用できるPrismaを用いた方法を紹介する。


1.Prismaのインストールとデータベースの設定

まずは今回使用するPrismaをインストールしよう。 Prismaのインストールは「yarn add -D prisma」で行うことができる。 続けて「npx prisma init」を行い、Prismaを使える状態にしよう。 ここまではコマンドを実行するだけなので、難しくないはずだ。

続けて、データベースの設定を行う。今回はデータベースにsqliteを使うことにする。 インストール時に作成されたschema.prismaのdatasource dbのDBにsqliteを設定しよう。 次にルートディレクトリ直下に.envファイルを作成し「DATABASE_URL="file:./dev.db"」と記述しよう。 これで、Prismaでsqliteを使う準備が出来た。 「npx prisma init」を実行すれば、prismaディレクトリの中にdev.dbファイル(sqlite本体)が作成できたはずだ。

NestJSのファイル構成(左)、schema.prismaの記述(右上)、.envファイルの設定(右下)

2.テーブル作成とマイグレーション

次に、必要なTableを設計し、マイグレーションを実行してデータベースTableを作成する。 MVCでいうModelは、schema.prismaファイルの設定の下に記述する。 Modelの書き方自体は見れば何となく分かるので、必要な時にドキュメントを見て確認する程度で大丈夫だろう。 generator、datasourceの下にmodelを記述しよう。

Modelの記述(prisma.service)

Modelを記述したら「npx prisma migrate dev」を実行する。 上手くかけていれば、 migrationsディレクトリに日時名のディレクトリとmigrationファイルが作成されるはずだ。 migrationファイルには実際に実行したSQL文が記述されている。 そして、sqliteにはその実行結果としてUserテーブルが作成されているはずだ。

migration.sqlファイルが作成される

3.クライアント側のデータベース接続設定

クライアント側からデータベースに接続するために、後一つ下準備がある。 まずはコマンドで「yarn add @prisma/client」を実行しよう。 そして、srcディレクトリ以下にprisma.service.tsを作成しよう。 ここに、データベース接続の設定を書く。設定の記述は以下の通りである。 公式にも同じものが記述されているので、コピペするといいだろう。 中身としては、最初にインストールした@prisma/clientを用いてデータベース接続を設定している。 特に設定をいじることもないので、作法として覚えるだけで構わない。

prisma.service.tsにデータベース接続設定を記述

4.データベース操作、Userモジュールの作成

ここまで出来れば、データベースを操作するための準備はバッチリだ。 あとはUsersモジュールを作って、そこにデータベース操作をするための設定を書いていこう。 新たにモジュール、コントローラー、サービスを作る必要があるので、nestコマンドでそれぞれを作成しよう。 「nest g module users」「nest g co users」「nest g s users」を順に実行すれば作成できる。

UsersControllerとUsersServiceの記述は以下の通りである。 ControllerでPostメソッドでFormから受け取るデータ設定し、 ServiceでデータベースのUserテーブルに対して受け取ったデータをInsertする命令(user.create)を行っている。

UsersController(左)とUsersService(右)

「yarn start:dev」でNestJSを起動させ、Postmanなどで「localhost:3000/users」にemailとpasswordの値をPostしてみよう。 データ送信が成功し、確かにデータベースにデータが登録されるはずだ。これでデータベースにユーザを登録することができた。

PostmanでPostした結果(左)とSQLiteへの登録(右)


5.まとめ

今回、Prismaの設定から、ORMによるデータベース操作まで行った。 基本的な流れはこれで出来たと思ってもらって良い。 しかしながら、passwordが平文であったり、バリデーション機能(入力文字制限)がまだ出来てない。 次回は、その辺りの実装に関して説明したい。


▼参考図書、サイト

「NestJS公式ドキュメントver7日本語訳」 Zenn
「Nest.jsのORMにPrismaを導入してみる」 Qiita
 「NestJS + Next.js によるフルスタックWeb開発」 Udemy Kazu T+