その他

Node.jsで掲示板アプリのAPIを作成してみよう(データベース作成編)

その他
この記事は約7分で読めます。

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

このように象のアイコンに✅がついていれば接続完了です。
以下のように階層を辿っていくと作成されたテーブルを見ることができます。

データを見たいテーブルを選択し、データタブを選択すると登録されているデータを見れる画面に
移動します。
今回はまだデータを登録していないのでカラム名の下にデータはありませんが、登録していれば
その情報がカラム名の下に表示されます。