著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにthe Electronic Frontier Foundationを選択しました。
前書き
Prismaは、アプリケーションの従来のオブジェクトリレーショナルマッピングツール(ORM)を置き換えるデータレイヤーです。 Prismaは、GraphQLサーバーとREST APIの両方の構築をサポートし、type safetyに重点を置いてデータベースへのアクセスを簡素化し、declarative database migrationsを有効にします。 型の安全性は、潜在的なコードエラーと矛盾を減らすのに役立ちますが、宣言的なデータベース移行により、データモデルをバージョン管理に保存できます。 これらの機能は、開発者がデータベースアクセス、移行、およびデータ管理ワークフローの設定に集中する時間を短縮するのに役立ちます。
データベースのプロキシとして機能するPrismaサーバーをさまざまな方法で展開し、リモートまたはローカルでホストできます。 Prismaサービスを通じて、GraphQL APIを使用してデータにアクセスし、データベースに接続することができます。これにより、リアルタイム操作とデータの作成、更新、削除が可能になります。 GraphQLは、ユーザーがサーバーから必要な正確なデータにアクセスするためのクエリを送信できるようにするAPIのクエリ言語です。 Prismaサーバーは、データベースの上にあるスタンドアロンコンポーネントです。
このチュートリアルでは、Ubuntu 18.04にPrismaサーバーを手動でインストールし、GraphQL PlaygroundでテストGraphQLクエリを実行します。 リモートサーバーでPrismaを実行しながら、Prismaセットアップコードと開発をローカルでホストし、実際にアプリケーションをビルドします。 インストールを手動で実行することにより、セットアップの基礎となるインフラストラクチャをより深く理解し、カスタマイズできるようになります。
このチュートリアルでは、Ubuntu 18.04サーバーにPrismaをデプロイするための手動の手順について説明しますが、Prismaのサイトでこのtutorialを実行することにより、DockerMachineを使用してより自動化された方法でこれを実行することもできます。
Note:このセクションで説明するセットアップには、自動バックアップやアクティブフェイルオーバーなど、本番環境対応サーバーに通常期待される機能は含まれていません。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
sudo非rootユーザーを含むInitial Server Setup Guideに従ってセットアップされたUbuntu18.04サーバー。
-
サーバーにインストールされたDocker。 これは、Docker Installation on Ubuntu 18.04 tutorialのステップ1に従うことで実現できます。
-
Docker Composeがインストールされました。 この手順については、Installing Docker Composeのステップ1を参照してください。
-
Node.js installed on your server. これは、Installing Node.js tutorialのPPAセクションを通過することで実現できます。
[[step-1 -—- starting-the-prisma-server]] ==ステップ1—Prismaサーバーを起動します
Prisma CLIは、Prismaサービスの展開と管理に使用される主要なツールです。 サービスを開始するには、必要なインフラストラクチャをセットアップする必要があります。これには、接続するPrismaサーバーとデータベースが含まれます。
Docker Composeを使用すると、マルチコンテナアプリケーションを管理および実行できます。 これを使用して、Prismaサービスに必要なインフラストラクチャをセットアップします。
まず、サーバーにPrismaサービス構成を保存するためのdocker-compose.yml
ファイルを作成します。 このファイルを使用して、関連するデータベースであるPrismaを自動的に起動し、必要な詳細をすべて1ステップで構成します。 ファイルがDockerComposeでスピンアップされると、データベースのパスワードが構成されるため、managementAPIsecret
とMYSQL_ROOT_PASSWORD
のパスワードを安全なものに置き換えてください。 次のコマンドを実行して、docker-compose.yml
ファイルを作成および編集します。
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-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
これにより、prisma
と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サービスを展開する準備ができました。
[[step-2 -—- installing-prisma-locally]] ==ステップ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サービスをブートストラップする準備が整います。
[[step-3 -—- creating-the-configuration-for-a-new-prisma-service]] ==ステップ3—新しいPrismaサービスの構成を作成する
インストール後、prisma init
を使用して、新しいPrismaデータベースAPIのファイル構造を作成できます。これにより、Prismaを使用してアプリケーションを構築するために必要なファイルが生成されます。 エンドポイントは自動的にprisma.yml
ファイルに含まれ、datamodel.prisma
には、次の手順でクエリできるサンプルデータモデルが既に含まれています。 データモデルは、Prisma APIの基礎として機能し、アプリケーションのモデルを指定します。 この時点では、ファイルとサンプルデータモデルのみを作成しています。 このステップの後半でprisma deploy
を実行するまで、データベースに変更を加えることはありません。
これで、次のコマンドをローカルで実行して、新しいファイル構造を作成できます。
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)で始まり、ポート番号が示されていることが重要です。
OutputEnter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466
管理APIシークレットの場合は、構成ファイルで以前に指定したフレーズまたはパスワードを入力します。
OutputEnter the management API secret my-secret
以降のオプションでは、service name
およびservice stage
に対してENTER
を押すことにより、デフォルトの変数を選択できます。
OutputChoose a name for your service hello-world
Choose a name for your stage dev
また、Prismaクライアント用のプログラミング言語を選択することもできます。 この場合、優先言語を選択できます。 クライアントhereの詳細を読むことができます。
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
ディレクトリに移動します。
cd hello-world
これらの変更をサーバーにprisma deploy
で同期します。 これにより、ローカルマシンからPrismaサーバーに情報が送信され、Prismaサーバー上にPrismaサービスが作成されます。
prisma deploy
Note:prisma deploy
を再度実行すると、Prismaサービスが更新されます。
出力は次のようになります。
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://SERVER_IP_ADDRESS:4466/hello-world/dev
WS: ws://SERVER_IP_ADDRESS:4466/hello-world/dev
出力は、Prismaがデータモデル(prisma init
ステップで作成)に従ってtypeUser
でデータベースを更新したことを示しています。 型はデータモデルの重要な部分です。これらはアプリケーションのアイテムを表し、各タイプには複数のフィールドが含まれます。 データモデルの場合、ユーザーを説明する関連フィールドは、ユーザーのID、名前、作成日時、更新日時です。
この段階で問題が発生して別の出力が得られた場合は、対話型プロンプトですべてのフィールドに正しく入力したことを再確認してください。 これを行うには、prisma.yml
ファイルの内容を確認します。
Prismaサービスを実行すると、2つの異なるエンドポイントに接続できます。
-
Prismaサービスを管理および展開できる
http://SERVER_IP_ADDRESS:4466/management
で使用可能な管理インターフェース。 -
Prismaサービス用のGraphQLAPI。
http://SERVER_IP_ADDRESS:4466/hello-world/dev
で入手できます。
Prismaサーバーのセットアップとデプロイが正常に完了しました。 GraphQLでクエリと突然変異を調べることができます。
[[step-4 -—- running-an-example-query]] ==ステップ4—サンプルクエリの実行
Prismaの別のユースケースを調べるために、サーバー上のオープンソースのGraphQL統合開発環境(IDE)であるGraphQL playgroundツールを試すことができます。 それにアクセスするには、前のステップからブラウザーでエンドポイントにアクセスします。
http://SERVER_IP_ADDRESS:4466/hello-world/dev
mutationは、GraphQLを介してバックエンドのデータを変更(作成、更新、または削除(CRUD))する方法を説明するGraphQL用語です。 突然変異を送信して新しいユーザーを作成し、機能を調べることができます。 これを行うには、ページの左側で次の突然変異を実行します。
mutation {
createUser(data: { name: "Alice" }) {
id
name
}
}
再生ボタンを押すと、ページの右側に結果が表示されます。
その後、データベースのID
列を使用してユーザーを検索する場合は、次のクエリを実行できます。
query {
user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
id
name
}
}
これで、Prismaサーバーとサービスがサーバー上で稼働し、GraphQL IDEでテストクエリを実行できました。
結論
サーバーに機能するPrismaセットアップがあります。 Getting Started Guideでいくつかの追加のPrismaの使用例と次のステップを確認したり、Prisma DocsでPrismaの機能セットを調べたりできます。 このチュートリアルのすべての手順を完了すると、データベースへの接続を確認するためのいくつかのオプションがあります。1つの可能性は、Prisma Clientを使用することです。