← NestJS コース
25. データベース接続 — TypeOrmModule
NestJS からデータベースを使うには、まず接続設定を1か所にまとめます。TypeORM を使う場合は TypeOrmModule.forRoot() を AppModule の imports に登録し、DB の種類(type)・ホスト・認証情報・対象とするエンティティ(entities)などを渡します。これは既習の ConfigModule.forRoot() と同じ「モジュールに設定を流し込んで初期化する」パターンで、ORM が違っても接続設定を一元化する考え方は共通です。
実務では接続情報を直書きせず、ConfigModule で読み込んだ環境変数から組み立てるのが定番です。host や password のような環境ごとに変わる値を .env に置けば、開発・本番で同じコードのまま接続先だけ切り替えられます。
最大のつまずきポイントは synchronize オプションです。true にするとエンティティ定義に合わせて DB のテーブルを自動で作り替えてくれて開発初期は便利ですが、本番で有効にすると意図しない列削除などでデータが消える危険があります。本番では必ず false にし、スキーマ変更はマイグレーションで管理します。
サンプルコード(フレームワーク環境が必要なため表示のみ)
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { User } from "./user.entity";
@Module({
imports: [
// 接続設定を1か所にまとめる(値は環境変数から渡すのが定番)
TypeOrmModule.forRoot({
type: "postgres",
host: process.env.DB_HOST,
port: 5432,
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: "app",
entities: [User], // このDBで扱うエンティティ
synchronize: false, // 本番では必ず false(自動変更は危険)
}),
],
})
export class AppModule {}
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗