---
title: 環境変数一覧
description: 箱庭諸島２ TypeScript 版で設定できる環境変数の一覧です。
sidebar:
  label: 環境変数一覧
---

Node.js 版では環境変数 (または `.env`) に、Cloudflare 版では `wrangler.jsonc` の `vars` か secret (`wrangler secret put` やダッシュボード) に設定します。

Node.js 版で常に必須の項目はありません。`HAKONIWA_BASE_URL` は、ループバック (`localhost`、`127.0.0.0/8`、`::1`) で待ち受けるときだけ省略できます。省略すると `http://localhost:<実際のポート>` になります。開発サーバーが空いているポートへずらしたときも、そのポートを使います。リクエストの Host ヘッダからは決めません。`0.0.0.0` や `::`、LAN や公開アドレスで待ち受けるとき (Vite の `--host`、`HAKONIWA_HOST`、ホスト未指定の `hakoniwa serve`) は必須で、未設定だと起動前にエラーで終了します。値を設定したときは、待ち受け先に関係なくその URL を使います。`db` や `game` のように HTTP サーバーを起動しないコマンドは、リクエストを受け取らないので、未設定なら `http://localhost:<PORT>` (`PORT` の既定は 3000) を使います。Cloudflare 版はすべての項目を省略できます。`HAKONIWA_BASE_URL` を省略したときは、リクエストのオリジンを公開 URL として使います。ログインのための秘密鍵は、未設定なら自動で生成されます。最初の管理者は `/admin/setup` で登録できます。ほかに環境変数が必要になるのは、X / Discord ログインやメール送信のように外部サービスの secret が必要な機能を使うときです。

## 認証・管理者

| 環境変数 | 既定値 | 説明 | Cloudflare |
| --- | --- | --- | --- |
| `HAKONIWA_AUTH_SECRET` | なし (自動生成) | ログインのセッションと CSRF トークンの鍵。未設定なら初回起動時にランダムな値を生成してデータベースに保存します。明示する場合は `openssl rand -base64 32` などで生成した 32 バイト以上のランダム文字列 | secret |
| `HAKONIWA_ADMIN_EMAILS` | なし | 管理者とみなすメールアドレス (カンマ区切り)。管理画面の「管理者」で追加した管理者に加えて、常に管理者として扱われます | vars |
| `HAKONIWA_BASE_URL` | Node.js 版はループバック待ち受けなら `http://localhost:<ポート>`。それ以外は必須。Cloudflare 版はなし (リクエストのオリジン) | 公開 URL。OAuth のコールバック、メールログインのリンク、Origin 検査に使います。Node.js 版でループバック (`pnpm dev` の既定、または `HAKONIWA_HOST=127.0.0.1`) のときは省略でき、実際に待ち受けたポートの `http://localhost:<ポート>` になります。非ループバックでは起動前に必要です。設定した値があるときは常にそれを使います。Cloudflare 版は未設定ならリクエストのオリジンを使います。カスタムドメインやリバースプロキシでは、ブラウザで開く公開 URL を設定します | vars |
| `HAKONIWA_X_CLIENT_ID` / `HAKONIWA_X_CLIENT_SECRET` | なし | 両方設定すると X (Twitter) ログインが使えるようになります | secret |
| `HAKONIWA_DISCORD_CLIENT_ID` / `HAKONIWA_DISCORD_CLIENT_SECRET` | なし | 両方設定すると Discord ログインが使えるようになります | secret |
| `HAKONIWA_RESEND_API_KEY` | なし | メールログインのメール送信 (Resend)。未設定ならログにリンクを出力するだけになります | secret |
| `HAKONIWA_MAIL_FROM` | `hakoniwa@example.com` | メールの送信元アドレス | vars |
| `HAKONIWA_DEV_LOGIN` | `false` | `true` で開発ログイン (任意のメールアドレスでログイン) を有効にします。**本番では必ず `false`** | vars |

## ゲームの動作

| 環境変数 | 既定値 | 説明 |
| --- | --- | --- |
| `HAKONIWA_MAX_CATCH_UP_TURNS` | Node.js 版は `1`、Cloudflare 版は `3` | 1 回の判定で進める最大ターン数 |
| `HAKONIWA_ADMIN_ENABLED` | `true` | 管理画面 (`/admin`) の有効・無効 |
| `HAKONIWA_DEBUG` | `false` | `true` でトップページに「ターンを進める」ボタンを表示します (管理者のみ。開発用) |

## 管理画面で変更する設定

次の設定は、管理画面で変更します。

| 設定 | 変更する場所 |
| --- | --- |
| サイトのタイトル、フッタの管理者名・連絡先・掲示板・トップページ | 管理画面の「サイト設定」 |
| タイムゾーン、追加の NG ワード、島ごとのローカル掲示板 | 管理画面の「サイト設定」 |
| 開始日時、最終ターン、1 ターンの長さ | 「新しいゲームを開始」のフォーム (CLI では `--start-at` / `--final-turn` / `--unit-time`)。開始後は「ゲーム設定」 |
| 管理者 | 管理画面の「管理者」(または `HAKONIWA_ADMIN_EMAILS`) |

:::note
`HAKONIWA_SITE_TITLE`・`HAKONIWA_ADMIN_NAME`・`HAKONIWA_EMAIL`・`HAKONIWA_BBS_URL`・`HAKONIWA_TOPPAGE_URL`・`HAKONIWA_NG_WORDS`・`HAKONIWA_USE_LBBS`・`HAKONIWA_TIMEZONE` は非推奨です。設定したままでも、管理画面の「サイト設定」で保存するまでは初期値として使われます。
:::

## Node.js 版のみ

| 環境変数 | 既定値 | 説明 |
| --- | --- | --- |
| `PORT` | `3000` | サーバーの待ち受けポート |
| `HAKONIWA_HOST` | なし (全インターフェース) | `hakoniwa serve` の待ち受けアドレス。`127.0.0.1`、`localhost`、`::1` ならループバックで、`HAKONIWA_BASE_URL` を省略できます。`0.0.0.0`、`::`、LAN や公開 IP では `HAKONIWA_BASE_URL` が必須です。開発サーバー (`pnpm dev`) の待ち受けは Vite の `--host` と `server.host` で決まり、この変数は使いません |
| `HAKONIWA_DB_PATH` | `./data/hakoniwa.sqlite` | SQLite データベースファイル |
| `HAKONIWA_BACKUP_DIR` | `./data/backups` | バックアップの出力先 |
| `HAKONIWA_TURN_CHECK_INTERVAL_SEC` | `60` | ターン進行を確認する間隔 (秒)。`0` で無効 |
| `HAKONIWA_PUBLIC_DIR` | `@hakoniwajs/core` の `public/` | 画像や CSS を配信するディレクトリ |

コード上の定義は `packages/core/src/bootstrap/config-from-env.ts` (共通)、`packages/node/src/config.ts` (Node.js 版) にあります。
