TypeORM から Prisma ORM への移行方法
はじめに
このガイドでは、アプリケーションを TypeORM から Prisma ORM に移行する方法を説明します。TypeORM Express の例の拡張バージョン (TypeORM Express の例) をサンプルプロジェクトとして使用して、移行手順を実証します。
この移行ガイドでは、PostgreSQL を例示データベースとして使用していますが、Prisma ORM がサポートする他のリレーショナルデータベースにも同様に適用できます。Prisma ORM と TypeORM の比較については、「Prisma ORM vs TypeORM」ページをご覧ください。
前提条件
このガイドを開始する前に、以下をご確認ください。
- 移行したい TypeORM プロジェクト
- Node.js がインストール済みであること(バージョン 16 以上)
- PostgreSQL またはその他のサポートされているデータベース
- TypeORM および Express.js の基本的な知識
2. 移行の準備
2.1. 移行プロセスを理解する
TypeORM から Prisma ORM への移行手順は、どのようなアプリケーションや API レイヤーを構築しているかにかかわらず、常に同じです。
- 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 (旧Twitter) でフォローしてください お知らせ、ライブイベント、役立つヒントをお届けします。
- Discord に参加してください 質問をしたり、コミュニティと話したり、会話を通じて積極的なサポートを受けることができます。
- YouTube でチャンネル登録 チュートリアル、デモ、ストリームをご覧ください。
- GitHub で交流しましょう リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりできます。