`.env` ファイル
Prisma ORM は、プロジェクトのルートにデフォルトの ` .env` ファイルを作成します。このファイルを置き換えるか、`prisma` フォルダーに新しいファイルを作成するか、`prisma.schema` ファイルを再配置する場合は、そのファイルと一緒に作成することができます。
`.env` ファイルの場所
Prisma CLI は、以下の場所で ` .env` ファイルを順番に探します。
- プロジェクトのルートフォルダー (`./.env`)
- `--schema` 引数で指定されたスキーマと同じフォルダーから
- `package.json` の `"prisma": {"schema": "/path/to/schema.prisma"}` から取得したスキーマと同じフォルダーから
- `./prisma` フォルダーから
手順 1. で `.env` ファイルが見つかったが、手順 2.〜4. で競合する `.env` 変数が見つかった場合、CLI はエラーをスローします。たとえば、2 つの異なる `.env` ファイルに `DATABASE_URL` 変数を指定すると、次のエラーが発生します。
Error: There is a conflict between env vars in .env and prisma/.env
Conflicting env vars:
DATABASE_URL
We suggest to move the contents of prisma/.env to .env to consolidate your env vars.
次の表は、Prisma CLI が `.env` ファイルを探す場所を示しています。
コマンド | スキーマの場所 | チェックされる `.env` ファイルの場所(順番) |
---|---|---|
`prisma [command]` | `./prisma/schema.prisma` | `./.env` `./prisma/.env` |
`prisma [command] --schema=./a/b/schema.prisma` | `./a/b/schema.prisma` | `./.env` `./a/b/.env` `./prisma/.env` |
`prisma [command]` | `"prisma": {"schema": "/path/to/schema.prisma"}` | `.env` `./path/to/schema/.env` `./prisma/.env` |
`prisma [command]` | スキーマがない場合(例:空のディレクトリで `prisma db pull` を実行する場合) | `./.env` `./prisma/.env` |
その `.env` ファイルで定義されている環境変数は、Prisma CLI コマンドを実行すると自動的にロードされます。
`.env` ファイルをバージョン管理にコミットしないでください。!
環境変数が 2 か所で定義されている場合の動作については、`dotenv` のドキュメントを参照してください。
変数の展開
`.env` ファイルに保存されている変数は、dotenv-expand で指定された形式を使用して展開できます。
DATABASE_URL=postgresql://test:test@localhost:5432/test
DATABASE_URL_WITH_SCHEMA=${DATABASE_URL}?schema=public
これにより、`DATABASE_URL_WITH_SCHEMA` 環境変数が `postgresql://test:test@localhost:5432/test?schema=public` の値で Prisma ORM で使用できるようになります。
`.env` ファイルの *外部* で設定されている環境変数、たとえば Heroku などの PaaS で設定されているデータベース URL を展開に使用することもできます。
# environment variable already set in the environment of the system
export DATABASE_URL=postgresql://test:test@localhost:5432/test
DATABASE_URL_WITH_SCHEMA=${DATABASE_URL}?schema=foo
これにより、`DATABASE_URL_WITH_SCHEMA` 環境変数が `postgresql://test:test@localhost:5432/test?schema=foo` の値で Prisma ORM で使用できるようになります。
例:`.env` ファイルで `DATABASE_URL` 環境変数を設定する
データベース接続 URL を環境変数からロードするのが一般的です。
// schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
`.env` ファイルに `DATABASE_URL` を設定できます。
DATABASE_URL=postgresql://test:test@localhost:5432/test?schema=public
`datasource` ブロックで定義されたデータベースにアクセスする必要があるコマンド(例:`prisma db pull`)を実行すると、Prisma CLI は `.env` ファイルから `DATABASE_URL` 環境変数を自動的にロードし、CLI で使用できるようにします。
コードでの環境変数の使用
環境変数を実行時に評価する必要がある場合は、アプリケーションコードで手動でロードする必要があります(例:`dotenv` を使用)。
import * as dotenv from 'dotenv'
dotenv.config() // Load the environment variables
console.log(`The connection URL is ${process.env.DATABASE_URL}`)
環境変数にカスタムファイル名を使用している場合は、`dotenv` を設定してそのファイル名を使用するようにすることができます。
import * as dotenv from 'dotenv'
var envFile = path.resolve(join(__dirname, "myenv.env"))
dotenv.config({path: envFile}) // Load the environment variables
console.log(`The connection URL is ${process.env.DATABASE_URL}`)
環境ファイル全体で変数を展開する必要がある場合は、さらに `dotenv-expand` を使用できます。
import * as dotenv from 'dotenv'
const dotenvExpand = require('dotenv-expand')
var envFile = path.resolve(join(__dirname, "myenv.env"))
var mySqlEnv = dotenv.config({path: envFile})
dotenvExpand.expand(mySqlEnv)