TypeORMからPrisma ORMへの移行方法
はじめに
このガイドでは、アプリケーションをTypeORMからPrisma ORMに移行する方法を説明します。移行手順をデモンストレーションするために、TypeORM Expressの拡張例をサンプルプロジェクトとして使用します。
この移行ガイドでは、PostgreSQLをデータベースの例として使用していますが、Prisma ORMがサポートする他のリレーショナルデータベースにも同様に適用できます。Prisma ORMとTypeORMの比較については、「Prisma ORM vs TypeORM」ページで確認できます。
前提条件
このガイドを開始する前に、以下が揃っていることを確認してください。
- 移行したいTypeORMプロジェクト
- Node.jsがインストールされていること (バージョン16以降)
- PostgreSQLまたはその他のサポートされているデータベース
- TypeORMおよびExpress.jsの基本的な知識
2. 移行の準備
2.1. 移行プロセスを理解する
どのようなアプリケーションやAPIレイヤーを構築しているかに関わらず、TypeORMからPrisma ORMへの移行手順は常に同じです。
- Prisma CLIのインストール
- データベースのイントロスペクト
- ベースラインマイグレーションの作成
- Prisma Clientのインストール
- TypeORMクエリをPrisma Clientに徐々に置き換える
これらの手順は、REST API (例: Express, Koa, NestJS)、GraphQL API (例: Apollo Server, TypeGraphQL, Nexus)、またはデータベースアクセスにTypeORMを使用するその他の種類のアプリケーションを構築しているかどうかにかかわらず適用されます。
2.2. Prisma設定をセットアップする
新しいPrismaスキーマファイルを作成する
npx prisma init --output ../generated/prisma
.env
ファイル内のDATABASE_URL
をデータベース接続文字列で更新する
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
3. データベーススキーマを移行する
3.1. データベースをイントロスペクトする
既存のデータベースからPrismaスキーマを作成するためにPrismaのイントロスペクションを実行します
npx prisma db pull
これにより、データベーススキーマを含むschema.prisma
ファイルが作成されます。
3.2. ベースラインマイグレーションを作成する
データベースの現在の状態をマークするために、ベースラインマイグレーションを作成して適用します。
npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > baseline.sql
npx prisma migrate resolve --applied "baseline"
4. アプリケーションコードを更新する
4.1. Prisma Clientをインストールする
Prisma Clientパッケージをインストールします
npm install @prisma/client
Prisma Clientを生成します
npx prisma generate
4.2. TypeORMクエリを置き換える
TypeORMクエリをPrisma Clientに置き換え始めましょう。一般的なクエリの変換例をいくつか示します。
- TypeORM
- Prisma Client
// Find one
const user = await userRepository.findOne({
where: { id: 1 }
});
// Create
const user = await userRepository.save({
email: 'alice@prisma.io',
name: 'Alice'
});
// Update
await userRepository.update(1, {
name: 'New name'
});
// Delete
await userRepository.delete(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 }
});
4.3. コントローラーを更新する
Expressコントローラーを更新してPrisma Clientを使用するようにします。例えば、CreateUserAction
を更新する方法を以下に示します。
import { prisma } from '../client'
export class CreateUserAction {
async run(req: Request, res: Response) {
const { email, name } = req.body
const result = await prisma.user.create({
data: {
email,
name,
},
})
return res.json(result)
}
}
5. テストとデプロイ
5.1. 変更をテストする
移行されたすべてのエンドポイントをテストし、期待通りに動作することを確認します。
npm test
5.2. 変更をデプロイする
- スキーマの変更をデプロイします。
npx prisma migrate deploy
- 更新された依存関係とともにアプリケーションコードをデプロイします。
次のステップ
Prisma ORMへの移行が完了したら、以下を実行できます。
- Prismaの強力なクエリAPIを使用して、より複雑なクエリを追加する
- データベース管理のためにPrisma Studioをセットアップする
- データベース監視を実装する
- Prismaのテストユーティリティを使用して自動テストを追加する
詳細情報
Prismaとつながる
Prismaの旅を続けるには、以下とつながりましょう。 活発なコミュニティに参加しましょう。情報を入手し、関与し、他の開発者と協力できます。
- Xでフォローする アナウンス、ライブイベント、役立つヒントのために。
- Discordに参加する 質問をしたり、コミュニティと話したり、会話を通じて活発なサポートを得るために。
- YouTubeを購読する チュートリアル、デモ、ストリームのために。
- GitHubで関わる リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりして。