警告:このチュートリアルは古く、メンテナンスされていません。 これは、現在活発に開発されていないPrisma1に基づいています。 Prisma 最新バージョンに関するすべてを学ぶには、公式のPrismaドキュメントにアクセスしてください。

Prismaを使用してサーバー側アプリケーションを構築する方法を学びたい場合は、次の新しいチュートリアルに従うことができます。

著者は、 Write for DOnations プログラムの一環として、 Electronic FrontierFoundationを選択して寄付を受け取りました。

序章

Prisma は、アプリケーションの従来のオブジェクトリレーショナルマッピングツール(ORM)に代わるデータレイヤーです。 Prismaは、GraphQLサーバーとREST APIの両方の構築をサポートし、タイプセーフティに重点を置いてデータベースアクセスを簡素化し、宣言型データベース移行を可能にします。 型安全性は、潜在的なコードエラーと不整合を減らすのに役立ちますが、宣言型データベースの移行により、データモデルをバージョン管理に保存できます。 これらの機能は、開発者がデータベースアクセス、移行、およびデータ管理ワークフローの設定に集中する時間を削減するのに役立ちます。

データベースのプロキシとして機能するPrismaサーバーをさまざまな方法で展開し、リモートまたはローカルでホストできます。 Prismaサービスを介して、データにアクセスし、GraphQL APIを使用してデータベースに接続できます。これにより、リアルタイム操作と、データの作成、更新、および削除が可能になります。 GraphQLはAPIのクエリ言語であり、ユーザーがクエリを送信して、サーバーから必要な正確なデータにアクセスできるようにします。 Prismaサーバーは、データベースの最上位にあるスタンドアロンコンポーネントです。

このチュートリアルでは、Ubuntu 18.04にPrismaサーバーを手動でインストールし、 GraphQLPlaygroundでテストGraphQLクエリを実行します。 リモートサーバーでPrismaを実行しながら、Prismaセットアップコードと開発をローカル(実際にアプリケーションをビルドする場所)でホストします。 インストールを手動で実行することにより、セットアップの基盤となるインフラストラクチャをより深く理解し、カスタマイズできるようになります。

このチュートリアルでは、Ubuntu 18.04サーバーにPrismaをデプロイするための手動の手順について説明しますが、Prismaのサイトでこのチュートリアルに従うことで、DockerMachineを使用してより自動化された方法でこれを実行することもできます。

:このセクションで説明するセットアップには、自動バックアップやアクティブフェイルオーバーなど、本番環境対応サーバーに通常期待される機能は含まれていません。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—Prismaサーバーを起動する

Prisma CLIは、Prismaサービスの展開と管理に使用される主要なツールです。 サービスを開始するには、必要なインフラストラクチャをセットアップする必要があります。これには、Prismaサーバーとそれに接続するためのデータベースが含まれます。

Docker Composeを使用すると、マルチコンテナーアプリケーションを管理および実行できます。 これを使用して、Prismaサービスに必要なインフラストラクチャをセットアップします。

まず、docker-compose.ymlファイルを作成して、Prismaサービス構成をサーバーに保存します。 このファイルを使用して、関連するデータベースであるPrismaを自動的に起動し、必要な詳細をすべて1つのステップで構成します。 ファイルがDockerComposeでスピンアップされると、データベースのパスワードが構成されるため、managementAPIsecretおよびMYSQL_ROOT_PASSWORDのパスワードを安全なものに置き換えてください。 次のコマンドを実行して、docker-compose.ymlファイルを作成および編集します。

  1. sudo nano docker-compose.yml

次のコンテンツをファイルに追加して、Prismaセットアップのサービスとボリュームを定義します。

docker-compose.yml
version: "3"
services:
  prisma:
    image: prismagraphql/prisma:1.20
    restart: always
    ports:
      - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        managementApiSecret: my-secret
        databases:
          default:
            connector: mysql
            host: mysql
            port: 3306
            user: root
            password: prisma
            migrations: true
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: prisma
    volumes:
      - mysql:/var/lib/mysql
volumes:
  mysql:

この構成は次のことを行います。

  • prisma-dbdbの2つのサービスを起動します。
  • Prismaの最新バージョンを取り込みます。 この記事の執筆時点では、それはPrisma1.20です。
  • Prismaが使用できるポートを設定し、databasesセクションでMySQLデータベースに接続するためのすべての資格情報を指定します。

docker-compose.ymlファイルはmanagementApiSecretを設定します。これにより、他のユーザーがエンドポイントの知識を持ってデータにアクセスできなくなります。 このチュートリアルをテスト展開以外の目的で使用している場合は、managementAPIsecretをより安全なものに変更する必要があります。 その際は、後でprisma initプロセス中に入力できるように、必ず覚えておいてください。

このファイルは、MySQL Dockerイメージも取得し、それらの資格情報も設定します。 このチュートリアルでは、このDocker ComposeファイルでMySQLイメージを起動しますが、PrismaでPostgreSQLを使用することもできます。 両方のDockerイメージはDockerハブで利用できます。

ファイルを保存して終了します。

すべての詳細を保存したので、Dockerコンテナーを起動できます。 -dコマンドは、コンテナーにデタッチモードで実行するように指示します。つまり、コンテナーはバックグラウンドで実行されます。

  1. sudo docker-compose up -d

これにより、prismamysqlの両方のDockerイメージがフェッチされます。 次のコマンドを使用して、Dockerコンテナーが実行されていることを確認できます。

  1. sudo docker ps

次のような出力が表示されます。

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
24f4dd6222b1        prismagraphql/prisma:1.12   "/bin/sh -c /app/sta…"   15 seconds ago      Up 1 second         0.0.0.0:4466->4466/tcp   root_prisma_1
d8cc3a393a9f        mysql:5.7                   "docker-entrypoint.s…"   15 seconds ago      Up 13 seconds       3306/tcp                 root_mysql_1

Prismaサーバーとデータベースをセットアップすると、Prismaサービスを展開するためにローカルで作業する準備が整います。

ステップ2—Prismaをローカルにインストールする

Prismaサーバーは、Prismaサービスのランタイム環境を提供します。 Prismaサーバーを起動したので、Prismaサービスをデプロイできます。 これらの手順は、サーバーではなくローカルで実行します。

まず、すべてのPrismaファイルを含む別のフォルダーを作成します。

  1. mkdir prisma

次に、そのフォルダに移動します。

  1. cd prisma

MacOSを使用している場合は、HomebrewでPrismaをインストールできます。 これを行うには、次のコマンドを実行してPrismaリポジトリを追加します。

  1. brew tap prisma/prisma

次に、次のコマンドを使用してPrismaをインストールできます。

  1. brew install prisma

または、npmを使用する場合:

  1. npm install -g prisma

Prismaをローカルにインストールすると、新しいPrismaサービスをブートストラップする準備が整います。

ステップ3—新しいPrismaサービスの構成を作成する

インストール後、prisma initを使用して、Prismaでアプリケーションをビルドするために必要なファイルを生成する新しいPrismaデータベースAPIのファイル構造を作成できます。 エンドポイントは自動的にprisma.ymlファイルに含まれ、datamodel.prismaには、次の手順でクエリできるサンプルデータモデルが既に含まれています。 データモデルは、Prisma APIの基盤として機能し、アプリケーションのモデルを指定します。 この時点では、ファイルとサンプルデータモデルのみを作成しています。 このステップの後半でprisma deployを実行するまで、データベースに変更を加えることはありません。

これで、次のコマンドをローカルで実行して、新しいファイル構造を作成できます。

  1. prisma init hello-world

このコマンドを実行すると、インタラクティブなプロンプトが表示されます。 求められたら、Use other serverを選択し、ENTERを押します。

Output
Set up a new Prisma server or deploy to an existing server? You can set up Prisma for local development (based on docker-compose) Use existing database Connect to existing database Create new database Set up a local database using Docker Or deploy to an existing Prisma server: Demo server Hosted demo environment incl. database (requires login) ❯ Use other server Manually provide endpoint of a running Prisma server

次に、Prismaサーバーとして機能しているサーバーのエンドポイントを提供します。 http://SERVER_IP_ADDRESS:4466のようになります。 エンドポイントがhttp(またはhttps)で始まり、ポート番号が示されていることが重要です。

Output
Enter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466

管理APIシークレットについては、構成ファイルで前に指定したフレーズまたはパスワードを入力します。

Output
Enter the management API secret my-secret

以降のオプションでは、service nameおよびservice stageENTERを押して、デフォルトの変数を選択できます。

Output
Choose a name for your service hello-world Choose a name for your stage dev

Prismaクライアントのプログラミング言語の選択肢も提供されます。 この場合、お好みの言語を選択できます。 クライアントの詳細については、こちらをご覧ください。

Output
Select the programming language for the generated Prisma client (Use arrow keys) ❯ Prisma TypeScript Client Prisma Flow Client Prisma JavaScript Client Prisma Go Client Don't generate

プロンプトを完了すると、選択内容を確認する次の出力が表示されます。

Output
Created 3 new files: prisma.yml Prisma service definition datamodel.prisma GraphQL SDL-based datamodel (foundation for database) .env Env file including PRISMA_API_MANAGEMENT_SECRET Next steps: 1. Open folder: cd hello-world 2. Deploy your Prisma service: prisma deploy 3. Read more about deploying services: http://bit.ly/prisma-deploy-services

hello-worldディレクトリに移動します。

  1. cd hello-world

これらの変更をprisma deployを使用してサーバーに同期します。 これにより、ローカルマシンからPrismaサーバーに情報が送信され、Prismaサーバー上にPrismaサービスが作成されます。

  1. prisma deploy

prisma deployを再度実行すると、Prismaサービスが更新されます。

出力は次のようになります。

Output
Creating stage dev for service hello-world ✔ Deploying service `hello-world` to stage 'dev' to server 'default' 468ms Changes: User (Type) + Created type `User` + Created field `id` of type `GraphQLID!` + Created field `name` of type `String!` + Created field `updatedAt` of type `DateTime!` + Created field `createdAt` of type `DateTime!` Applying changes 716ms Your Prisma GraphQL database endpoint is live: HTTP: http://SERVER_IP_ADDRESS:4466/hello-world/dev WS: ws://SERVER_IP_ADDRESS:4466/hello-world/dev

出力は、Prismaが type Userのデータモデル(prisma initステップで作成)に従ってデータベースを更新したことを示しています。 タイプはデータモデルの重要な部分です。 これらはアプリケーションのアイテムを表し、各タイプには複数のフィールドが含まれています。 データモデルの場合、ユーザーを説明する関連フィールドは、ユーザーのID、名前、作成された時刻、および更新された時刻です。

この段階で問題が発生し、別の出力が得られる場合は、対話型プロンプトですべてのフィールドを正しく入力したことを再確認してください。 prisma.ymlファイルの内容を確認することでこれを行うことができます。

Prismaサービスを実行すると、2つの異なるエンドポイントに接続できます。

  • Prismaサービスを管理および展開できるhttp://SERVER_IP_ADDRESS:4466/managementで利用可能な管理インターフェイス。

  • Prismaサービス用のGraphQLAPI。http://SERVER_IP_ADDRESS:4466/hello-world/devで入手できます。

GraphQL API exploring Your Project

Prismaサーバーのセットアップとデプロイが正常に完了しました。 これで、GraphQLでクエリとミューテーションを調べることができます。

ステップ4—サンプルクエリの実行

Prismaの別のユースケースを調べるために、サーバー上のオープンソースのGraphQL統合開発環境(IDE)であるGraphQLプレイグラウンドツールを試すことができます。 アクセスするには、前の手順でブラウザのエンドポイントにアクセスします。

http://SERVER_IP_ADDRESS:4466/hello-world/dev

mutation は、GraphQLを介してバックエンドのデータを変更(作成、更新、または削除(CRUD))する方法を説明するGraphQL用語です。 ミューテーションを送信して、新しいユーザーを作成し、機能を調べることができます。 これを行うには、ページの左側で次のミューテーションを実行します。

mutation {
  createUser(data: { name: "Alice" }) {
    id
    name
  }
}

再生ボタンを押すと、ページの右側に結果が表示されます。 GraphQL Playground Creating a New User

その後、データベースのID列を使用してユーザーを検索する場合は、次のクエリを実行できます。

query {
  user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
    id
    name
  }
}

これで、Prismaサーバーとサービスがサーバー上で稼働し、GraphQLのIDEでテストクエリを実行しました。

結論

サーバー上に機能しているPrismaセットアップがあります。 Prismaのその他の使用例と次の手順については、入門ガイドを参照するか、 PrismaDocsでPrismaの機能セットを確認してください。 このチュートリアルのすべての手順を完了すると、データベースへの接続を確認するためのいくつかのオプションがあります。1つの可能性は、 PrismaClientを使用することです。

警告:このチュートリアルは古く、メンテナンスされていません。 これは、現在活発に開発されていないPrisma1に基づいています。 Prisma 最新バージョンに関するすべてを学ぶには、公式のPrismaドキュメントにアクセスしてください。

Prismaを使用してサーバー側アプリケーションを構築する方法を学びたい場合は、次の新しいチュートリアルに従うことができます。