環境変数の使い方

どの環境変数を、どこで (クライアント・サーバ・道具)、どの場面で (本番・試験)使っているか。使っていないことが一目でわかる形で持ち続ける

📅 作成: 2026-10-15 / 更新: 2026-10-15

このプロジェクトのコード (src/ ・ tools/ ・ tests/ ・ deploy/ ・ bin/)が読む環境変数と、それを渡している所をまとめる。環境変数はプロセスの一覧に出ず、渡し損ねても既定値で静かに動く。どこで効いていて、どこで効いていないかを、ここで 1 か所に持つ。

変数を足す・消す・渡し方を変えたら、同じ作業の中でこの資料を直す。見直しの手順は 5 章。

目次

  1. ひと目でわかる一覧
  2. 変数ごとの中身
  3. やめた変数
  4. 気づいた点
  5. 見直し方

ひと目でわかる一覧

読む側ごと

その場面で値が渡されて効いている変数だけを書く。読むコードはあっても誰も渡していないものは、ここには入れない (次の表の ○)。

読む側本番試験
クライアント (node 版 src/client/)なしなし
クライアント (Rust 版 src/cli-rs/)なしなし
ブラウザ画面 (src/web/)なしなし
サーバ (src/server/)AICHAT_PORT(中身は既定と同じ 8787)
AICHAT_MANAGED
AICHAT_DATA ・ AICHAT_PORT
AICHAT_NO_EXIT ・ AICHAT_LEAVE_GRACE_MS
運用の道具 (tools/80_ops/)USERPROFILE(OS が渡す)AICHAT_DATA ・ AICHAT_PORT
MASK_LOG_TEST_CALL_LOG(テストの偽物が読む)
試験の道具 (tools/40_test/)(本番では使わない)AICHAT_DATA ・ AICHAT_NO_EXIT
CONTRAST_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_MANAGEDWinSW から起動されたか。終了の要求を受けたとき、起動し直してもらえる前提で終わってよいかの判断に使うsrc/server/server.mjs:660なし本番は deploy/node-ai-chat-lite-winsw.xml:23 が winsw を渡す。テストは渡さない (直に起動するため。tests/server.test.mjs:625)
AICHAT_NO_EXIT1 なら、終了の要求が来ても落ちない (テストのプロセスごと落ちないようにする)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:5915000tests/server.test.mjs:16(150 に縮める)だけ
AICHAT_LOCK_POLL_MSバックアップの印を見に行く間隔 (ミリ秒)src/server/backup.mjs:11930000誰も渡していない。テスト (backup.test.mjs ・ maintenance.test.mjs)は、関数の引数 pollMs で縮めている
AICHAT_LOCK_MAX_TRIESバックアップの印を待って諦めるまでの回数src/server/backup.mjs:12010誰も渡していない。テストは引数 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

この資料に入れないもの

やめた変数

やめた変数が戻ってこないよう、テストが見張っているものがある。

変数やめた時期代わり見張っているテスト
AICHAT_DB2026-08-31AICHAT_DATA(DB だけでなく、印も含めて置き場ごと分ける)。テスト環境の分離なし
AICHAT_ID2026-09-01名乗る ID は、コマンドの直後にコロンで囲んで渡す (:project-a:)。CLI のオプションを整えるtests/client-usage.test.mjs(使い方の表示に出ない)
AICHAT_URL2026-09-04接続先は -p(ポート)か -u(URL)で毎回渡すtests/client-usage.test.mjs(使い方の表示に出ない)・ tests/client-no-defaults.test.mjs(定義そのものが無い)

tests/client-no-defaults.test.mjs は、ほかに「AICHAT_PORT を置いても、クライアントの接続先にはならない」ことも確かめている。サーバの変数を、クライアントが読み始めないようにするため。

気づいた点

調べている間に気づいたこと。どれもまだ直していない。直すかどうかは、別に決める。

#気づいた点関係する所
1AICHAT_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:20
src/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"

表の直し方