データベース
SQLite + Prisma マイグレーション手順ガイド
カービー
#SQLite#Prisma#マイグレーション#データベース#ORM#Node.js#TypeScript#開発環境
SQLiteデータベースをPrismaで管理し、マイグレーションや初期データ投入を行う完全な手順ガイドです。環境構築からシード実行まで、実践的なデータベース管理の方法を詳しく解説します。
目次
概要
このガイドでは、SQLiteデータベースをPrismaで管理し、マイグレーションや初期データ投入を行う手順を詳しく解説します。Prismaは型安全なORMで、SQLiteとの組み合わせにより軽量で高速なデータベース管理が可能になります。
主な特徴
- 🚀 軽量: SQLiteによる高速なデータベース操作
- 🔒 型安全: TypeScriptとの完全な統合
- 📝 マイグレーション: スキーマ変更の自動管理
- 🌱 シード機能: 初期データの自動投入
- 🎯 開発効率: 直感的なAPI設計
環境構築
1. SQLiteの導入
SQLiteは特別なインストールが不要です。Prismaの設定で sqlite
を指定するだけで利用できます。
2. Prismaのインストール
# Prismaクライアントのインストール
npm install @prisma/client
# Prisma CLIのインストール(開発依存)
npm install prisma --save-dev
3. Prismaの初期化
初回のみ実行する初期化コマンドです:
npx prisma init
このコマンドにより、以下のファイルが作成されます:
prisma/schema.prisma
: データベーススキーマ定義.env
: 環境変数ファイル
Prismaスキーマの設定
基本的なスキーマ例
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
model System {
id Int @id @default(autoincrement())
deviceTypeId Int // DeviceTypeのIDを参照
deviceType DeviceType @relation(fields: [deviceTypeId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model DeviceType {
id Int @id @default(autoincrement())
type Int @unique // 0: Windows, 1: Mac
name String // デバイス名
description String? // 説明(オプショナル)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
systems System[]
}
スキーマの説明
- Generator: Prismaクライアントの生成設定
- Datasource: SQLiteデータベースの接続設定
- Models: データベーステーブルの定義
- Relations: テーブル間の関連性定義
マイグレーションの実行
1. Prismaクライアントの生成
npx prisma generate
2. マイグレーションの作成・適用
npx prisma migrate dev --name init
このコマンドにより:
prisma/migrations/
フォルダにマイグレーションファイルが作成dev.db
ファイルが自動生成- データベーススキーマが適用
3. マイグレーションの確認
# マイグレーション履歴の確認
npx prisma migrate status
# マイグレーションファイルの確認
ls prisma/migrations/
初期データの投入
1. シードスクリプトの作成
prisma/seed.js
を作成します:
const { PrismaClient } = require('../generated/prisma')
const prisma = new PrismaClient()
async function main() {
// デバイス区分の初期データ
const deviceTypes = [
{ type: 0, name: 'Windows', description: 'Windowsデバイス' },
{ type: 1, name: 'Mac', description: 'Macデバイス' }
]
for (const deviceType of deviceTypes) {
await prisma.deviceType.upsert({
where: { type: deviceType.type },
update: deviceType,
create: deviceType
})
}
// Systemテーブルの初期データ(例: Windowsを選択)
const windows = await prisma.deviceType.findUnique({
where: { type: 0 }
})
if (windows) {
await prisma.system.create({
data: {
deviceTypeId: windows.id
}
})
}
}
main()
.catch((e) => {
console.error(e)
process.exit(1)
})
.finally(async () => {
await prisma.$disconnect()
})
2. package.jsonにスクリプト追加
{
"scripts": {
"db:seed": "node prisma/seed.js"
}
}
3. シードの実行
npm run db:seed
データベースの確認
1. Prisma Studio(GUI)
npx prisma studio
ブラウザで http://localhost:5555
にアクセスして、GUIでデータベースを確認できます。
2. SQLiteコマンドライン
# SQLiteデータベースに接続
sqlite3 prisma/dev.db
# テーブル一覧の確認
.tables
# データの確認
SELECT * FROM DeviceType;
SELECT * FROM System;
# 終了
.quit
3. プログラムからの確認
const { PrismaClient } = require('../generated/prisma')
const prisma = new PrismaClient()
async function checkData() {
const deviceTypes = await prisma.deviceType.findMany()
const systems = await prisma.system.findMany({
include: { deviceType: true }
})
console.log('DeviceTypes:', deviceTypes)
console.log('Systems:', systems)
}
checkData()
よく使うコマンド
開発時のコマンド
コマンド | 説明 |
---|---|
npx prisma init |
Prismaの初期化(初回のみ) |
npx prisma generate |
Prismaクライアント生成 |
npx prisma migrate dev --name xxx |
マイグレーション作成・適用 |
npx prisma db push |
スキーマをDBに即時反映 |
npm run db:seed |
初期データ投入(シード) |
npx prisma studio |
GUIでDB確認 |
本番環境のコマンド
# 本番環境でのマイグレーション適用
npx prisma migrate deploy
# データベースのリセット
npx prisma migrate reset
# スキーマの検証
npx prisma validate
トラブルシューティング
# マイグレーション履歴の確認
npx prisma migrate status
# データベースの状態確認
npx prisma db pull
# クライアントの再生成
npx prisma generate
まとめ
SQLite + Prismaの組み合わせにより、軽量で高速なデータベース管理が可能になります。このガイドで紹介した手順により、以下のことが実現できます:
実現できること
- ✅ 型安全なデータベース操作
- ✅ 自動マイグレーション管理
- ✅ 初期データの自動投入
- ✅ GUIでのデータ確認
- ✅ 開発効率の向上
次のステップ
- 複雑なリレーションの設定
- バリデーションの追加
- パフォーマンス最適化
- 本番環境への展開
PrismaとSQLiteの組み合わせは、特に小〜中規模のプロジェクトに最適です。型安全性と開発効率の両方を実現できる強力なツールです。
このガイドが、SQLite + Prismaを使ったデータベース管理の参考になれば幸いです。何か質問があれば、お気軽にお問い合わせください。