2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Prisma入門】TypeScriptで型安全にデータベース操作を行うORMの基本をまとめてみた

2
Posted at

はじめに

Node.js / TypeScriptでバックエンド開発を行う際、
データベース操作の実装方法に悩むことがあると思います。

例えば以下のような課題があります。

  • SQLを書くのが大変
  • 型安全にデータ操作を行いたい
  • DB構造とアプリケーションコードの整合性を保ちたい

これらを解決する手段の一つが ORM(Object Relational Mapping) です。

その中でも近年よく利用されているORMが
Prisma ORM です。

Prismaは TypeScriptとの親和性が高く、型安全なデータベース操作ができるORM として広く利用されています。

この記事では、Prismaの基本構造と基本操作について整理します。

Prismaとは

Prismaは Node.js / TypeScript向けのORM です。

ORM(Object Relational Mapping)は

アプリケーションのオブジェクトとリレーショナルデータベースのテーブルを対応付けて操作する仕組み

を指します。

例えば通常のSQLでは

SELECT * FROM users;

と書くデータ取得処理を

Prismaでは次のように書くことができます。

const users = await prisma.user.findMany();

このように TypeScriptからデータベース操作を行うことが可能になります。

なおPrismaでは $queryRaw を使用することで
SQLを直接実行することも可能です。

Prismaの全体構造

ChatGPT Image 2026年3月4日 10_19_46.png

簡単に整理すると

TypeScriptコード
      ↓
Prisma Client
      ↓
Query Engine
      ↓
Database

という流れでデータベース操作が行われることになります。

Prismaの主要コンポーネント

Prismaは主に以下の要素で構成されています。

コンポーネント 役割
schema.prisma データモデル定義
Prisma Client 型安全なDB操作API
Prisma Migrate DBスキーマ変更管理

schema.prisma

Prismaでは schema.prisma にデータモデルを定義します。

例:

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}

このファイルでは
データモデル
リレーション
データベース接続設定
などを定義します。

Prisma Client生成

スキーマを定義した後、以下のコマンドを実行します。

npx prisma generate

これにより Prisma Client が生成されます。

Prisma Clientは
型安全なデータベースクエリを提供するライブラリです。

CRUD操作

Prisma Clientでは基本的なCRUD操作を簡潔に記述できます。

データ取得

const users = await prisma.user.findMany();

条件検索

const user = await prisma.user.findFirst({
  where: {
    email: "test@example.com"
  }
});

データ作成

await prisma.user.create({
  data: {
    name: "Taro",
    email: "taro@example.com"
  }
});

データ更新

await prisma.user.update({
  where: { id: 1 },
  data: { name: "Jiro" }
});

データ削除

await prisma.user.delete({
  where: { id: 1 }
});

select と include の違い

Prismaでは取得するデータの範囲を制御するため
selectinclude を使用できます。

select

取得するフィールドを指定します。

const users = await prisma.user.findMany({
  select: {
    name: true,
    email: true
  }
});

include

リレーションデータを含めて取得します。

const users = await prisma.user.findMany({
  include: {
    posts: true
  }
});

※同一階層では selectinclude を同時に指定することはできません。
ただしネストしたリレーションでは組み合わせて使用することが可能です。

初学者がハマりやすいポイント

Prismaを学習する中で、いくつか注意点がありました。

schema変更後はgenerateが必要
schema.prisma を変更した場合

npx prisma generate

を実行しないとPrisma Clientに反映されません。

DB操作は非同期処理

Prisma Clientは非同期処理のため

await prisma.user.findMany()

のように awaitを付ける必要があります。

Prismaのメリット

型安全なクエリ

Prisma Clientはスキーマから型を生成するため
存在しないカラムを指定すると コンパイル時にエラーになります。

可読性が高い

SQLを書く場合と比較して
オブジェクト操作に近い形でクエリを書くことができます。

スキーマ中心の設計

schema.prisma を中心に

  • DB構造
  • リレーション
  • マイグレーション

を管理できるため
アプリケーションとデータベースの整合性を保ちやすくなります。

まとめ

Prismaは

  • TypeScriptと相性の良いORM
  • 型安全なDB操作が可能
  • スキーマ中心の設計
    という特徴を持っています。

Node.js / TypeScript環境でバックエンド開発を行う場合
有力な選択肢の一つだと感じました。

おわりに

Prismaを学習する中で、型安全なDB操作の便利さを実感しました。

まだ理解が浅い部分もあるため
もし認識が間違っている点や補足などあれば
コメントで教えていただけると嬉しいです。

参考資料

Prisma公式ドキュメント

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?