2020年3月31日

Prisma 2.0 ベータ版公開:Prisma Client によるタイプセーフなデータベースアクセス

昨年6月に Prisma 2.0 の最初のプレビュー版をご紹介しました。本日、新しいウェブサイトと更新されたPrisma 2.0 ドキュメントとともに、最初の公式ベータ版を公開できることを嬉しく思います。

更新: Prisma は本番環境に対応しました。詳細については、発表記事「Node.js & TypeScript 向け完全 ORM」をご覧ください。

Prisma 2.0 is now in beta

目次


TL;DR(要約)

  • Prisma 2.0 ベータ版がリリースされました。新しいウェブサイトとドキュメントにより、Prisma を使い始める新しい開発者にとってデフォルトとなりました。
  • Prisma 2.0 は主に、Node.js および TypeScript 用の自動生成されたタイプセーフなクエリビルダーである Prisma Client で構成されています。Prisma Migrate は実験的な機能と見なされています。
  • prisma/prisma2 リポジトリは prisma/prisma にリネームされました(以前の Prisma 1 リポジトリ prisma/prisma リポジトリは prisma/prisma1 と呼ばれるようになりました)。

新しいドキュメントのクイックスタートに従って、新しい Prisma Client を 5 分でお試しください。


Prisma Client 2.0 による最新のデータベースアクセス

新しいバージョンの Prisma Client は、Node.js および TypeScript 向けの最新のデータベースアクセスライブラリです。従来の ORM や SQL クエリビルダーの代替として、データベース内のデータの読み取りと書き込みに使用できます。

セットアップするには、Prisma スキーマファイルが必要で、Prisma Client をプロジェクトの依存関係として追加する必要があります。

Prisma Client は、あらゆる Node.js または TypeScript バックエンドアプリケーション(サーバーレスアプリケーションやマイクロサービスを含む)で使用できます。これは、REST APIGraphQL API、gRPC API、またはデータベースを必要とするその他のものにすることができます。

データベースの生産性を向上させる

Prisma Client の主な目標は、データベースを扱うアプリケーション開発者の生産性を向上させることです。これは、プレーンな JavaScript オブジェクトを返すクリーンなデータアクセス API を提供することで実現します。

このアプローチにより、データベースクエリに関する推論が簡素化され、予測可能(かつタイプセーフ)なクエリ結果に対する信頼性が高まります。Prisma Client が提供する主な利点をいくつかご紹介します。

  • コードエディタでの自動補完により、ドキュメントを参照する必要がなくなります。
  • リレーショナルデータをマッピングする代わりに、オブジェクトで考えることができます。
  • コンパイル時に検証できるタイプセーフなデータベースクエリを実現します。
  • データベースとアプリケーションモデルの単一の真実の情報源を提供します。
  • 一般的な落とし穴やアンチパターンを防ぐ健全な制約を提供します。
  • 正しいことを簡単にする抽象化(「成功への落とし穴」)を提供します。
  • 複雑なモデルオブジェクトを避けるために、クラスではなくクエリを使用します。
  • ボイラープレートの削減により、開発者はアプリの重要な部分に集中できます。

Prisma が開発者の生産性をどのように向上させるかについて詳しくは、概要をご覧ください。または、ウェブサイトでコード例を確認して、Prisma Client API の概要をご覧ください。

「スマート」Node モジュール 🤓

@prisma/client モジュールは、「従来の」Node モジュールとは異なります。従来の Node モジュール(例:lodash)では、パッケージ全体が node_modules ディレクトリにダウンロードされ、パッケージを再インストールした場合にのみ更新されます。

@prisma/client Node モジュールは異なります。これは、機能コードを含まない「ファサードパッケージ」(基本的にスタブ)です。

npm install @prisma/client一度インストールする必要がありますが、アプリケーションを開発するにつれて、node_modules/@prisma/client ディレクトリ内のコードはより頻繁に変更される可能性があります。これは、Prisma スキーマを変更するたびに、Prisma Client を再生成する必要があるため、@prisma/client Node モジュールのコードが更新されるためです。

node_modules/@prisma/client ディレクトリには、プロジェクトに合わせたコードが含まれているため、「スマート Node モジュール」と呼ばれることがあります。

Prisma smart node module

プレーンな JavaScript でも自動補完とタイプセーフのメリット

自動補完は、開発者にとって非常に強力なツールです。ドキュメントを参照する代わりに、エディタで直接 API を調べることができます。Prisma Client は、データベースクエリに自動補完をもたらします!

@prisma/client モジュールの index.d.ts に含まれている Prisma Client の生成された型のおかげで、この機能は TypeScript 開発者だけでなく、プレーンな JavaScript でアプリケーションを開発する場合にも利用できます。

部分的なデータベースクエリのタイプセーフ

他の ORM やデータベースツールと比較した Prisma Client の主な利点は、完全なタイプセーフを提供することです。これは、「部分的な」データベースクエリ(つまり、モデルのフィールドのサブセットのみをクエリする場合や、リレーションを含める場合)でも同様です。

例として、次の Prisma Client クエリを考えてみましょう(タブを切り替えて、対応するPrisma モデルを表示できます)。

結果の usersWithPartialPosts は、静的に型付けされることに注意してください。

これは、データベースから要求されなかったプロパティにタイプミスや誤ってアクセスした場合、TypeScript がエラーを検出することを意味します!

はじめに

Prisma Client を使い始める最良の方法は、ドキュメントのクイックスタートに従うことです。


クイックスタート(5 分)

または、次の方法も使用できます。

今回のリリース内容

Prisma 2.0 ベータ版には、次のツールが付属しています。

  • Prisma Client:Node.js および TypeScript 用の自動生成されたタイプセーフなクエリビルダー
  • Prisma Migrate実験的):宣言的なスキーマ移行ツール
  • Prisma Studio実験的):データベース内のデータを表示および編集するための GUI

新しいドキュメントのクイックスタートに従って、新しい Prisma Client を 5 分でお試しください。

:ベータ版リリースの詳細については、リリースノートをご覧ください。

prisma2 リポジトリから prisma へのリネーム

最初のリリース以来、Prisma 2.0 のメインリポジトリは prisma2 と呼ばれていました。

Prisma 2.0 が Prisma を使い始める開発者にとってデフォルトになったため、Prisma リポジトリは次のようにリネームされました。

  • prisma/prisma2 リポジトリは prisma/prisma にリネームされました。
  • prisma/prisma リポジトリは prisma/prisma1 にリネームされました。

prisma2 CLI のリネーム

プレビュー期間中、Prisma 2.0 の CLI は prisma2 コマンドを使用して呼び出されていました。Prisma 2.0 が Prisma を使い始める新しい開発者にとってデフォルトになったため、コマンドは単に prisma に変更されました。既存の Prisma 1 の prisma コマンドは prisma1 にリネームされました。

また、npm パッケージのインストールも変更されることに注意してください。

Prisma バージョン古い CLI コマンド新しい CLI コマンド古い npm パッケージ名新しい npm パッケージ名
2.0prisma2prismaprisma2@prisma/cli
1.Xprismaprisma1prismaprisma1

現在の Prisma 1 ユーザーへの注意

現在 prisma コマンドで Prisma 1 を使用している場合は、これまでどおり使用し続けることができます。Prisma 2.0 にアップグレードしたい場合は、現在の prisma インストールをアンインストールし、必要なプロジェクトに新しい CLI バージョンをローカルにインストールすることをお勧めします。

prisma2 npm パッケージは非推奨

prisma2 npm パッケージは非推奨になりました。インストール時の混乱を防ぐために、インストールしようとすると次の出力が表示されるようになりました。


現在 Prisma 1 を使用していますが、どうすればよいですか?

まず、既存のすべての Prisma 1 ユーザーに心から感謝申し上げます!🙏 GitHub とSlackで形成された、協力的で活発なコミュニティに深く感謝しています!

Prisma 2.0 は Prisma 1 とどのように異なりますか?

Prisma 2.0 は、Prisma 1 と比較して多くの変更が加えられています。主な違いの概要を以下に示します。

  • Prisma 2.0 では、データベースプロキシサーバー(つまり、Prisma サーバー)をホストする必要はありません。
  • Prisma 2.0 は、「データベース用の GraphQL API」を公開しなくなりましたが、Prisma Client API を介したプログラムによるアクセスのみを許可します。
  • Prisma 2.0 は、Prisma 1 の機能をよりモジュール化し、専用ツールに分割します。
    • Prisma Client:Prisma client 1.0 の改良版
    • Prisma Migrate:データモデリングと移行(以前の prisma deploy)。
  • より強力なイントロスペクションにより、Prisma 2.0 を既存のデータベースに接続できます。
  • Prisma 1 データモデルと prisma.yml は、Prisma スキーマに統合されました。
  • Prisma 2.0 は、GraphQL SDL に基づくのではなく、独自のモデリング言語を使用します。
  • Nexus またはその他の任意のGraphQL ライブラリを使用して、Prisma で GraphQL サーバーを構築できます。

Prisma 1 ドキュメントにアクセスするにはどうすればよいですか?

https://prisma.dokyumento.jp/docs にバージョン番号を追加することで、Prisma 1 ドキュメントの特定のバージョンにアクセスし続けることができます。たとえば、Prisma バージョン 1.34 のドキュメントを表示するには、https://v1.prisma.io/docs/1.34/ にアクセスしてください。

Prisma 1 の例は、prisma1-examples リポジトリに移動されました。

アップグレードすべきですか?

アップグレードすべきかどうかは、プロジェクトのコンテキストによって異なります。一般的に、主な考慮事項の 1 つは、Prisma Migrate がまだ実験的であるという事実です。これは、今後のデータベーススキーマの調整は、SQL または別の移行ツールを使用して行う必要がある可能性が高いことを意味します。

また、今後数週間以内に、アップグレードガイドと専用ツールもまとめます。したがって、Prisma Migrate がまだ準備ができていないにもかかわらずアップグレードしたい場合は、これらのリソースが整うまで待つ価値があるかもしれません。

Prisma 1 と Prisma client および nexus-prisma を使用していますが、アップグレードすべきですか?

Prisma 1 および nexus-prisma で実行されているプロジェクトを Prisma 2.0 にアップグレードすることは確かに可能です。

アップグレードを決定した場合、Prisma 2.0 にアップグレードした後にデータベーススキーマを変更すると、SQL またはサードパーティの移行ツールを使用して移行を実行する必要があることに注意してください。また、Prisma 2.0 では nexus-prisma API が変更されることにも注意してください。

アップグレードに必要な手順の概要を以下に示します。

  1. プロジェクトに Prisma 2.0 CLI をインストールします:npm install @prisma/cli --save-dev
  2. Prisma 1 データベースを指す datasource を使用して Prisma スキーマを作成します。
  3. Prisma 1 データベースをイントロスペクトしてデータモデルを取得します:npx prisma introspect
  4. Prisma Client npm パッケージをインストールします:npm install @prisma/client
  5. Prisma Client JS を生成します:npx prisma generate
  6. nexus-prisma の最新バージョンにアップグレードし、リゾルバーを調整します。

:Prisma サーバーのデプロイに使用した Docker Compose ファイルでデータベースの資格情報を見つけることができます。これらの資格情報は、Prisma 2.0 の接続 URLを構成するために必要です。

Prisma 1 と Prisma client(nexus-prisma なし)を使用していますが、アップグレードすべきですか?

Prisma 1 で実行されているプロジェクトをアップグレードすることは確かに可能です。

アップグレードを決定した場合、Prisma 2.0 にアップグレードした後にデータベーススキーマを変更すると、SQL またはサードパーティの移行ツールを使用して移行を実行する必要があることに注意してください。アップグレードに必要な手順の概要を以下に示します。

  1. プロジェクトディレクトリに移動します
  2. プロジェクトに Prisma 2.0 CLI をインストールします:npm install @prisma/cli --save-dev
  3. Prisma 1 データベースを指す datasource を使用して Prisma スキーマを作成します。
  4. Prisma 1 データベースをイントロスペクトしてデータモデルを取得します:npx prisma introspect
  5. Prisma Client npm パッケージをインストールします:npm install @prisma/client
  6. Prisma Client JS を生成します:npx prisma generate
  7. Prisma client 1.0 の以前の使用箇所を新しい Prisma Client 2.0 に更新します

:Prisma サーバーのデプロイに使用した Docker Compose ファイルでデータベースの資格情報を見つけることができます。これらの資格情報は、Prisma 2.0 の接続 URLを構成するために必要です。

Prisma 1 と prisma-binding を使用していますが、アップグレードすべきですか?

Prisma 1 および prisma-binding で実行されているプロジェクトを Prisma 2.0 にアップグレードすることは確かに可能です。

アップグレードを決定した場合、Prisma 2.0 にアップグレードした後にデータベーススキーマを変更すると、SQL またはサードパーティの移行ツールを使用して移行を実行する必要があることに注意してください。

また、GraphQL リゾルバーの実装方法も Prisma 2.0 で変更されることに注意してください。Prisma 2.0 はデータベース用の GraphQL API を公開しないため、prisma-binding npm パッケージをもう使用できません。これは主にリレーションの実装に関連しており、これらのリゾルバーは型レベルで実装する必要があります。これがなぜ必要なのかについて詳しくは、GraphQL スキーマの基本に関するこの記事を必ずお読みください。

アップグレードに必要な手順の概要を以下に示します。

  1. プロジェクトに Prisma 2.0 CLI をインストールします:npm install @prisma/cli --save-dev
  2. Prisma 1 データベースを指す datasource を使用して Prisma スキーマを作成します。
  3. Prisma 1 データベースをイントロスペクトしてデータモデルを取得します:npx prisma introspect
  4. Prisma Client npm パッケージをインストールします:npm install @prisma/client
  5. Prisma Client JS を生成します:npx prisma generate
  6. prisma-binding の代わりに Prisma Client を使用するようにリゾルバーを調整します。

コードファーストアプローチに切り替えたい場合は、GraphQL Nexus をご確認ください。

:Prisma サーバーのデプロイに使用した Docker Compose ファイルでデータベースの資格情報を見つけることができます。これらの資格情報は、Prisma 2.0 の接続 URLを構成するために必要です。

Prisma 2.0 を試してフィードバックを共有してください

Prisma 2.0 のベータ版をようやく公開できることを非常に嬉しく思っており、皆様がこれで何を構築するのか楽しみにしています。


Prisma 2.0 を始める

フィードバックを残したり、アイデアを共有したり、機能リクエストを作成したり、バグレポートを送信したりする場合は、(リネームされた)GitHub のprismaリポジトリで行い、(リネームされた)#prisma2-betaチャネル(Prisma Slack)にご参加ください!

次回の投稿をお見逃しなく!

Prisma ニュースレターにサインアップ