データベース

SQLite + Prisma マイグレーション手順ガイド

カービー
SQLite + Prisma マイグレーション手順ガイド
#SQLite#Prisma#マイグレーション#データベース#ORM#Node.js#TypeScript#開発環境

SQLiteデータベースをPrismaで管理し、マイグレーションや初期データ投入を行う完全な手順ガイドです。環境構築からシード実行まで、実践的なデータベース管理の方法を詳しく解説します。

目次

  1. 概要
  2. 環境構築
  3. Prismaスキーマの設定
  4. マイグレーションの実行
  5. 初期データの投入
  6. データベースの確認
  7. よく使うコマンド
  8. まとめ

概要

このガイドでは、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[]
}

スキーマの説明

  1. Generator: Prismaクライアントの生成設定
  2. Datasource: SQLiteデータベースの接続設定
  3. Models: データベーステーブルの定義
  4. 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でのデータ確認
  • 開発効率の向上

次のステップ

  1. 複雑なリレーションの設定
  2. バリデーションの追加
  3. パフォーマンス最適化
  4. 本番環境への展開

PrismaとSQLiteの組み合わせは、特に小〜中規模のプロジェクトに最適です。型安全性と開発効率の両方を実現できる強力なツールです。


このガイドが、SQLite + Prismaを使ったデータベース管理の参考になれば幸いです。何か質問があれば、お気軽にお問い合わせください。