# 環境変数

デプロイしたアプリがビルドされ実行されるときに `process.env` で受け取る値です。API キーや外部サービスのアドレスなど、
リポジトリに入れてはいけない値をここに置きます。

```
list_env_vars    今ある変数。機密の値は末尾4文字だけ
set_env_vars     1つ以上を保存。variables または dotenv（.env の内容をまるごと）
remove_env_var   1か所（production または preview）から削除
```

## どこに適用されるか

`targets` で選びます。`production` は本番ブランチのデプロイ、`preview` はそれ以外のすべてのブランチです。
同じ名前で、それぞれに別の値を置けます。プレビューにはテスト用のキー、本番には本物のキーを。
production の値は、オーナーと管理者だけが変更できます。

## いつ反映されるか

**変更した値は次のデプロイから**ビルドに使われます。すでにビルドされた結果に埋め込まれた値は変わりません。
サーバーとして動くアプリは、次に起動したときに新しい値を受け取ります。

## 使えない名前

`PORT`、`HOST`、`HOSTNAME`、`HOME` と、`BLACKWALL_` で始まる名前はプラットフォームが使います。ビルドには `CI=1` が入りますが、`CI` を自分で設定すると(例: `CI=false`)その値を使います。
プラットフォームが入れる値:

```
BLACKWALL_ENV              production または preview
BLACKWALL_URL              このデプロイが配信されるアドレス（ホスト名）
BLACKWALL_GIT_COMMIT_SHA   ビルドしたコミット
BLACKWALL_GIT_BRANCH       ビルドしたブランチ
```

## 自動で入る変数

保存しなくても、このプロジェクトのアドレスとキーがSupabaseと同じ名前で入ります(list_env_varsの`automatic`、コンソールの環境変数画面、`oneend env ls`)。入る場所(`available_in`)は変数ごとに違います。

```
                                                           入る場所
SUPABASE_URL, NEXT_PUBLIC_SUPABASE_URL                     ビルドと実行時   https://<ref>.<zone>
SUPABASE_ANON_KEY, NEXT_PUBLIC_SUPABASE_ANON_KEY,
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY                       ビルドと実行時   公開キー(アクセスルールに従う)
SUPABASE_SERVICE_ROLE_KEY                                  実行時のみ       シークレットキー(アクセスルールを無視、サーバーのコードでだけ)
DATABASE_URL, POSTGRES_URL                                 本番の実行時のみ プーラー 6543(パスワードを保管しているときだけ)
DIRECT_URL                                                 本番の実行時のみ 直接 5432(パスワードを保管しているときだけ)
```

実行時とはサーバー・ミドルウェア・関数です。サービスロールキーはビルド(インストール・ビルドコマンド、依存パッケージのスクリプトが動く場所)には入りません。
同じ名前で保存すると保存した値を使い、保存した値はビルドにも入ります。データベースブランチがあるgitブランチのプレビューにはブランチの値が入ります。
`DATABASE_URL`・`POSTGRES_URL`・`DIRECT_URL`は、`reset_database_password { ref, keep_for_deploys: true }`(コンソール: データベース接続 → 新しいパスワードを作成 →「本番デプロイに渡す」)で作ったパスワードを保管しているあいだだけ、本番のサーバー・ミドルウェア・関数に入ります(ビルドとプレビューには入りません)。シークレットキーと同じく、すべての行を読める接続です。`keep_for_deploys`なしで作り直すと渡さなくなります。
`oneend env pull`は公開の値だけを.env.localに書きます。Viteアプリは`VITE_SUPABASE_URL`のように接頭辞が違う名前を読むので、自分で保存してください。

## 機密の値

`sensitive: true` で保存すると、その後は値を読み戻せません。シークレットキーに使ってください。
`sensitive` を指定しないと、名前に SECRET、TOKEN、PASSWORD、PRIVATE、DSN、DATABASE_URL、KEY_ を含むか _KEY で終わる変数は機密の値として保存します（応答の `sensitive_keys`）。読める状態にしておくには `sensitive: false` を指定してください。
機密でない値もすべて暗号化して保存します。違いは、もう一度表示するかどうかだけです。

## ブラウザに届く値

`NEXT_PUBLIC_` や `VITE_` のように、フレームワークがブラウザのコードに入れる名前は、**ビルド結果にそのまま入り、誰でも見られます。**
シークレットキーにはこうした名前を使わないでください。

---

https://end.blackall.ai/docs/env?lang=ja
