Next.js × Prisma × Vercel Storageで作るブログアプリ①

投稿日 2024-08-08

更新日 2024-08-18

プログラミング

Next.js、Prisma、Vercel Storageを使って、サーバーレス環境でブログアプリを開発する方法を紹介しまます。本記事はセットアップまでを解説します。

はじめに

ORMとしてprismaをよく使用しています。そこでセットアップ方法を記録しておくために投稿します。データベースには勉強のためにVercel Storageを使用しています。

開発環境

  • Nextjs:14.2.5(App Router)
  • React:^18
  • Prisma:5.17.0

Nextjsの雛型は事前に用意しておいてください。nodejsやgitの環境構築は解説しません。

Prismaのセットアップ

prismaのインストール

以下のコマンドでprismatとprisma clientをインストールします。

Terminal
npm install @prisma/client prisma 

スキーマの定義

インストールしたら以下のコマンドでスキーマを定義するファイルを生成します。

Terminal
npx prisma init

同時に.envファイルも作成されますが後ほど編集します。

生成されたprismaフォルダーのscherma.prismaファイルに編集してスキーマを定義します。

Schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("POSTGRES_PRISMA_URL")
  directUrl = env("POSTGRES_URL_NON_POOLING")
}

model Article {
  id     String      @id @default(cuid())
  title   String
  content String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  categories Category[]
}

model Category {
  id     String @id @default(cuid())
  name   String
  articles  Article[]
}

このモデルは簡単なブログのスキーマを定義しています。Articleモデルはタイトルと本文とカテゴリーを有しており、そのカテゴリーは中間テーブルを介してCategoryモデルと多対多の関係にあります。

prismaは多対多にしたい各モデルに配列を持たせるだけで中間テーブルを定義することができるので便利です。

Vercel Storageへの接続

Vercelのダッシュボード画面のStorageをタップしてPostgresデータベースを作成します。

Create Database

Regionに日本がないので一番近いシンガポールにしました。

envlocal

作成したデータベースプロジェクトの.envlocalをコピーして、prismaによって生成された.envファイルにペーストします。

以下のコマンドでローカル環境とデータベースを接続します。

Terminal
npx prisma migrate dev --name init

ダッシュボードを確認してみるとスキーマが作成されています。また、自動で中間テーブルの_CategorytoArticleが生成されています。

shema

おまけ(本番環境の設定)

本記事は基本的にローカルでの開発を前提にしています。githubでVercelの本番環境にデプロイしたい場合は以下のことを行ってください。

  • gitignoreファイルに.envを追記する。
  • ビルド前に環境変数をVercelプロジェクトにアップロードまたは手動入力する。
  • package.jsonファイルを編集する。
package.json
//以上略
"scripts": {
    "dev": "next dev",
    "build": "prisma generate && prisma db push && next build", //追記
    "start": "next start",
    "lint": "next lint"
  },
//以下略

"build"にprismaの設定を追記してください。

まとめ

今回はNextjsでprismaを用いたVercel Storgaeのセットアップ方法を紹介しました。次回はデータの投稿と取得する機能をServer Actionで実装する方法を投稿します。

参考文献