Prisma 6 で MySQL を使う方法

今回は、 TypeScript / JavaScript で利用できる ORM (Object-Relational Mapping) である「Prisma」を使って、MySQL を利用する方法をご紹介します。現在の最新バージョンは Prisma 7 ですが、前のバージョンである Prisma 6 とはデータベースへの接続方法が変更されています。

そのため、バージョンを指定せずにパッケージをインストールすると、環境によってはエラーが発生する場合があります。この記事ではまず、現在主流で解説資料の多い Prisma 6 の設定方法をご紹介し、その後で Prisma 7 の設定方法や変更点についても触れていきます。

今回の実行環境は以下のようになっています。

  • Prisma 6・・・バージョン 6.19.2
  • Prisma 7・・・バージョン 7.3.0
  • VS Code (Windows 版)・・・バージョン 1.108.2
  • Node.js・・・バージョン 24.7
  • npm (npx)・・・バージョン 11.5.1
  • TypeScript コンパイラ (tsc)・・・バージョン 5.9.3
  • MySQL (MAMP 付属)・・・バージョン 5.7.24
Prisma 6 での設定方法

まず最初に任意の名称のフォルダを作成して、VS Code で開きます。Ctrl + @ キーを押してターミナル画面を表示します。表示されたターミナル画面に以下のように入力して、TypeScript の開発環境をインストールします。これにより、コンパイルと直接実行用のパッケージが利用可能になります。

npm i -D typescript ts-node @types/node

「package.json」ファイルを開き、2 行目に以下の設定を追加して ESM 形式 (import / export でモジュールを管理する形式) に設定します。本記事では ts-node を使用し、また Prisma 関連ファイルとの相性問題を避けるため、ESM 形式で設定しています。

{
  "type": "module",
  "devDependencies": {
    "@types/node": "^25.1.0",
    "ts-node": "^10.9.2",
    "typescript": "^5.9.3"
  }
}

続いて以下のように入力して 「tsconfig.json」ファイルを作成します。

npx tsc --init

作成された tsconfig.json ファイル内にある、「"outDir": "./dist",」設定のコメントアウトを解除します。無い場合は設定を追加します。

{
  // Visit https://aka.ms/tsconfig to read more about this file
  "compilerOptions": {
    // File Layout
    // "rootDir": "./src",
    "outDir": "./dist",

Prisma 6 をインストールします。

npm i -D prisma@6
npm i @prisma/client@6

続いて以下のように入力して、Prisma を初期化します。

npx prisma init

作成された「prisma/schema.prisma」という設定ファイルを以下のように修正します。

  • 8 行目 (generator の provider) を「prisma-client-js」に変更します。
  • 9 行目の「output」設定を削除します。
  • 13 行目 (datasource db の provider) を「mysql」に変更します。
  • 15 行目に「shadowDatabaseUrl (検証用データベースの URL)」設定を追加します。
  • 18 ~ 22 行目にテスト用のモデル (User) を追加します。
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
  output   = "../generated/prisma" ← ※ この設定行を削除します。
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
  shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}

VS Code に「Prisma」プラグインがインストールされていると、14 と 15 行目の設定 (url、shadowDatabaseUrl) 項目がサポートされていないというエラーが表示される場合があります。これは VS Code の Prisma プラグインがデフォルトで Prisma 7 の構文チェックを行うためです。そのような場合は VS Code に「Ctrl + Shift + P」キーと入力して、表示された上部のコマンドパレットに「prisma」と入力します。表示された候補から「Prisma: Pin the current ...」項目をクリックすると Prisma 6 モードに変更されてエラーが表示されなくなります。

逆に Prisma 7 モードに戻すには、VS Code に左下にある「管理」ボタンを押して表示されたメニューから「設定」を選択します。上部にある各種設定の検索欄に「@id:prisma.pinToPrisma6 prisma」と入力して、表示された設定のチェックを外して VS Code を再起動すると元に戻ります。

初期化処理で「prisma.config.ts」というファイルが作成された場合は、Prisma 6 では schema.prisma に接続設定を記述するため、残しておくと混乱の原因になるため削除します。

prisma.config.ts ← ※Prisma6 では使用しないので削除します。

VS Code または Windows のターミナル画面に以下のように入力して MySQL のコマンドプロンプトを表示させます。(フォルダ名は MAMP の場合の例になっています。)

cd C:\MAMP\bin\mysql\bin
.\mysql.exe -uroot -proot

MySQL のプロンプトで、以下のように入力してデータベースとユーザーを作成します。 (データベース名やユーザー名、パスワードはご自身の環境に合わせて適宜変更してください。) また、Prisma がマイグレーション (データベースの管理) で使用する検証用のシャドーデータベース (下の例では prisma6_shadow_db) も作成して、アクセス権限を付与しておきます。

create database prisma6_db;
grant all privileges on prisma6_db.* to prisma6_user@'localhost' identified by 'password'; 

create database prisma6_shadow_db;
grant all privileges on prisma6_shadow_db.* to 'prisma6_user'@'localhost';
flush privileges;

exit;

プロジェクトルートにある「.env」ファイルを開いて以下のように修正します。

DATABASE_URL="mysql://prisma6_user:password@localhost:3306/prisma6_db"
SHADOW_DATABASE_URL="mysql://prisma6_user:password@localhost:3306/prisma6_shadow_db"

以上で設定は終了です。VS Code のターミナル画面に以下のコマンドを入力するとデータテーブルが作成されます。

npx prisma migrate dev --name init

「migrations」フォルダ以下にテーブル作成用の SQL ファイルも作成されます。

PS D:\MAMP\htdocs\next-js-projects\prisma-test01> npx prisma migrate dev --name init
Environment variables loaded from .env
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Datasource "db": MySQL database "prisma6_db" at "localhost:3306"


Applying migration `20260130014718_init`

The following migration(s) have been applied:

migrations/
  └─ 20260130014718_init/
    └─ migration.sql

Your database is now in sync with your schema.

✔ Generated Prisma Client (6.19.2) to .\node_modules\@prisma\client in 54ms

プロジェクトルートフォルダに「index.ts」というファイルを作成して、以下のテストコードを記述します。

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {
  const user = await prisma.user.create({
    data: {
      name: "Taro Yamada",
      email: "taro@example.com",
    },
  });

  console.log("保存されたユーザー:", user);
}

main()
  .catch((e) => {
    console.error(e);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

VS Code のターミナル画面で以下のコマンドを実行して、「PrismaClient」クラスのコードを生成します。Prisma Client の実体は「node_modules/.prisma/client」以下に生成され、アプリケーションからは「@prisma/client」パッケージを通して参照されます。(@prisma/client をインストールした時に自動で作成されるようですが、念のために再度作成しておきます。)

npx prisma generate

VS Code のターミナル画面に以下のコマンドを入力すると、テストコードが実行されます。

npx ts-node index.ts

正常にデータが作成されました。

mysql> use prisma6_db;
Database changed
mysql> select * from User;
+----+-------------+------------------+
| id | name        | email            |
+----+-------------+------------------+
|  1 | Taro Yamada | taro@example.com |
+----+-------------+------------------+
1 row in set (0.00 sec)

mysql>

サンプルコードをビルドしてから実行する場合は、VS Code のターミナル画面に以下のコマンドを入力します。

同じメールアドレスを登録するとエラーになるので、一旦 SQL で「delete from User;」※1 などと入力してデータを削除するか、MAMP を使用している場合はブラウザーの URL 欄に「localhost/phpMyAdmin5」と入力してブラウザー上でサンプルデータを削除してから実行してください。

※ Linux 環境(WSL2 / Ubuntu など)ではテーブル名の大文字・小文字が区別されるため、Prisma の model 名と同じケースで指定してください。

npx tsc
node dist/index.js
Prisma 7 での設定方法

Prisma 7 ではデータベースへの接続方法が変更されました。
具体的な変更内容は以下のようになっています。

  • prisma.config.ts が中心設計に
    → 接続設定や実行戦略は config 側で管理
  • 接続方法が adapter / accelerate 前提に
    → 直接 DB 接続ではなく「どう繋ぐか」を選ぶ設計
  • schema.prisma の役割が縮小
    → URL は外れ、モデル定義が主用途に
  • Edge / Serverless を正式サポート
    → Node.js 以外の実行環境を強く意識
  • migrate の安全性が強化
    → shadow DB 前提、db push との使い分けが明確化

などの修正が行われたようです。本記事では前のセクションと同じ機能を実現するための設定方法についてご説明いたします。基本的な設定は Prisma 6 と同じ部分が多いため、前のセクションと同じと思われる箇所はコマンド入力例を示す程度になっています。

最初に任意のフォルダを作成して VS Code で開いて、ターミナル画面から TypeScript 環境をインストールします。

npm i -D typescript ts-node @types/node

「package.json」ファイルを開き、ESM 形式に設定します。

{
  "type": "module",
  "devDependencies": {
    "@types/node": "^25.1.0",
    "ts-node": "^10.9.2",
    "typescript": "^5.9.3"
  }
}

「tsconfig.json」ファイルを作成します。

npx tsc --init

tsconfig.json ファイル内にある、「"outDir": "./dist",」設定のコメントアウトを解除します。次に 12 行目を「"types": ["node"],」に変更します。最後に 25 行目の「exactOptionalPropertyTypes」設定をコメントアウトします。

{
  // Visit https://aka.ms/tsconfig to read more about this file
  "compilerOptions": {
    // File Layout
    // "rootDir": "./src",
    "outDir": "./dist",

    // Environment Settings
    // See also https://aka.ms/tsconfig/module
    "module": "nodenext",
    "target": "esnext",
    "types": ["node"],
    // For nodejs:
    // "lib": ["esnext"],
    // "types": ["node"],
    // and npm install -D @types/node

    // Other Outputs
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,

    // Stricter Typechecking Options
    "noUncheckedIndexedAccess": true,
    // "exactOptionalPropertyTypes": true,

Prisma 7 をインストールします。

npm i -D prisma@7
npm i @prisma/client@7

Prisma 7 を初期化します。

npx prisma init

「prisma/schema.prisma」設定ファイルを以下のように修正します。

  • 8 行目 (generator の provider) を「prisma-client-js」に変更します。
  • 9 行目の「output」設定を削除します。
  • 13 行目 (datasource db の provider) を「mysql」に変更します。
  • 16 ~ 20 行目にテスト用のモデル (User) を追加します。
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
  provider = "prisma-client-js"
  output   = "../generated/prisma" ← ※ この設定行を削除します。
}

datasource db {
  provider = "mysql"
}

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}

次に「prisma.config.ts」ファイルを開いて、13 行目にシャドーデータベースの URL を追加します。

// This file was generated by Prisma, and assumes you have installed the following:
// npm install --save-dev prisma dotenv
import "dotenv/config";
import { defineConfig } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  migrations: {
    path: "prisma/migrations",
  },
  datasource: {
    url: process.env["DATABASE_URL"],
    shadowDatabaseUrl: process.env["SHADOW_DATABASE_URL"]
  },
});

VS Code または Windows のターミナル画面で MySQL のプロンプトを起動します。

cd C:\MAMP\bin\mysql\bin
.\mysql.exe -uroot -proot

MySQL のプロンプトで、データベースとユーザーを作成します。 シャドーデータベースも作成して、アクセス権限を付与しておきます。

create database prisma7_db;
grant all privileges on prisma7_db.* to prisma7_user@'localhost' identified by 'password'; 

create database prisma7_shadow_db;
grant all privileges on prisma7_shadow_db.* to 'prisma7_user'@'localhost';
flush privileges;

exit;

プロジェクトルートにある「.env」ファイルを開いて以下のように修正します。

DATABASE_URL="mysql://prisma7_user:password@localhost:3306/prisma7_db"
SHADOW_DATABASE_URL="mysql://prisma7_user:password@localhost:3306/prisma7_shadow_db"

以上で設定は終了です。VS Code のターミナル画面に以下のコマンドを入力するとデータテーブルが作成されます。

npx prisma migrate dev --name init

「migrations」フォルダ以下にテーブル作成用の SQL ファイルも作成されます。

PS D:\MAMP\htdocs\next-js-projects\prisma-test02> npx prisma migrate dev --name init
Loaded Prisma config from prisma.config.ts.

Prisma schema loaded from prisma\schema.prisma.
Datasource "db": MySQL database "prisma7_db" at "localhost:3306"

Applying migration `20260131085815_init`

The following migration(s) have been created and applied from new schema changes:

prisma\migrations/
  └─ 20260131085815_init/
    └─ migration.sql

Your database is now in sync with your schema.

Prisma 7 では、特に config ベース構成や Edge / Serverless 環境を強く意識した設計になっており、adapter の利用が推奨されているようです。そのため、ローカルのデータベースに接続するための adapter をインストールします。今回は MySQL と互換性のある MariaDB のアダプターを使用します。(MySQL 専用のアダプターもありますが、現時点ではまだ使用できないようです。)

npm i @prisma/adapter-mariadb mariadb

プロジェクトルートフォルダに「index.ts」というファイルを作成して、以下のテストコードを記述します。データの操作方法は変わりませんが、PrismaClient を構築するためにアダプターが必要になります。

import "dotenv/config";
import { PrismaClient } from "@prisma/client";
import { PrismaMariaDb } from "@prisma/adapter-mariadb";

const adapter = new PrismaMariaDb(process.env.DATABASE_URL!);
const prisma = new PrismaClient({ adapter });

async function main() {
  const user = await prisma.user.create({
    data: {
      name: "Taro Yamada",
      email: "taro@example.com",
    },
  });

  console.log("保存されたユーザー:", user);
}

main()
  .catch((e) => {
    console.error(e);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

VS Code のターミナル画面に以下のように入力して「PrismaClient」クラスのコードを生成します。

npx prisma generate

VS Code のターミナル画面に以下のコマンドを入力すると、テストコードが実行されます。

npx ts-node index.ts

正常にデータが作成されました。

mysql> use prisma7_db;
Database changed
mysql> select * from User;
+----+-------------+------------------+
| id | name        | email            |
+----+-------------+------------------+
|  1 | Taro Yamada | taro@example.com |
+----+-------------+------------------+
1 row in set (0.00 sec)

mysql>

サンプルコードをビルドしてから実行する場合は、VS Code のターミナル画面に以下のコマンドを入力します。

npx tsc
node dist/index.js

同じメールアドレスを登録するとエラーになるので、一旦 SQL で「delete from User;」などと入力してデータを削除するか、MAMP を使用している場合はブラウザーの URL 欄に「localhost/phpMyAdmin5」と入力してブラウザー上でサンプルデータを削除してから実行してください。

以上です。よろしかったらお試しください。