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拡張機能をインストールしてください。
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比較ページを確認してください。
- 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. コントローラーを更新する
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で交流 リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりしてください。