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

目次


要約

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

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


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

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

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

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/cli1.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.ymlPrismaスキーマに統合されました。
  • Prisma 2.0はGraphQL SDLに基づくのではなく、独自のモデリング言語を使用しています。
  • Prismaを使用してGraphQLサーバーを構築するには、Nexusまたはお好みのGraphQLライブラリを使用できます。

Prisma 1のドキュメントにアクセスするには?

Prisma 1の特定のバージョンのドキュメントにアクセスし続けるには、https://prisma.dokyumento.jp/docsにバージョン番号を追加します。たとえば、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またはサードパーティのマイグレーションツールでマイグレーションを実行する必要があることに注意してください。

また、Prisma 2.0ではGraphQLリゾルバーの実装方法が変更されることにも注意してください。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リポジトリで行い、Prisma Slackの(リネームされた)#prisma2-betaチャンネルに参加してください!

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

Prismaニュースレターに登録

© . All rights reserved.