implの岡本です。
掲示板アプリAPI作成の第二弾です。
前回ではDockerを使用してNode.js, Express, MySQLの環境を作成しました。
今回はAPIで使用するデータベースを作成していきます。
パッケージのインストール
ターミナルでリポジトリに移動し、下記コマンドで必要なパッケージをインストールします。
docker compose exec node sh
yarn add dotenv
yarn add prisma
schema.prismaファイルの作成
schema.prismaファイルとは、データベースの接続に必要な情報とデータベースのカラム情報などが含まれたデータになります。
prismaはこのデータをもとに指定した箇所にデータベースとカラムの作成を行います。
下記コマンドを実行し、schema.prismaファイルを作成します。
yarn prisma init
schema.prismaファイルの中身はこのようになっています。
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
datasourceの下に作成したいテーブルとカラムの情報を追加していきます。
schema.prismaの書き方は以下のサイトを見てください。
https://zenn.dev/ikekyo/scraps/f6c87fbfd3bf9d
model User {
id Int @id @default(autoincrement())
name String
email String @unique
password String
boards Board[]
bookmarks Bookmark[]
comments Comment[]
}
model Board {
id Int @id @default(autoincrement())
title String
content String?
user User @relation(fields: [userId], references: [id])
userId Int
bookmarks Bookmark[]
comments Comment[]
}
model Bookmark {
id Int @id @default(autoincrement())
board Board @relation(fields: [boardId], references: [id])
user User @relation(fields: [userId], references: [id])
boardId Int
userId Int
}
model Comment {
id Int @id @default(autoincrement())
content String
board Board @relation(fields: [boardId], references: [id])
user User @relation(fields: [userId], references: [id])
boardId Int
userId Int
}
.envファイルの作成
schema.prismaファイルにはenv(“DATABASE_URL”)という記載がありますね。
こちらは環境変数と呼ばれるもので、あまり公にしたくないデータを入れたりするものです。
.envファイルでDATABASE_URLという環境変数を作成していきます。
環境変数を使用できるようにするものが、dotenvというパッケージの機能になります。
yarn prisma initで作成された.envファイルの中身はこのようになっています。
#src/.env
# Environment variables declared in this file are automatically made available to Prisma.
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
DATABASE_URLはDockerで作成したMySQLに接続するために必要です。
こちらをdocker-compose.ymlに記載した内容を参考にしながら書き換えていきます。
DATABASE_URL="postgresql://user:password@postgres:5432/board_api_db?schema=public"
データベースの作成
下記のコマンドを実行してデータベースを作成します。
Enter a name for the new migrationと聞かれたらマイグレーション名を入力します。
今回はcreate tablesと入力します。
yarn prisma migrate dev
Enter a name for the new migration > create table
エラーが出なければデータベースが作成できています。
お疲れ様でした。
次回はユーザー登録関連のAPIを作成していきます。
投稿予定は8/18の予定です。
番外編 ~作成したテーブルをDBeaverで確認してみよう~
DBeaverを下記サイトからインストールします。
https://dbeaver.io/download/
パッケージは自分のPCのOSとCPUの組み合わせに合ったものを選択してください。
私の環境だとM1Macなので「MacOS for Apple Silicon (dmg)」をインストールします。
DBeaverを開き左上のコンセントに+がついているアイコンをクリックします。
PopularのPostgreSQLを選択後、Nextをクリックします。
以下の内容で接続します。
この内容はdocker-compose.ymlの内容に左右されるので、docker-compose.ymlを書き換えている
場合は適宜修正してください。
Connect by: Host
Host: localhost
Port: 5432
Database: board_api_db
ユーザー名: user
パスワード: password
このように象のアイコンに✅がついていれば接続完了です。
以下のように階層を辿っていくと作成されたテーブルを見ることができます。
データを見たいテーブルを選択し、データタブを選択すると登録されているデータを見れる画面に
移動します。
今回はまだデータを登録していないのでカラム名の下にデータはありませんが、登録していれば
その情報がカラム名の下に表示されます。