本日、Prisma v6をリリースしました!前回のメジャーバージョン以降、ユーザーからのフィードバックを取り入れ、Prisma ORMをより高速に、より柔軟にするための開発に精力的に取り組んできました。タイプセーフな生SQLクエリのような素晴らしい機能も追加されています。
Prisma v6: 知っておくべきこと
Prisma ORMのメジャーバージョンアップを再びリリースできることを大変嬉しく思います。この機会に、Prisma v5以降に起こったすべてのことをおさらいしたいと思います。
Prisma ORMをご利用中でv6へのアップグレードをご希望の場合は、アップグレードガイドをご確認ください。
v6へのアップグレード
パフォーマンス: JOINとより効率的なクエリ
Prisma ORMの開発では、「まず動作させ、次に正しく動作させ、そして高速化する」というアプローチをとってきました。2021年の初期リリース以降、私たちは継続的にクエリパフォーマンスの向上に投資しており、前回のメジャーリリース以降、クエリ速度を大幅に改善できたことを誇りに思います。
最適なJOIN戦略を選択する
原理的には、外部キーを介して関連する複数のテーブルからデータをクエリする必要がある場合、2つの異なるアプローチがあります
- データベースレベル: SQLの
JOIN
キーワードを使用して単一のクエリをデータベースに送信し、データをデータベースによって直接結合させます。 - アプリケーションレベル: 個々のテーブルに対して複数のクエリをデータベースに送信し、アプリケーション内で自分でデータを結合します。
ユースケース、データベーススキーマ、およびその他のいくつかの要因に応じて、一方の戦略がもう一方よりも適切である場合があります。Prisma ORM v5.7.0までは、Prisma ORMは常にアプリケーションレベルのJOIN戦略を使用していました。
しかし、v5.7.0のリリースにより、ユースケースに最適なJOIN戦略を選択できるようになり、常にクエリで最高のパフォーマンスを得られるようになりました。結合戦略を選択するには、関連クエリでrelationLoadStrategy
オプションを使用できます。例:
これら2つのアプローチが内部でどのように機能し、どのJOIN戦略を優先すべきかについて詳しく知りたい場合は、このブログ記事をご覧ください: Prisma ORMが最適な結合戦略の選択を可能に (プレビュー)。
ネストされた作成操作におけるパフォーマンスの改善
Prisma ORMでは、例えばネストされたクエリで複数の新しいレコードを作成できます。
v5.11.0以前のバージョンでは、Prisma ORMはこれを複数のSQL INSERT
クエリに変換し、それぞれがデータベースへの独自のラウンドトリップを必要としていました。このリリース以降、これらのネストされた create
クエリは最適化され、 INSERT
クエリは単一のラウンドトリップでデータベースに 一括 送信されるようになりました。これらの最適化は、一対多および多対多のリレーションシップの両方に適用されます。
v5以降のほぼすべてのリリースでクエリが高速化
GitHubでPrisma ORMのリリースを確認すると、ほぼすべてのリリースで何らかのパフォーマンス改善がなされていることがわかります。
私たちは、クエリが可能な限り高速になるよう、クエリパフォーマンスへの投資を継続することを約束します💚 ちなみに、Prisma ORMが他のTypeScript ORMとパフォーマンス面でどのように比較されるかに興味がある場合は、私たちのTypeScript ORMベンチマークをご確認ください。
柔軟性: Node.jsドライバー、Edge対応、複数スキーマファイルなど
この1年で、私たちはパフォーマンスを向上させただけでなく、Prisma ORMをさらに柔軟にしました。Prisma v5以降、Prisma ORMを新しい環境(Cloudflare Workersや、Expo経由でReact Nativeアプリでも)や新しいデータベースで使用できるようになり、schema.prisma
を複数のファイルに分割する、一括作成クエリから作成されたレコードを返す、クエリの結果ペイロードから特定のフィールドを除外するといった非常に人気のある機能を実装しました。
PlanetScaleとNeonのサーバーレスドライバーをサポート
PlanetScaleとNeonの両社は、データベースインスタンスにHTTP(データベース接続で一般的に使用されるTCPの代わりに)を介してアクセスできるサーバーレスドライバーをリリースしました。これらのサーバーレスドライバーは、TCP接続の開始が高価すぎたり、まったく不可能であったりするサーバーレスおよびエッジ環境で特に役立ちます。
v5.4.0では、Prisma ORMにおけるカスタムデータベースドライバーのサポートをリリースし、PlanetScaleとNeonの両サーバーレスドライバーの使用を可能にしました。以下は、PlanetScaleインスタンスに彼らのサーバーレスドライバーを使用して接続する例です。
Prisma ORM: エッジ対応のデータベース連携方法
Cloudflare WorkersやVercel Edge Functionsのようなエッジ関数は、人気が高まっています。それらの高い地理的分散とユーザーへの近さのおかげで、超高速な応答時間を可能にします。
v5.11.0以降、Prisma ORMはこれらのエッジ環境で使用できるようになりました。これは大きな成果であり、開発者がPrisma ORMでエッジで何を構築するのか、楽しみにしています!
この機能の詳細については、こちらのブログ記事をご覧ください: Prisma ORMのエッジ関数サポートがプレビュー版として利用可能に。
新しいデータベース: D1とTurso
v5以降、新しいランタイムでのPrisma ORMの使用を可能にしただけでなく、Cloudflare D1やTursoといった新しいデータベースのサポートも追加しました。
両データベースはSQLiteをベースにしており、エッジでのアプリケーション構築に適しています。
Prismaスキーマを複数のファイルに分割
v5.15.0では、人気の高い機能リクエストに取り組み、Prismaスキーマを構成する複数のファイルを持てるようにしました。例えば、各々が単一のモデルを含む以下の2つのファイルを保持できるようになりました。
user.prisma
post.prisma
マイグレーションや他のPrisma CLIコマンドを実行すると、CLIは個々のファイルを単一のファイルに結合します。この機能の詳細については、私たちの発表ブログ記事をご覧ください: v5.15でPrismaスキーマを複数のファイルに整理する
Prisma Client APIの柔軟性を高める
これらの改善に加えて、Prisma Client APIに新しい機能も組み込み、データベースからのデータクエリをさらに簡単かつ便利にしました。
例として、新しいcreateManyAndReturn()
クエリを使用すると、単一のクエリで複数のレコードを作成し、同時にすべての新しいレコードを返すことができます。
以前のバージョンでは、一度に複数のレコードを作成する唯一の方法はcreateMany
を使用することでしたが、これは作成されたレコードの数しか返しませんでした。
Prisma Client APIの柔軟性を高めるもう一つの例は、新しいomit
オプションです。select
の対応物であり、クエリの結果ペイロードからフィールドを除外できます。
上記のクエリは、password
フィールドを除いて、User
モデルのすべてのフィールドを返します。
Typed SQL: タイプセーフな生SQLクエリ
最後に、今年提供した最もエキサイティングな機能の1つは、タイプセーフな生SQLクエリを記述する方法でした。この追加により、Prisma ORMは今、両方の長所を提供します。ほとんどのクエリに対して便利な高レベルの抽象化と、生SQLに対する柔軟でタイプセーフなエスケープハッチです。
アプリケーションで記述する必要があるかもしれない生SQLクエリの例を考えてみましょう。
生成ステップの後、Prisma Clientの新しい$queryRawTyped
メソッドを介して、conversionByVariant
クエリを使用できるようになります。
これについては、私たちのブログで詳しく学ぶことができます: TypedSQLを発表: Prisma ORMで生SQLクエリをタイプセーフに
もう一つ: Prisma Postgres — Prisma ORMと連携するのに最適なデータベース
Prisma ORMで大きな進歩を遂げた一方で、最も注目すべきは、Prisma ORMと連携するのに最適なデータベースであるPrisma Postgresの最近のローンチです!
Prisma Postgresは、ストレージとクエリに対して 従量課金制 の料金設定で、開発者に 常時稼働 のデータベースを提供するマネージドPostgreSQLサービスです (固定費なし、コンピューティングコストなし)。サーバーレスデータベースのようですが、コールドスタートがなく、手厚い無料枠があります!
これらの機能を持つサービスを構築するために、私たちはベアメタルマシン、画期的なミリ秒単位のクラウドスタック、そして超軽量なマイクロVMとして動作する ユニカーネル (「超専門化されたオペレーティングシステム」と考えてください)を用いた独自のアーキテクチャを設計しました。
Prisma製品のファーストクラス統合のおかげで、Prisma Postgresは接続プーリング、キャッシング、リアルタイムサブスクリプション、およびクエリ最適化の推奨機能 をすぐに利用できます。
Prisma Postgresを試す
ご支援ありがとうございます 💚
皆さん—私たちの素晴らしいコミュニティ—のおかげで、私たちはTypeScriptエコシステムで最も人気のあるORMを開発することができました。
皆様からの継続的なサポート、フィードバック、そしてPrismaを日々より良くするためのご意見に心から感謝いたします。
ヘルプリクエスト、嬉しい賛辞、建設的なフィードバックなど、共有したいことがあれば、いつでも私たちのDiscordやXでお気軽にお問い合わせください。
✨ 私たちは常に改善に努めています!最近Prisma ORMをご利用になられた方は、こちらの2分間のアンケートでご意見をお聞かせいただけると幸いです。
次回の投稿をお見逃しなく!
Prismaニュースレターに登録する