メインコンテンツへスキップ

SequelizeからPrisma ORMへ移行する方法

15分

はじめに

このガイドでは、アプリケーションをSequelizeからPrisma ORMへ移行する方法を説明します。移行手順をデモンストレーションするために、Sequelize Expressの例の拡張バージョンをサンプルプロジェクトとして使用します。

この移行ガイドでは、例としてPostgreSQLデータベースを使用していますが、Prisma ORMがサポートする他のリレーショナルデータベースにも同様に適用できます。Prisma ORMとSequelizeの比較については、Prisma ORM vs Sequelizeのページで確認できます。

前提条件

このガイドを開始する前に、以下が揃っていることを確認してください

  • 移行したいSequelizeプロジェクト
  • Node.jsがインストールされていること(バージョン18以上)
  • PostgreSQLまたはその他のサポートされているデータベース
  • SequelizeとExpress.jsの基本的な知識

1. 移行の準備

1.1. 移行プロセスの理解

SequelizeからPrisma ORMへの移行手順は、どのようなアプリケーションやAPIレイヤーを構築しているかにかかわらず、常に同じです

  1. Prisma CLIをインストールする
  2. データベースをイントロスペクトする
  3. ベースラインマイグレーションを作成する
  4. Prisma Clientをインストールする
  5. SequelizeクエリをPrisma Clientに徐々に置き換える

これらの手順は、REST API(例:Express、Koa、NestJS)、GraphQL API(例:Apollo Server、TypeGraphQL、Nexus)、またはデータベースアクセスにSequelizeを使用するあらゆる種類のアプリケーションを構築している場合に適用されます。

1.2. Prisma設定をセットアップする

新しいPrismaスキーマファイルを作成する

npx prisma init --output ../generated/prisma

このコマンドは、prismaという新しいディレクトリを以下のファイルとともに作成しました

  • schema.prisma: データベース接続とモデルを指定するPrismaスキーマ
  • .env: データベース接続URLを環境変数として設定するためのdotenvファイル

現在のPrismaスキーマは以下のようになります

prisma/schema.prisma
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}
ヒント

VS Codeを使用している場合は、構文ハイライト、フォーマット、オートコンプリートなど、多くの便利な機能のためにPrisma VS Code拡張機能をインストールしてください。

DATABASE_URL.envファイル内のデータベース接続文字列で更新します

DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"

2. データベーススキーマを移行する

2.1. データベースをイントロスペクトする

既存のデータベースからPrismaスキーマを作成するために、Prismaのイントロスペクションを実行します

npx prisma db pull

これにより、データベーススキーマを含むschema.prismaファイルが作成されます。

2.2. ベースラインマイグレーションを作成する

Prisma Migrateを使用してデータベーススキーマを進化させ続けるには、データベースをベースライン化する必要があります。

まず、migrationsディレクトリを作成し、その中に移行用の任意の名前のディレクトリを追加します。この例では、移行名として0_initを使用します

mkdir -p prisma/migrations/0_init

次に、prisma migrate diffを使用して移行ファイルを生成します。以下の引数を使用します

  • --from-empty: 移行元のデータモデルが空であると仮定します
  • --to-schema-datamodel: datasourceブロック内のURLを使用して現在のデータベース状態を示します
  • --script: SQLスクリプトを出力します
npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql
npx prisma migrate resolve --applied 0_init

このコマンドは、0_init_prisma_migrationsテーブルに追加することで適用済みとしてマークします。

これで、現在のデータベーススキーマのベースラインができました。データベーススキーマにさらに変更を加えるには、Prismaスキーマを更新し、prisma migrate devを使用して変更をデータベースに適用できます。

3. アプリケーションコードを更新する

3.1. Prisma Clientをインストールする

次のステップとして、プロジェクトにPrisma Clientをインストールし、現在Sequelizeで行われているデータベースクエリの置き換えを開始できます

npm install @prisma/client

Prisma Clientのインストール後、Prisma Clientコードを生成できます

npx prisma generate

3.2. Sequelizeクエリを置き換える

このセクションでは、サンプルREST APIプロジェクトの例のルートに基づいて、SequelizeからPrisma Clientに移行されるいくつかのサンプルクエリを紹介します。Prisma Client APIがSequelizeとどのように異なるかについて包括的に理解するには、API比較ページを確認してください。

// Find one
const user = await User.findOne({
where: { id: 1 }
});

// Create
const user = await User.create({
email: 'alice@prisma.io',
name: 'Alice'
});

// Update
await User.update({ name: 'New name' }, {
where: { id: 1 }
});

// Delete
await User.destroy({
where: { id: 1 }
});

3.3. コントローラーを更新する

Expressコントローラーを更新してPrisma Clientを使用するようにします。たとえば、ユーザーコントローラーを更新する方法は次のとおりです

import { prisma } from '../client'

export class UserController {
async create(req: Request, res: Response) {
const { email, name } = req.body

const result = await prisma.user.create({
data: {
email,
name,
},
})

return res.json(result)
}
}

次のステップ

Prisma ORMに移行したことで、以下のことが可能になります

  • Prismaの強力なクエリAPIを使用して、より複雑なクエリを追加する
  • データベース管理のためにPrisma Studioをセットアップする
  • データベース監視を実装する
  • Prismaのテストユーティリティを使用して自動テストを追加する

詳細情報


Prismaとつながる

Prismaの旅を続けるには、以下とつながりましょう 活発なコミュニティに参加しましょう。情報を受け取り、関わり、他の開発者と協力してください

  • Xでフォロー お知らせ、ライブイベント、役立つヒントを得られます。
  • Discordに参加 質問したり、コミュニティと話したり、会話を通じて活発なサポートを得られます。
  • YouTubeを購読 チュートリアル、デモ、ストリームを視聴できます。
  • GitHubで交流 リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりしてください。
皆様のご参加を心より歓迎し、コミュニティの一員となっていただけることを楽しみにしております!

© . All rights reserved.