環境変数と .env カスケード#
.env 系ファイルは symfony/dotenv の標準カスケードで読み込まれます。
読み込み順(優先度)#
.env— コミットする既定値.env.local— ローカル上書き(gitignore).env.{APP_ENV}— 環境別の既定値(コミット).env.{APP_ENV}.local— 環境別のローカル上書き(gitignore)
- 存在しないファイルは黙ってスキップ。
- すでに
$_ENV/$_SERVER/getenv()にある値(実環境の変数)は、.localを含むこれらすべてのファイルより優先されます。ファイルの間では.localがコミット版を上書きします。
秘密情報は
.envに書かない。.envは通常コミット対象です。認証トークン等は gitignore 済みの.env.localに置いてください。
.env の例:
DATABASE_DSN=mysql:host=127.0.0.1;dbname=app;charset=utf8mb4
DATABASE_USER=app
DATABASE_PASSWORD=secretコミットする .env には APP_ENV を書きません。APP_ENV が無ければ本番扱いなので、指定し忘れたデプロイでも開発モードにはなりません。開発モードはマシンごとに gitignore 対象の .env.local で有効にします。relayer init が .env.local を書くのは新規プロジェクトだけなので、clone した直後は次を実行してください。
echo APP_ENV=dev >> .env.local利用できる環境変数#
| 変数 | 用途 |
|---|---|
APP_ENV | dev/development で PSX オンザフライコンパイル+プロファイラ有効。それ以外の値と未設定は本番扱い。開発では gitignore 対象の .env.local に APP_ENV=dev を書く |
DATABASE_DSN | PDO 接続文字列。未設定なら Db レイヤーは登録されない |
DATABASE_USER | DB ユーザー名 |
DATABASE_PASSWORD | DB パスワード |
DATABASE_TIMEOUT | 接続タイムアウト秒(PDO::ATTR_TIMEOUT) |
DATABASE_READ_TIMEOUT | MySQL 読み取りタイムアウト秒(任意) |
PROFILER_EXCLUDED_PATHS | プロファイラ除外パス(カンマ区切り・前方一致) |
HTTP_CLIENT_TIMEOUT | HTTP クライアントのリクエスト全体タイムアウト秒(任意) |
HTTP_CLIENT_CONNECT_TIMEOUT | HTTP クライアントの接続確立タイムアウト秒(任意) |
LOG_LEVEL | ロガーのしきい値。PSR-3 の 8 レベルのいずれか(既定 dev=debug/本番=info。綴り誤りは既定にソフトフェイル) |
LOG_FILE | ロガーの出力先パス(未設定なら STDERR) |
APP_LOCALE | 多言語化のデフォルト/アクティブロケール(既定 en) |
APP_LOCALES | サポートロケール(カンマ区切り。既定は APP_LOCALE のみ。2 つ以上でロケール切り替えが作用) |
LOCALE_COOKIE | ロケールを載せる Cookie 名(既定 locale。CDN セーフ・セッション不要) |
LOCALE_PATH_PREFIX | /{locale}/... ルーティングの opt-out(既定 true) |
NATIVE_ROUTE_TIMEOUT | ネイティブルートのタイムアウト秒(既定 30) |
GO_BIN | relayer native:build が使う go のパス |
ORIGIN_SECRET / ORIGIN_SECRET_PREVIOUS | OriginGuard を有効にする秘密値と、ローテーション中の旧値 |
ORIGIN_GUARD_HEADER / ORIGIN_GUARD_EXCEPT / ORIGIN_GUARD_MODE | OriginGuard のヘッダー名(既定 X-Origin-Secret)、除外パス、enforce / report |
TRUSTED_PROXIES / TRUSTED_PROXY_PRESET / CLOUDFLARE_IP_RANGES | TrustedProxy を有効にする CIDR、fly / cloudflare / xff、Cloudflare レイヤーの IP レンジ |
TYPESAFE_API_KEY / TYPESAFE_MODEL | satisfies() の Judge を有効にする API キーとモデル(既定 jev-latest) |
DATABASE_* は任意で、DATABASE_DSN が設定されたときだけ Db レイヤーが DI コンテナに登録されます(データベース 参照)。
APP_LOCALE / APP_LOCALES / LOCALE_COOKIE / LOCALE_PATH_PREFIX も任意で、何も設定しなければ単一ロケール(英語)のままコスト無しで動きます(多言語化 参照)。
このサイト固有の変数#
上はフレームワーク(relayer)の変数です。このドキュメントサイト(relayer-doc)自体は、これに加えて記事ストアの TURSO_DATABASE_URL / TURSO_AUTH_TOKEN(未設定なら var/docs.db)と、次を読みます。いずれも Fly secret として設定します。
| 変数 | 用途 |
|---|---|
GA_MEASUREMENT_ID | GA4 測定 ID(G-XXXXXXXXXX 形式のみ受理)。設定時だけ本番の <head> に gtag.js を出力。未設定なら一切出力しない=dev/ローカルは無計測 |
詳細はデプロイを参照。
最終更新 — 2026-11-04
改訂履歴 (7)
- v1.1.0: usePHP→Rosanna(rosanna-defer)に合わせて更新
- v0.31.0: 優先順位の修正と新しい環境変数を追記
- サイドバー再構成: 開発カテゴリ追加に伴う order 調整
- v0.17.0 の i18n 環境変数(APP_LOCALE/APP_LOCALES/LOCALE_COOKIE/LOCALE_PATH_PREFIX)を一覧に追記
- 「自動配線」を「自動で DI コンテナに登録」に。直訳の配線(wiring)が不明瞭なため明確化
- バージョン差分表記(vX.Y.Z 追加/破壊的変更/依存バージョン注記)を削除し現在形に整理
- 新規作成