0%
実装パターン#Neon#PostgreSQL#データベース

Neon入門|サーバーレスPostgreSQLの使い方

NeonでPostgreSQLを使う方法。セットアップ、接続、Prismaとの連携を解説。

||8分で読める

Neon入門

サーバーレスPostgreSQL。使った分だけ課金。

Neonの特徴

  • サーバーレス: 自動スケール
  • ブランチ機能: DBのブランチが作れる
  • 無料枠: 0.5GB、1プロジェクト
  • 接続プール: 組み込み済み

セットアップ

1. アカウント作成

1. neon.tech にアクセス
2. GitHubまたはGoogleでサインアップ
3. プロジェクトを作成
4. 接続文字列をコピー

2. 環境変数設定

DATABASE_URL="postgresql://user:password@ep-xxx.region.aws.neon.tech/neondb?sslmode=require"

Prismaとの連携

インストール

npm install prisma @prisma/client
npx prisma init

スキーマ定義

// prisma/schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

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

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
}

model Post {
  id        String   @id @default(cuid())
  title     String
  content   String?
  author    User     @relation(fields: [authorId], references: [id])
  authorId  String
  createdAt DateTime @default(now())
}

マイグレーション

npx prisma db push
# または
npx prisma migrate dev --name init

基本操作

作成

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

const user = await prisma.user.create({
  data: {
    email: 'user@example.com',
    name: 'User Name',
  },
})

取得

// 全件取得
const users = await prisma.user.findMany()

// 条件付き
const user = await prisma.user.findUnique({
  where: { email: 'user@example.com' },
})

// リレーション含む
const userWithPosts = await prisma.user.findUnique({
  where: { id: userId },
  include: { posts: true },
})

更新

const updated = await prisma.user.update({
  where: { id: userId },
  data: { name: 'New Name' },
})

削除

await prisma.user.delete({
  where: { id: userId },
})

ブランチ機能

ブランチの活用

・本番: main ブランチ
・開発: dev ブランチ
・テスト: test ブランチ

本番データをコピーして開発できる。

環境ごとの接続

# .env.development
DATABASE_URL="postgresql://...dev-branch..."

# .env.production
DATABASE_URL="postgresql://...main-branch..."

接続プール

Neon組み込みプール

# プール経由(推奨)
DATABASE_URL="postgresql://user:pass@ep-xxx-pooler.region.aws.neon.tech/neondb"

# ダイレクト(マイグレーション用)
DIRECT_URL="postgresql://user:pass@ep-xxx.region.aws.neon.tech/neondb"

Prisma設定

datasource db {
  provider  = "postgresql"
  url       = env("DATABASE_URL")
  directUrl = env("DIRECT_URL")
}

Next.jsでの使い方

// lib/prisma.ts
import { PrismaClient } from '@prisma/client'

const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined
}

export const prisma = globalForPrisma.prisma ?? new PrismaClient()

if (process.env.NODE_ENV !== 'production') {
  globalForPrisma.prisma = prisma
}

注意点

コールドスタート

アイドル状態からの起動に数秒かかる場合がある。
→ 無料枠の制限、有料プランで改善

SSL必須

接続文字列に ?sslmode=require が必要

次のステップ

シェア:

参考文献・引用元

実装パターンの他の記事

他のカテゴリも見る