著者はhttps://www.brightfunds.org/organizations/electronic-frontier-foundation-inc[The Electronic Frontier Foundation]を選択して、https://do.co/w4do-cta [Write for DOnations]プログラム。

前書き

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

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

このチュートリアルでは、PrismaサーバーをUbuntu 18.04に手動でインストールし、https://www.prisma.io/blog/introducing-graphql-playground-f1e0a018f05d/ [GraphQL Playground]でテストGraphQLクエリを実行します。 リモートサーバーでPrismaを実行しながら、Prismaセットアップコードと開発をローカルでホストします(実際にアプリケーションをビルドする場所)。 インストールを手動で実行することにより、セットアップの基礎となるインフラストラクチャをより深く理解し、カスタマイズできるようになります。

このチュートリアルでは、Ubuntu 18.04サーバーにPrismaを展開するための手動の手順について説明しますが、このhttps://www.prisma.io/tutorials/deploy-prisma-to-に従うことで、Docker Machineでより自動化された方法でこれを達成することもできます。プリズマのサイトのdigitalocean-with-docker-machine-ct06 / [チュートリアル]。

前提条件

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

  • Initial Server Setup Guideに従って設定されたUbuntu 18.04サーバー(sudo非rootユーザーを含む) 。

  • サーバーにインストールされたDocker。 これは、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04#step-1-%E2のステップ1に従って行うことができます。 %80%94-installing-docker [Ubuntu 18.04でのDockerのインストールチュートリアル]。

  • Docker Composeがインストールされました。 この手順は、https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-18-04#step-1-%E2%80のステップ1にあります。 %94-installing-docker-compose [Docker Composeのインストール]。

  • サーバーにインストールされたNode.js。 これを行うには、https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04#installing-using-a-のPPAセクションをご覧ください。 ppa [Node.jsのインストールチュートリアル]。

手順1-Prismaサーバーの起動

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

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

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

sudo nano docker-compose.yml

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

docker-compose.yml

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

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

  • `+ prisma-db `と ` db +`の2つのサービスを起動します。

  • Prismaの最新バージョンを取り込みます。 これを書いている時点で、それはPrisma 1.20です。

  • Prismaが利用できるポートを設定し、 `+ databases +`セクションでMySQLデータベースに接続するためのすべての認証情報を指定します。

`+ docker-compose.yml `ファイルは、 ` managementApiSecret `を設定します。これにより、エンドポイントの情報で他人がデータにアクセスすることを防ぎます。 テストデプロイ以外にこのチュートリアルを使用している場合は、 ` managementAPIsecret `をより安全なものに変更する必要があります。 実行するときは、必ず ` prisma init +`プロセス中に入力できるように覚えておいてください。

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

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

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

sudo docker-compose up -d

これにより、「+ prisms」と「+ mysql」の両方のDockerイメージが取得されます。 次のコマンドを使用して、Dockerコンテナが実行されていることを確認できます。

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ファイルを含む別のフォルダーを作成します。

mkdir prisma

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

cd prisma

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

brew tap prisma/prisma

その後、次のコマンドでPrismaをインストールできます。

brew install prisma

または、 `+ npm +`で:

npm install -g prisma

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

手順3-新しいPrismaサービスの構成の作成

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

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

prisma init hello-world

このコマンドを実行すると、インタラクティブプロンプトが表示されます。 尋ねられたら、「他のサーバーを使用」を選択し、「+ 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://:4466 +`のようになります。 エンドポイントがhttp(またはhttps)で始まり、ポート番号が示されていることが重要です。

OutputEnter the endpoint of your Prisma server SERVER_IP_ADDRESS

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

OutputEnter the management API secret

以降のオプションでは、「+ service name 」と「 service stage 」に対して「 ENTER +」を押すことでデフォルト変数を選択できます。

OutputChoose a name for your service
Choose a name for your stage

また、Prismaクライアント用のプログラミング言語を選択することもできます。 この場合、優先言語を選択できます。 クライアントの詳細については、https://www.prisma.io/blog/prisma-client-preview-ahph4o1umail [こちら]をご覧ください。

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

`++`ディレクトリに移動します。

cd hello-world

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

prisma deploy

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

OutputCreating 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://:4466//
 WS:    ws://:4466//

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

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

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

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

  • PrismaサービスのGraphQL API。「+ http://:4466 // +」で入手できます。

画像:https://assets.digitalocean.com/articles/prisma_1804/prisma_step_four_project.png [_Your Project_を探索するGraphQL API]

Prismaサーバーのセットアップとデプロイが正常に完了しました。 GraphQLでクエリと突然変異を調べることができます。

手順4-サンプルクエリの実行

別のPrismaユースケースを調べるには、https://github.com/prisma/graphql-playground [GraphQL playground]ツールを試すことができます。これは、サーバー上のオープンソースのGraphQL統合開発環境(IDE)です。 それにアクセスするには、前のステップからブラウザーでエンドポイントにアクセスします。

http://:4466//

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

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

再生ボタンを押すと、ページの右側に結果が表示されます。 + image:https://assets.digitalocean.com/articles/prisma_1804/prisma_step_five_user.png [GraphQL Playground新規ユーザーの作成]

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

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

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

結論

サーバーに機能するPrismaセットアップがあります。 Getting Startedガイドまたはhttps://www.prisma.io/docs/[Prisma Docs]にあるPrismaの機能セットをご覧ください。 このチュートリアルのすべての手順を完了したら、データベースへの接続を確認するためのオプションがいくつかあります。1つの可能性は、https://www.prisma.io/client/client-javascript [Prisma Client]を使用することです。