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

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 拡張機能 をインストールしてください。

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

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

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

これで、現在のデータベーススキーマのベースラインができました。データベーススキーマにさらに変更を加えるには、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. コントローラーを更新する

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

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 の旅を続けるには、以下とつながってください。 アクティブなコミュニティ。情報を入手し、参加し、他の開発者と協力してください。

皆様のご参加を心より歓迎し、コミュニティの一員として皆様をお迎えできることを楽しみにしています。