NestJS

NestJS 10 と Prisma 5 の完全セットアップガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

開発環境と前提条件

このセクションでは、NestJS 10 と Prisma 5 を組み合わせたプロジェクトをローカルで即座に立ち上げるための必須要件をまとめます。Node のバージョン選定やデータベースの用意方法を明示することで、環境構築時の「どれが足りない?」という疑問を防ぎます。以下の手順に従えば、数分で開発可能な状態になります。

Node.js とパッケージマネージャ

  • 推奨バージョン: Node 20 以上(LTS)
  • 推奨ツール: pnpm(高速・ディスク節約)または yarn

ポイント: LTS版は ESモジュールや型定義が安定しているため、NestJS のビルドエラーを減らせます。
実装例:

データベースの準備(PostgreSQL / MySQL)

Docker コンテナでデータベースを起動すれば、OS 間の差異やバージョン衝突を回避できます。.env に接続文字列だけを書き換えることで、本番環境への移行もシームレスです。

ポイント: コンテナ化された DB はチーム全体で同一設定を共有でき、CI でも同様のイメージを使用できます。

NestJS CLI のインストール

NestJS 10 用のプロジェクトは公式 CLI で生成すると、推奨されるディレクトリ構成や設定ファイルが自動で作成されます。

src/app.module.ts が作成されたことを確認したら、次のステップへ進みましょう。


Prisma のセットアップとスキーマ定義

この章では Prisma 5 用 CLI とクライアントの導入手順、そしてデータモデルを記述する schema.prisma の基本構造をご紹介します。公式ドキュメントは頻繁に更新されるため、プレビュー機能(例: $transaction)の利用可否は必ず最新版で確認してください。

必要パッケージのインストール

パッケージ 用途 推奨インストールコマンド
prisma (devDependency) スキーマ生成・マイグレーション CLI pnpm add -D prisma
@prisma/client (dependency) 実行時に使用する型安全クライアント pnpm add @prisma/client

ポイント: 1 行のコマンドですべての雛形が作成され、以後は prisma/schema.prisma.env のみを編集すれば OK です。

ディレクトリ構造(npx prisma init 後)

  • prisma/schema.prisma …データモデルと datasource 設定
  • .env …環境変数(DB 接続文字列)を格納
  • prisma/migrations/ …自動生成されるマイグレーション履歴

データソースとジェネレータの設定例

.env(シークレット管理のベストプラクティス):

注意: $transaction は Prisma 5 のプレビュー機能の一例です。バージョンやリリースタイミングにより利用不可になる場合があります。必ず最新版ドキュメントで確認してください。


NestJS への Prisma 統合

PrismaClient を Nest の DI コンテナに組み込むだけで、アプリ全体から型安全に DB アクセスできます。この章では サービス層の実装モジュール化手順 を解説し、Graceful Shutdown(安全な終了処理)も網羅します。

PrismaService の実装

PrismaServicePrismaClient を継承し、Nest のライフサイクルフックで接続と切断を自動管理します。

ポイント: OnModuleInitBeforeApplicationShutdown を実装するだけで、サーバ起動時に自動接続・停止時に安全切断が保証されます。

PrismaModule の作成と AppModule への組み込み

ポイント: ConfigModule と併用すれば、環境変数はアプリ全体でシームレスに利用できます。


Feature Module における CRUD 実装とベストプラクティス

本節では「ユーザー管理」機能を例に、サービス層の設計、REST / GraphQL のハンドラ、トランザクション活用、エラー統一処理までを網羅します。コードは シンプルかつ再利用可能 になるよう意識しています。

UserService(ビジネスロジック層)

  • PrismaClient を DI で注入
  • 型安全な CRUD メソッドを提供
  • エラーハンドリングは HttpException に統一

REST コントローラ

  • UserService を直接呼び出すだけで完結
  • パスパラメータは数値に変換して型安全性を保つ

GraphQL リゾルバ

  • 同一サービスを再利用し、型は @nestjs/graphql のデコレータで自動生成
  • 引数は GraphQL スキーマに合わせて明示的に宣言

エラーハンドリングの統一

Prisma が投げる例外は内部情報が漏れやすいため、Nest の HttpException にマッピングします。

ポイント: 例外変換はサービス層で行うか、グローバルな ExceptionFilter に委譲するとコードがさらにシンプルになります。


マイグレーション・シード・テスト・CI/CD の実践

本章では、開発フロー全体を通した データベースのバージョン管理と自動化 を解説します。マイグレーションの作成から CI での検証まで、一連の手順が揃っていれば、本番リリース時に「スキーマが合わない」問題は起きません。

マイグレーションの実行(prisma migrate dev

  • スキーマ変更後は必ず prisma migrate dev でローカル DB に適用
  • コマンドは自動的に SQL を生成し、prisma/migrations/ に履歴を保存

ポイント: マイグレーションは Git の管理対象になるので、コードレビューで変更点を確認できます。

シードスクリプトの作成

開発・テスト環境で同一データセットを自動投入することで、手動入力ミスや環境差異を防ぎます。以下は TypeScript 版シードです。

package.json にスクリプトを追加し、マイグレーションとシードを一括実行できるようにします。

テスト環境の構築

テスト種別 推奨手法 主な利点
ユニットテスト Prisma クライアントを Jest のモックに置き換える 外部 DB に依存せず高速
E2E テスト SQLite メモリデータベース (file:./test.db?mode=memory&cache=shared) を使用 実際の SQL が走るのでロジック検証が正確

ユニットテスト例(Jest)

E2E テストで SQLite を使用する例

.env.test に以下を設定し、GitHub Actions のジョブで読み込むだけです。

テストスクリプトは通常通り pnpm test:e2e で実行可能です。

CI/CD(GitHub Actions)での自動化

CI では シークレット管理 を徹底し、ハードコーディングされた接続文字列を排除します。以下は PR 時にマイグレーション・シード・テストまで実行するワークフローです。

ポイント: DATABASE_URL はリポジトリ上に平文で残さず、GitHub の Secrets から注入します。これがシークレット管理のベストプラクティスです。


カスタマイズとブランド適合性

この記事は汎用的な構成を示していますが、企業やサービス独自のトーン・ブランディングに合わせて調整可能です。たとえば:

  • ロゴやカラーコードを README のバッジに組み込む
  • 社内ガイドラインで定められた用語(例: “ユーザー” → “顧客”)に置換
  • CI/CD では自社のシークレット管理ツール(AWS Secrets Manager、HashiCorp Vault 等)を使用するよう書き換える

上記項目はプロジェクトの docs/README.md や内部ウィキでテンプレート化すると、チーム全体で統一感のあるドキュメントが保てます。


まとめ

  • 開発環境: Node 20+pnpm、Docker 化した PostgreSQL/MySQL、NestJS CLI による即時プロジェクト生成
  • Prisma 導入: prisma@prisma/client のインストール、.env で接続情報を管理。プレビュー機能は必ず公式ドキュメントで可用性確認。
  • NestJS 統合: PrismaService(ライフサイクルフック)と PrismaModule により DI が完了し、全モジュールから型安全に DB へアクセス可能。
  • CRUD 実装: サービス層でロジックを集中管理し、REST と GraphQL のハンドラは同一サービスを再利用。トランザクションは $transaction(プレビュー機能)で実装例示。エラーは HttpException に統一。
  • マイグレーション・シード・テスト・CI: prisma migrate dev → 自動シード、ユニットテストはモック、E2E は SQLite メモリ DB、GitHub Actions では Secrets を用いた安全な環境変数注入で全工程を自動化。

これらの手順を踏めば、型安全・スケーラブルかつ運用コストが低減した NestJS 10 + Prisma 5 アプリケーション がすぐに構築できます。必要に応じてブランド固有の表現や社内ツールチェーンへ置き換えてご活用ください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-NestJS