OpenCodeでデータベース設計とマイグレーションを完全マスター

OpenCodeを使ったデータベース設計とマイグレーションの実践的なチュートリアル。Prismaを用いたスキーマ定義、マイグレーション実行、SQL管理までを解説。

OpenCodeデータベース設計マイグレーションPrismaSQL2026/5/25

はじめに

OpenCodeは、データベース設計とマイグレーションを効率的に行うための強力なツールです。本記事では、Prismaを活用したデータベース設計、マイグレーションの実行、SQLの管理方法を実践的に解説します。OpenCodeを利用することで、開発初期のデータベース設計から本番環境への適用まで、一貫したワークフローを構築できます。

OpenCodeとPrismaの連携

OpenCodeは、Prisma ORMとシームレスに連携します。PrismaはTypeScript/JavaScript向けの次世代ORMであり、データベーススキーマを宣言的に定義し、マイグレーションを自動生成します。OpenCode上でPrismaを使うことで、以下のようなメリットがあります。

  • 型安全なデータアクセス: スキーマから自動生成される型により、コンパイル時にエラーを検出
  • マイグレーションの自動化: スキーマ変更からマイグレーションファイルを自動生成
  • 複数データベース対応: PostgreSQL、MySQL、SQLite、SQL Serverなどに対応
  • データベース設計の基本

    スキーマ定義

    Prismaスキーマは、schema.prismaファイルに記述します。以下は、ブログアプリケーションの例です。

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

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

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

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

    リレーションの設計

    1対多のリレーションは、@relation属性で定義します。上記の例では、UserとPostが1対多の関係です。多対多の場合は、中間テーブルを明示的にモデルとして定義するか、@relationで自動生成させます。

    model Category {
      id       Int      @id @default(autoincrement())
      name     String   @unique
      posts    Post[]
    }
    

    model Post { id Int @id @default(autoincrement()) title String categories Category[] }

    マイグレーションの実行

    初期マイグレーション

    スキーマ定義後、以下のコマンドで初期マイグレーションを作成します。

    npx prisma migrate dev --name init
    

    このコマンドは、スキーマからマイグレーションSQLファイルを生成し、データベースに適用します。同時にPrisma Clientも生成されます。

    スキーマ変更時のマイグレーション

    モデルにフィールドを追加する場合:

    model User {
      // 既存フィールド
      profile String? // 追加
    }
    

    マイグレーションコマンド:

    npx prisma migrate dev --name add-profile
    

    マイグレーションのロールバック

    Prismaでは、直接的なロールバックコマンドはありませんが、prisma migrate diffprisma db executeを使って手動でロールバックできます。また、Gitなどのバージョン管理を使ってマイグレーションファイルを管理するのが一般的です。

    SQLの管理と最適化

    マイグレーションSQLの確認

    生成されたマイグレーションSQLは、prisma/migrations/ディレクトリに保存されます。必要に応じて手動で編集することも可能です。

    -- CreateTable
    CREATE TABLE "User" (
        "id" SERIAL NOT NULL,
        "email" TEXT NOT NULL,
        "name" TEXT,
        "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
        CONSTRAINT "User_pkey" PRIMARY KEY ("id")
    );
    

    インデックスの追加

    パフォーマンス向上のため、インデックスを追加します。

    model Post {
      id        Int      @id @default(autoincrement())
      title     String
      content   String?
      published Boolean  @default(false)
      author    User     @relation(fields: [authorId], references: [id])
      authorId  Int
      createdAt DateTime @default(now())
    

    @@index([authorId, published]) }

    生SQLの実行

    Prisma Clientで生SQLを実行することも可能です。

    import { PrismaClient } from '@prisma/client'
    const prisma = new PrismaClient()
    

    const users = await prisma.$queryRawSELECT * FROM "User" WHERE "email" = ${email}

    実践的なワークフロー

  • スキーマ設計: ビジネス要件に基づきモデルを定義
  • 初期マイグレーション: prisma migrate devでデータベース作成
  • 開発中の変更: スキーマ修正後、マイグレーションを繰り返す
  • テスト: テスト用データベースでマイグレーションをテスト
  • 本番適用: prisma migrate deployで本番環境に適用
  • トラブルシューティング

    マイグレーション競合

    複数ブランチでスキーマ変更があった場合、prisma migrate devで競合が発生することがあります。その場合は、ベースブランチに戻ってマイグレーションをリセットするか、手動で解決します。

    データ損失の防止

    prisma migrate devは、データ損失を伴う変更(カラム削除など)を検出すると警告を出します。--create-onlyオプションを使い、SQLを確認してから適用することもできます。

    まとめ

    OpenCodeとPrismaを組み合わせることで、データベース設計からマイグレーションまでを効率的に行えます。型安全なスキーマ定義、自動マイグレーション、SQL管理機能を活用し、堅牢なデータベース基盤を構築しましょう。

    参考リンク

  • Prisma公式ドキュメント
  • OpenCode公式サイト
  • 🛡️
    ContentLens 品質チェック済み

    この記事はAI品質チェッカーContentLensで分析されています。記事を貼り付けるだけで誰でも無料で品質スコアを確認できます。