Skip to content

Bun は .env ファイルを自動的に読み取り、環境変数をプログラムで読み書きするための慣用的な方法を提供します。さらに、Bun のランタイム動作の一部は Bun 固有の環境変数で構成できます。

環境変数の設定

Bun は以下のファイルを自動的に読み取ります(優先順位の低い順から高い順にリスト)。

  • .env
  • .env.production.env.development.env.testNODE_ENV の値による)
  • .env.local
ini
FOO=hello
BAR=world

変数はコマンドラインでも設定できます。

sh
FOO=helloworld bun run dev
sh
# CMD を使用
set FOO=helloworld && bun run dev

# PowerShell を使用
$env:FOO="helloworld"; bun run dev

Windows でのクロスプラットフォームソリューション

クロスプラットフォームソリューションとして、bun shell を使用できます。例えば、bun exec コマンドです。

sh
bun exec 'FOO=helloworld bun run dev'

Windows では、bun run で呼び出される package.json スクリプトは自動的に bun shell を使用するため、以下もクロスプラットフォームになります。

json
"scripts": {
  "dev": "NODE_ENV=development bun --watch app.ts",
},

または、process.env にプロパティを割り当てることでプログラムで設定できます。

ts
process.env.FOO = "hello";

.env ファイルの手動指定

Bun は --env-file をサポートしており、読み込む特定の .env ファイルをオーバーライドできます。--env-file は、Bun ランタイムでスクリプトを実行する場合や、package.json スクリプトを実行する際に使用できます。

sh
bun --env-file=.env.1 src/index.ts

bun --env-file=.env.abc --env-file=.env.def run build

自動的な .env 読み込みの無効化

--no-env-file を使用して、Bun の自動的な .env ファイルの読み込みを無効にします。これは、システム環境変数のみに依存したい本番環境や CI/CD パイプラインで役立ちます。

sh
bun run --no-env-file index.ts

これは bunfig.toml でも構成できます。

toml
# .env ファイルの読み込みを無効化
env = false

--env-file で明示的に指定された環境ファイルは、デフォルトの読み込みが無効になっていても読み込まれます。


引用符

Bun は二重引用符、一重引用符、テンプレートリテラルのバックティックをサポートしています。

ini
FOO='hello'
FOO="hello"
FOO=`hello`

展開

環境変数は自動的に展開されます。つまり、環境変数で以前に定義された変数を参照できます。

ini
FOO=world
BAR=hello$FOO
ts
process.env.BAR; // => "helloworld"

これは、接続文字列やその他の複合値を構築する際に役立ちます。

ini
DB_USER=postgres
DB_PASSWORD=secret
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME

これは、$ をバックスラッシュでエスケープすることで無効にできます。

ini
FOO=world
BAR=hello\$FOO
ts
process.env.BAR; // => "hello$FOO"

dotenv

一般的に、Bun は .env ファイルを自動的に読み取るため、dotenvdotenv-expand はもう必要ありません。

環境変数の読み取り

現在の環境変数には process.env を介してアクセスできます。

ts
process.env.API_TOKEN; // => "secret"

Bun はこれらの変数を Bun.envimport.meta.env からも公開しています。これは process.env の単純なエイリアスです。

ts
Bun.env.API_TOKEN; // => "secret"
import.meta.env.API_TOKEN; // => "secret"

現在設定されているすべての環境変数をコマンドラインに出力するには、bun --print process.env を実行します。これはデバッグに役立ちます。

sh
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<lots more lines>

TypeScript

TypeScript では、process.env のすべてのプロパティは string | undefined として型付けされます。

ts
Bun.env.whatever;
// string | undefined

自動補完を取得し、変数を必須の文字列として TypeScript に認識させるには、インターフェースマージング を使用します。

ts
declare module "bun" {
  interface Env {
    AWESOME: string;
  }
}

この行をプロジェクト内の任意のファイルに追加します。これにより、AWESOME プロパティが process.envBun.env にグローバルに追加されます。

ts
process.env.AWESOME; // => string

Bun の構成

これらの環境変数は Bun によって読み取られ、動作の側面を構成します。

名前説明
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 は SSL 証明書の検証を無効にします。これはテストとデバッグに役立ちますが、本番環境での使用は非常に慎重に行う必要があります。注:この環境変数は元々 Node.js によって導入され、互換性のために名前が維持されています。
BUN_CONFIG_VERBOSE_FETCHBUN_CONFIG_VERBOSE_FETCH=curl の場合、fetch リクエストは URL、メソッド、リクエストヘッダー、レスポンスヘッダーをコンソールにログ出力します。これはネットワークリクエストのデバッグに役立ちます。これは node:http でも動作します。BUN_CONFIG_VERBOSE_FETCH=1curl 出力がないことを除いて BUN_CONFIG_VERBOSE_FETCH=curl と同等です。
BUN_RUNTIME_TRANSPILER_CACHE_PATHランタイムトランスパイラーは、50 KB より大きいソースファイルのトランスパイルされた出力をキャッシュします。これにより、Bun を使用する CLI の読み込みが高速化されます。BUN_RUNTIME_TRANSPILER_CACHE_PATH が設定されている場合、ランタイムトランスパイラーはトランスパイルされた出力を指定されたディレクトリにキャッシュします。BUN_RUNTIME_TRANSPILER_CACHE_PATH が空の文字列または文字列 "0" に設定されている場合、ランタイムトランスパイラーはトランスパイルされた出力をキャッシュしません。BUN_RUNTIME_TRANSPILER_CACHE_PATH が未設定の場合、ランタイムトランスパイラーはトランスパイルされた出力をプラットフォーム固有のキャッシュディレクトリにキャッシュします。
TMPDIRBun は、バンドルやその他の操作中に中間アセットを保存するためのディレクトリを必要とすることがあります。未設定の場合、プラットフォーム固有の一時ディレクトリ(Linux では /tmp、macOS では /private/tmp)にデフォルト設定されます。
NO_COLORNO_COLOR=1 の場合、ANSI カラー出力が 無効 になります。
FORCE_COLORFORCE_COLOR=1 の場合、NO_COLOR が設定されていても ANSI カラー出力が強制的に有効になります。
BUN_CONFIG_MAX_HTTP_REQUESTSfetch と bun install によって送信される同時 HTTP リクエストの最大数を制御します。デフォルトは 256 です。レート制限や接続の問題が発生した場合は、この数値を減らすことができます。
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADBUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true の場合、bun --watch はリロード時にコンソールをクリアしません。
DO_NOT_TRACKクラッシュ時にクラッシュレポートを bun.report にアップロードすることを無効にします。macOS と Windows では、デフォルトでクラッシュレポートのアップロードが有効になっています。それ以外の場合、2024 年 5 月 21 日現在、テレメトリはまだ送信されませんが、今後数週間でテレメトリを追加する予定です。DO_NOT_TRACK=1 の場合、自動アップロードされるクラッシュレポートとテレメトリの両方が 無効 になります。
BUN_OPTIONSすべての Bun 実行にコマンドライン引数を追加します。例えば、BUN_OPTIONS="--hot"bun run devbun --hot run dev のように動作させます。

ランタイムトランスパイラーキャッシング

50 KB より大きいファイルの場合、Bun はトランスパイルされた出力を $BUN_RUNTIME_TRANSPILER_CACHE_PATH またはプラットフォーム固有のキャッシュディレクトリにキャッシュします。これにより、Bun を使用する CLI の読み込みが高速化されます。

このトランスパイラーキャッシュはグローバルで、すべてのプロジェクトで共有されます。いつでもキャッシュを削除しても安全です。これはコンテンツアドレス指定キャッシュであるため、重複したエントリが含まれることはありません。Bun プロセスの実行中にキャッシュを削除しても安全です。

Docker のような一時ファイルシステムを使用する場合は、このキャッシュを無効にすることをお勧めします。Bun の Docker イメージはこのキャッシュを自動的に無効にします。

ランタイムトランスパイラーキャッシュを無効にする

ランタイムトランスパイラーキャッシュを無効にするには、BUN_RUNTIME_TRANSPILER_CACHE_PATH を空の文字列または文字列 "0" に設定します。

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

何がキャッシュされるか

以下がキャッシュされます。

  • 50 KB より大きいソースファイルのトランスパイルされた出力
  • ファイルのトランスパイルされた出力のソースマップ

これらのキャッシュされたファイルには .pile というファイル拡張子が使用されます。

Bun by www.bunjs.com.cn 編集