Dev Study
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つの具体例で確認します。

公式ドキュメントで詳しく ↗