event-manual / chapter 4

環境変数リファレンス

@event/core@event/fours-sdk

defineEnv — zod 検証つき env リゾルバ

3リポのどこにも無かった欠落機能である。DATABASE_URL / CRON_SECRET / FOURS_* の欠落を boot 時に fail-fast で検出し、本番で undefined のまま静かに走らせない。

// src/env.ts
import { z } from "zod";
import { defineEnv } from "@event/core";

export const env = defineEnv({
  FOURS_EVENT_SLUG: z.string().min(1),
  ADMIN_PASSWORD: z.string().min(8),
  SESSION_SECRET: z.string().min(16),
  DATABASE_URL: z.string().url().optional(),
});

検証失敗は EnvValidationError を throw し、キーごとの理由を列挙する。同じ shape から envExample(shape, comments).env.example の内容を生成できる(optional キーには # optional 注記が付く)。生成物は commit して運用する。

4S 接続(@event/fours-sdk — createFoursConfig が解決)

変数用途既定 / 備考
FOURS_API_BASEevent API basehttps://api.4s.link。legacy FOURS_API / FOUR_S_API fallback あり
FOURS_EVENT_SLUG対象イベント slugfetchEvent の既定 slug
FOURS_PUBLIC_READ1/true で public-read mode認証なし読み取り
FOURS_API_KEYwrite 系 Bearer。設定で authenticated modelegacy FOUR_S_API_KEY / FOUR_S_SERVICE_TOKEN fallback
USE_MOCK_DATA1 で mock-locked(4S に一切出ない)mode 判定の最優先
FOURS_WEBHOOK_SECRETinbound webhook HMAC-SHA256 鍵verifyWebhookSignature
FOURS_V2_API_BASE / NEXT_PUBLIC_4S_V2_API_BASEauth 系(login / users/me / handoff)base未指定なら apiBase と同一ホスト
NEXT_PUBLIC_4S_V2_WEB_BASE4S Web base(プロフィール URL 組み立て)https://4s.link
NEXT_PUBLIC_4S_LOGIN_URLログインレス handoff の起点 URLhttps://4s.link/ja/handoff/launch

セッション / 認証

変数用途備考
SESSION_SECRETjose HS256 cookie セッションの署名鍵本番未設定は createSessionCodec が throw(fail-closed)。dev は警告つき固定鍵
ADMIN_PASSWORD共有パスワード admin の期待値未設定は fail-closed(ログイン不可)。realm ごとに passwordEnv で別変数も指定可

4S service / admin API(opt-in)

変数用途
FOURS_REFRESH_TOKENCognito refresh token(優先。Google ログインのアカウント可)
FOURS_LOGIN_EMAIL / FOURS_LOGIN_PASSWORDPOST /auth/login fallback
FOURS_EVENT_IDadmin API(/manage/events/{id}/entries 等)の対象イベント ID

コンテンツストア(@event/core createContentStore — 本番のみ)

変数用途既定
GITHUB_TOKENOctokit commit 用 PAT必須(本番書き込み)
GITHUB_REPO_OWNER / GITHUB_REPO_NAMEcommit 先リポジトリ必須
GITHUB_BRANCHcommit 先ブランチmain

ストレージ / KV / cron

変数用途備考
BLOB_READ_WRITE_TOKENVercel Blob(@event/asset-kit createAssetStore)未設定時 put は throw
KV_REST_API_URL / KV_REST_API_TOKENUpstash Redis REST(Vercel KV)未設定なら dev in-memory shim に自動フォールバック
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN同上の別名kv() が両方を解決
CRON_SECRETAuthorization: Bearer 厳格一致(withCronAuth)未設定は 503 fail-closed。比較は trim 硬化

ビルド制御

変数用途
NEXT_DIST_DIRdistDir の明示指定(createNextConfig)
BUILD_LOCAL1 で distDir を .next-local に分離(dev 中の yarn build 事故防止)

既知のトラップ