Sequelize から Prisma ORM への移行方法
はじめに
このガイドでは、アプリケーションを 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 レイヤーを構築している場合でも常に同じです。
- Prisma CLI をインストールする
- データベースをイントロスペクションする
- ベースライン移行を作成する
- Prisma Client をインストールする
- 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 スキーマは次のようになっています。
// 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 比較 ページを確認してください。
- Sequelize
- Prisma Client
// 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 }
});
// Find one
const user = await prisma.user.findUnique({
where: { id: 1 }
});
// Create
const user = await prisma.user.create({
data: {
email: 'alice@prisma.io',
name: 'Alice'
}
});
// Update
await prisma.user.update({
where: { id: 1 },
data: { name: 'New name' }
});
// Delete
await prisma.user.delete({
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 の旅を続けるには、以下とつながってください。 アクティブなコミュニティ。情報を入手し、参加し、他の開発者と協力してください。
- X でフォローしてください お知らせ、ライブイベント、役立つヒントを入手してください。
- Discord に参加してください 質問をしたり、コミュニティと話したり、会話を通じてアクティブなサポートを受けたりできます。
- YouTube でチャンネル登録してください チュートリアル、デモ、ストリームをご覧ください。
- GitHub で参加してください リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりしてください。