このプロジェクトのコード (src/ ・ tools/ ・ tests/ ・ deploy/ ・ bin/)が読む環境変数と、それを渡している所をまとめる。環境変数はプロセスの一覧に出ず、渡し損ねても既定値で静かに動く。どこで効いていて、どこで効いていないかを、ここで 1 か所に持つ。
変数を足す・消す・渡し方を変えたら、同じ作業の中でこの資料を直す。見直しの手順は 5 章。
その場面で値が渡されて効いている変数だけを書く。読むコードはあっても誰も渡していないものは、ここには入れない (次の表の ○)。
| 読む側 | 本番 | 試験 |
|---|---|---|
クライアント (node 版 src/client/) | なし | なし |
クライアント (Rust 版 src/cli-rs/) | なし | なし |
ブラウザ画面 (src/web/) | なし | なし |
サーバ (src/server/) | AICHAT_PORT(中身は既定と同じ 8787)AICHAT_MANAGED | AICHAT_DATA ・ AICHAT_PORTAICHAT_NO_EXIT ・ AICHAT_LEAVE_GRACE_MS |
運用の道具 (tools/80_ops/) | USERPROFILE(OS が渡す) | AICHAT_DATA ・ AICHAT_PORTMASK_LOG_TEST_CALL_LOG(テストの偽物が読む) |
試験の道具 (tools/40_test/) | (本番では使わない) | AICHAT_DATA ・ AICHAT_NO_EXITCONTRAST_TARGET_DIR(外の道具へ渡す) |
印の意味: ● 値が渡されて効いている / ○ 読むコードはあるが、誰も渡していない (既定値で動く) / — 読まない
| 変数 | クライアント 本番 | クライアント 試験 | サーバ 本番 | サーバ 試験 | 道具 本番 | 道具 試験 |
|---|---|---|---|---|---|---|
AICHAT_DATA | — | — | ○ | ● | ○ | ● |
AICHAT_PORT | — | — | ● | ● | ○ | ● |
AICHAT_MANAGED | — | — | ● | ○ | — | — |
AICHAT_NO_EXIT | — | — | ○ | ● | — | ● |
AICHAT_LEAVE_GRACE_MS | — | — | ○ | ● | — | — |
AICHAT_LOCK_POLL_MS | — | — | — | — | ○ | ○ |
AICHAT_LOCK_MAX_TRIES | — | — | — | — | ○ | ○ |
MASK_LOG_TEST_CALL_LOG | — | — | — | — | — | ● |
CONTRAST_TARGET_DIR | — | — | — | — | — | ● |
USERPROFILE(OS) | — | — | — | — | ● | ● |
クライアントは、本番でも試験でも 1 つも読まない。接続先・名乗る ID・ルーム・アクセストークンは、すべて引数で渡す。本番のサーバで効いているのは、WinSW の XML が渡す 2 つだけで、そのうち AICHAT_PORT は既定と同じ値である。
読む所・既定値・渡している所。行番号は 2026-10-15 時点。
| 変数 | 何を変えるか | 読む所 | 既定値 | 渡している所 |
|---|---|---|---|---|
AICHAT_DATA | データの置き場 (DB ・ バックアップの印 ・ メンテナンスの印)。本番かテストかも、これで決まる(置き場が _data そのものなら本番、それ以外はテスト) | src/server/config.mjs:34(:112 で由来を記録)試験の道具 5 本 ( start-test-server.mjs ・ compare-cli.mjs ・ benchmark-waiters.mjs ・ purge-test-data.mjs ・ rename-dryrun.mjs) | _data | テスト (tests/helpers/prepare-db.mjs ほか多数)・ テスト用サーバ ・ run-ui-tests.ps1 ・ benchmark-server.mjs。本番は誰も渡さない(サービスもバックアップのタスクも既定で動く) |
AICHAT_PORT | サーバが受けるポート | src/server/config.mjs:66(:111 で由来を記録)tools/80_ops/restore.ps1:64 | 8787 | 本番は deploy/node-ai-chat-lite-winsw.xml:20 が 8787 を渡す。テスト用サーバ ・ テスト ・ restore-ps1.test.mjs(restore.ps1 に渡す)。restore.ps1 を本番で動かすときは誰も渡さず、既定の 8787 になる |
AICHAT_MANAGED | WinSW から起動されたか。終了の要求を受けたとき、起動し直してもらえる前提で終わってよいかの判断に使う | src/server/server.mjs:660 | なし | 本番は deploy/node-ai-chat-lite-winsw.xml:23 が winsw を渡す。テストは渡さない (直に起動するため。tests/server.test.mjs:625) |
AICHAT_NO_EXIT | 1 なら、終了の要求が来ても落ちない (テストのプロセスごと落ちないようにする) | src/server/server.mjs:631 | なし | テスト 9 本 (server.test.mjs ・ client-wait.test.mjs など)・ rename-dryrun.mjs(自分のプロセスに立てる)。restore-ps1.test.mjs は、本当に落ちることを確かめるため、わざと渡さない |
AICHAT_LEAVE_GRACE_MS | 切断から離脱とみなすまでの猶予 (ミリ秒) | src/server/server.mjs:591 | 5000 | tests/server.test.mjs:16(150 に縮める)だけ |
AICHAT_LOCK_POLL_MS | バックアップの印を見に行く間隔 (ミリ秒) | src/server/backup.mjs:119 | 30000 | 誰も渡していない。テスト (backup.test.mjs ・ maintenance.test.mjs)は、関数の引数 pollMs で縮めている |
AICHAT_LOCK_MAX_TRIES | バックアップの印を待って諦めるまでの回数 | src/server/backup.mjs:120 | 10 | 誰も渡していない。テストは引数 maxTries で縮めている |
MASK_LOG_TEST_CALL_LOG | テスト用の偽物の mask-log.ps1 が、呼ばれた回数を書くファイル | tests/helpers/fake-mask-log*.ps1(3 本) | なし | tests/mask-log-input-ps1.test.mjs。本物の道具は読まない |
CONTRAST_TARGET_DIR | 外の道具 (check-contrast)に、調べるフォルダを伝える | このプロジェクトでは読まない | — | tools/40_test/run-ui-tests.ps1:64 |
USERPROFILE | 会話ログの置き場を組み立て、表示するパスのユーザ名を ~ に伏せる | tools/80_ops/mask-log.ps1:45 ・ :91 | — | OS |
NODE_OPTIONS、一時フォルダを決める TEMP など)。このプロジェクトのコードが名指しで読むものではない。Rust 版の単体テストが一時フォルダを使うのは、この類{ ...process.env, … })。親が持つものをそのまま渡すだけで、特定の変数を読んではいない。足している変数のほうは、上の表に入れてあるやめた変数が戻ってこないよう、テストが見張っているものがある。
| 変数 | やめた時期 | 代わり | 見張っているテスト |
|---|---|---|---|
AICHAT_DB | 2026-08-31 | AICHAT_DATA(DB だけでなく、印も含めて置き場ごと分ける)。テスト環境の分離 | なし |
AICHAT_ID | 2026-09-01 | 名乗る ID は、コマンドの直後にコロンで囲んで渡す (:project-a:)。CLI のオプションを整える | tests/client-usage.test.mjs(使い方の表示に出ない) |
AICHAT_URL | 2026-09-04 | 接続先は -p(ポート)か -u(URL)で毎回渡す | tests/client-usage.test.mjs(使い方の表示に出ない)・ tests/client-no-defaults.test.mjs(定義そのものが無い) |
tests/client-no-defaults.test.mjs は、ほかに「AICHAT_PORT を置いても、クライアントの接続先にはならない」ことも確かめている。サーバの変数を、クライアントが読み始めないようにするため。
調べている間に気づいたこと。どれもまだ直していない。直すかどうかは、別に決める。
| # | 気づいた点 | 関係する所 |
|---|---|---|
| 1 | AICHAT_LOCK_POLL_MS ・ AICHAT_LOCK_MAX_TRIES は、誰も渡していない。コメントには「既定のままでは動作を確かめるのに 5 分かかるため、短くできる」とあるが、テストは関数の引数で縮めている。入れた日 (2026-08-30)から一度も渡されていない | src/server/backup.mjs:115-120 |
| 2 | 本番のポートを、環境変数で渡している。共通ルール「プロセスの識別性」は、本番とテストを見分けるための情報 (ポート等)をコマンドライン引数で渡すとしている。環境変数はプロセスの一覧に出ないため。テスト用サーバのポートと置き場も、環境変数で渡している。しかも本番で渡している 8787 は、既定と同じ値 | deploy/node-ai-chat-lite-winsw.xml:20src/server/config.mjs:66 |
| 3 | テナントごとにサーバを並べると (i261014-01 の計画)、2 が強く効く。同じサーバが、置き場とポートだけを変えて何本も並ぶ。どれがどのテナントかは、引数で見分けられるようにする | i261014-01 |
いつ見直すか: 環境変数を足す ・ 消す ・ 渡し方を変える作業をしたとき、その作業の中でこの資料を直す。それとは別に、気になったときに下の検索で表と突き合わせる。
名指しで読んでいる所。表の「読む所」と突き合わせる。
git grep -n -E "process\.env\.[A-Z_]+|process\.env\[|\$env:[A-Za-z_]+|env::var" -- src tools tests deploy bin
サービスの定義と、子プロセスへ足している所。表の「渡している所」と突き合わせる。
git grep -n -E "<env |AICHAT_[A-Z_]+:" -- deploy tools tests
cmd ・ bat は SJIS なので、git grep と Grep から漏れることがある。日本語を含まない変数名なら当たることが多いが、確実ではない。text find でも探す (2026-10-15 は、AICHAT を含む cmd ・ bat は 0 本だった。検索式が cmd を走査していることは、既知の語で確かめた)。
text find "AICHAT" --path . --recurse --include "*.cmd,*.bat,*.reg"