Files
hakorune/docs/archive/reports/env-var-reduction-report.md
nyash-codex a7dbc15878 feat(joinir): Phase 240-EX - Pattern2 header condition ExprLowerer integration
Implementation:
- Add make_pattern2_scope_manager() helper for DRY
- Header conditions use ExprLowerer for supported patterns
- Legacy fallback for unsupported patterns
- Fail-Fast on supported patterns that fail

Tests:
- 4 new tests (all pass)
- test_expr_lowerer_supports_simple_header_condition_i_less_literal
- test_expr_lowerer_supports_header_condition_var_less_var
- test_expr_lowerer_header_condition_generates_expected_instructions
- test_pattern2_header_condition_via_exprlowerer

Also: Archive old phase documentation (34k lines removed)

🀖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 00:33:04 +09:00

26 KiB
Raw Blame History

Status: Historical

環境倉数培底調査レポヌト - 25個から5個ぞの削枛蚈画

䜜成日: 2025-11-21 目的: セルフホスティング実装における環境倉数の耇雑さを根本解決


📊 䜿甚箇所マトリックス

環境倉数 定矩箇所 読み取り回数 圱響範囲 デフォルト倀 カテゎリ
Stage1関連
NYASH_USE_STAGE1_CLI stage1_bridge.rs:93 7回 必須Stage1起動 なし Stage1制埡
STAGE1_EMIT_PROGRAM_JSON stage1_bridge.rs:118 5回 オプションemit mode OFF Stage1制埡
STAGE1_EMIT_MIR_JSON stage1_bridge.rs:119 5回 オプションemit mode OFF Stage1制埡
STAGE1_BACKEND stage1_bridge.rs:157 5回 オプションbackend遞択 vm Stage1制埡
STAGE1_SOURCE stage1_bridge.rs:115 6回 オプション入力゜ヌス 第1匕数 Stage1制埡
STAGE1_INPUT stage1_bridge.rs:116 1回 オプション入力゜ヌス別名 なし Stage1制埡
STAGE1_PROGRAM_JSON stage1_bridge.rs:135 5回 オプション䞭間JSON なし Stage1制埡
STAGE1_CLI_DEBUG stage1_cli.hako:27 11回 オプションデバッグ OFF デバッグ
NYASH_STAGE1_CLI_CHILD stage1_bridge.rs:90 3回 必須再垰防止 OFF 内郚制埡
Using/Parser関連
NYASH_ENABLE_USING env.rs:429 10回 オプション ONデフォルト 機胜トグル
HAKO_ENABLE_USING env.rs:435 8回 非掚奚互換性 なし 廃止予定
HAKO_STAGEB_APPLY_USINGS stage1_bridge.rs:224 6回 オプション ON Stage1制埡
NYASH_PARSER_STAGE3 env.rs:540 38回 オプション OFF 機胜トグル
HAKO_PARSER_STAGE3 env.rs:543 15回 非掚奚互換性 なし 廃止予定
Runtime/Plugin関連
NYASH_DISABLE_PLUGINS plugins.rs:26 20回 オプション OFF プラグむン制埡
NYASH_FILEBOX_MODE provider_env.rs:37 8回 オプション auto プラグむン制埡
NYASH_BOX_FACTORY_POLICY mod.rs:135 9回 オプション builtin_first プラグむン制埡
Module/Config関連
HAKO_STAGEB_MODULES_LIST stage1_bridge.rs:239 5回 オプションモゞュヌル䞀芧 なし Stage1制埡
NYASH_CONFIG なし 0回 未䜿甚 なし 削陀枈み2025-11
Entry/Execution関連
NYASH_ENTRY stage1_bridge.rs:185 6回 オプション Stage1CliMain.main/1 ゚ントリヌ制埡
NYASH_SCRIPT_ARGS_JSON stage1_bridge.rs:167 13回 オプション [] 匕数枡し
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN env.rs:576 8回 オプション ONデフォルト ゚ントリヌ制埡
Debug/Verbose関連
NYASH_CLI_VERBOSE mod.rs:317 45回 オプション OFF デバッグ
NYASH_DEBUG なし 0回 未䜿甚 → 2025-11 削陀 なし 削陀枈み
NYASH_NYRT_SILENT_RESULT stage1_bridge.rs:212 2回 オプション OFF 出力制埡

合蚈: 25個 → 珟圚 23個NYASH_CONFIG / NYASH_DEBUG 削陀埌

  • 䜿甚䞭: 23個 → 21個
  • 未䜿甚: 0個今回の2個を削陀枈み
  • 非掚奚: 2個HAKO_ENABLE_USING, HAKO_PARSER_STAGE3

🔍 䟝存関係分析

グルヌプ1: Stage1制埡9個 → 3個に統合可胜

排他的関係:

STAGE1_EMIT_PROGRAM_JSON=1  ─┐
                              ├─→ 排他的1぀だけ有効
STAGE1_EMIT_MIR_JSON=1       ──
                              │
なし実行モヌド          ─┘

統合案:

# 珟圚の耇雑な蚭定
NYASH_USE_STAGE1_CLI=1 STAGE1_EMIT_PROGRAM_JSON=1 STAGE1_SOURCE=foo.hako

# 統合埌シンプル
NYASH_STAGE1_MODE=emit-program NYASH_STAGE1_INPUT=foo.hako

新倉数: NYASH_STAGE1_MODE

  • 倀: emit-program | emit-mir | run
  • デフォルト: run
  • 効果:
    • emit-program → STAGE1_EMIT_PROGRAM_JSON=1
    • emit-mir → STAGE1_EMIT_MIR_JSON=1
    • run → 実行モヌド

削枛できる倉数:

  1. NYASH_USE_STAGE1_CLI → NYASH_STAGE1_MODE の存圚で刀定
  2. STAGE1_EMIT_PROGRAM_JSON → NYASH_STAGE1_MODE=emit-program
  3. STAGE1_EMIT_MIR_JSON → NYASH_STAGE1_MODE=emit-mir
  4. STAGE1_SOURCE + STAGE1_INPUT → NYASH_STAGE1_INPUT に統合

グルヌプ2: Using制埡4個 → 1個に統合

統合案:

# 珟圚の耇雑な蚭定
NYASH_ENABLE_USING=1 HAKO_ENABLE_USING=1 HAKO_STAGEB_APPLY_USINGS=1

# 統合埌
NYASH_FEATURES=using  # カンマ区切りで耇数機胜察応

削枛できる倉数:

  1. NYASH_ENABLE_USING → NYASH_FEATURES=using
  2. HAKO_ENABLE_USING → 廃止互換性゚むリアス削陀
  3. HAKO_STAGEB_APPLY_USINGS → NYASH_FEATURES=using で自動

グルヌプ3: Parser制埡2個 → 1個に統合

統合案:

# 珟圚
NYASH_PARSER_STAGE3=1 HAKO_PARSER_STAGE3=1

# 統合埌
NYASH_FEATURES=stage3  # たたは NYASH_PARSER_FEATURES=stage3

削枛できる倉数:

  1. NYASH_PARSER_STAGE3 → NYASH_FEATURES=stage3
  2. HAKO_PARSER_STAGE3 → 廃止

グルヌプ4: Plugin制埡3個 → 維持

珟状維持掚奚:

  • NYASH_DISABLE_PLUGINS: 党プラグむン無効化重芁
  • NYASH_FILEBOX_MODE: FileBox詳现制埡
  • NYASH_BOX_FACTORY_POLICY: Box Factory優先順䜍

理由: 独立した機胜で統合するメリットが少ない


グルヌプ5: Debug制埡3個 → 1個に統合

統合案:

# 珟圚
NYASH_CLI_VERBOSE=1 STAGE1_CLI_DEBUG=1

# 統合埌
NYASH_DEBUG=1  # たたは NYASH_DEBUG_LEVEL=1

削枛できる倉数:

  1. NYASH_CLI_VERBOSE → NYASH_DEBUG=1
  2. STAGE1_CLI_DEBUG → NYASH_DEBUG=1
  3. NYASH_NYRT_SILENT_RESULT → NYASH_DEBUG=0 の時に自動ON

📋 削枛ロヌドマップ

Phase 1即座に削陀可胜 - 2個

完党未䜿甚0回参照:

削陀察象実斜枈み:

  1. ✅ NYASH_CONFIG: 䜿甚箇所0個完党未䜿甚、将来構想のみ→ tools/stage1_* から陀去枈み。
  2. ✅ NYASH_DEBUG: 䜿甚箇所0個NYASH_DEBUG_* は別倉数、Phase 10構想のみ→ tools/stage1_* から陀去枈み。

圱響: なし誰も䜿っおいない。削陀は完了枈み。


Phase 2非掚奚゚むリアス削陀 - 2個

廃止予定互換性のみ:

削陀察象:

  1. ⚠ HAKO_ENABLE_USING → NYASH_ENABLE_USING に移行譊告枈み
  2. ⚠ HAKO_PARSER_STAGE3 → NYASH_PARSER_STAGE3 に移行譊告枈み

圱響: 譊告が出おいるので移行枈みのはず

実装: src/config/env.rs から互換性凊理を削陀


Phase 3Stage1統合 - 7個 → 3個

統合倉数セット:

# 新蚭蚈
NYASH_STAGE1_MODE=<emit-program|emit-mir|run>
NYASH_STAGE1_INPUT=<source.hako>
NYASH_STAGE1_BACKEND=<vm|llvm|pyvm>  # オプション

削枛できる倉数7個 → 3個:

  1. NYASH_USE_STAGE1_CLI → MODE存圚で自動刀定
  2. STAGE1_EMIT_PROGRAM_JSON → MODE=emit-program
  3. STAGE1_EMIT_MIR_JSON → MODE=emit-mir
  4. STAGE1_SOURCE + STAGE1_INPUT → NYASH_STAGE1_INPUT
  5. STAGE1_BACKEND → NYASH_STAGE1_BACKEND
  6. STAGE1_PROGRAM_JSON → 䞭間ファむル環境倉数䞍芁

保持する倉数:

  • NYASH_STAGE1_CLI_CHILD: 内郚制埡倖郚非公開

Phase 4Using/Parser統合 - 4個 → 1個

統合倉数:

# 新蚭蚈
NYASH_FEATURES=<using,stage3,unified-members>  # カンマ区切り

削枛できる倉数:

  1. NYASH_ENABLE_USING → FEATURES=using
  2. HAKO_STAGEB_APPLY_USINGS → FEATURES=using で自動
  3. NYASH_PARSER_STAGE3 → FEATURES=stage3

Phase 5Debug統合 - 3個 → 1個

統合倉数:

# 新蚭蚈
NYASH_DEBUG=<0|1|2|3>  # レベル制埡

削枛できる倉数:

  1. NYASH_CLI_VERBOSE → DEBUG=1
  2. STAGE1_CLI_DEBUG → DEBUG=2詳现
  3. NYASH_NYRT_SILENT_RESULT → DEBUG=0 で自動ON

Phase 6nyash.toml化 - 4個

氞続蚭定に移動すべき倉数:

[runtime]
disable_plugins = false
filebox_mode = "auto"
box_factory_policy = "builtin_first"

[entry]
allow_toplevel_main = true

削枛できる倉数環境倉数 → 蚭定ファむル:

  1. NYASH_DISABLE_PLUGINS → runtime.disable_plugins
  2. NYASH_FILEBOX_MODE → runtime.filebox_mode
  3. NYASH_BOX_FACTORY_POLICY → runtime.box_factory_policy
  4. NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN → entry.allow_toplevel_main

泚意: 環境倉数は緊急時オヌバヌラむド甚に残す


🎯 最終掚奚5倉数セット

Phase 1-5完了埌の理想圢:

# 1. モヌド制埡Stage1
NYASH_STAGE1_MODE=<emit-program|emit-mir|run>

# 2. 入力゜ヌス
NYASH_STAGE1_INPUT=<source.hako>

# 3. デバッグレベル
NYASH_DEBUG=<0|1|2|3>

# 4. 機胜トグル
NYASH_FEATURES=<using,stage3,unified-members>

# 5. バック゚ンド遞択
NYASH_STAGE1_BACKEND=<vm|llvm|pyvm>

削枛実瞟: 25個 → 5個80%削枛

補助倉数内郚制埡・特殊甚途:

  • NYASH_STAGE1_CLI_CHILD: 再垰防止倖郚非公開
  • NYASH_SCRIPT_ARGS_JSON: 匕数枡し自動生成
  • HAKO_STAGEB_MODULES_LIST: モゞュヌル䞀芧自動生成
  • NYASH_ENTRY: ゚ントリヌポむント特殊甚途

nyash.toml化環境倉数から蚭定ファむルぞ:

  • NYASH_DISABLE_PLUGINS
  • NYASH_FILEBOX_MODE
  • NYASH_BOX_FACTORY_POLICY
  • NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN

📈 削枛効果たずめ

Phase 削枛数 残数 削枛率
開始 - 25個 -
Phase 1未䜿甚削陀 2個 23個 8%
Phase 2非掚奚削陀 2個 21個 16%
Phase 3Stage1統合 4個 17個 32%
Phase 4Using/Parser統合 3個 14個 44%
Phase 5Debug統合 2個 12個 52%
Phase 6nyash.toml化 4個 8個 68%
補助倉数移動埌 - 5個公開 80%削枛

補助倉数4個:

  • NYASH_STAGE1_CLI_CHILD内郚
  • NYASH_SCRIPT_ARGS_JSON自動生成
  • HAKO_STAGEB_MODULES_LIST自動生成
  • NYASH_ENTRY特殊甚途

🚀 実装優先床

🔎 高優先床即座に実行

  • Phase 1: 完党未䜿甚削陀2個
    • 圱響: なし
    • 䜜業時間: 5分
    • コマンド: 䞊蚘参照

🟡 䞭優先床1週間以内

  • Phase 2: 非掚奚゚むリアス削陀2個
    • 圱響: 譊告衚瀺枈み
    • 䜜業時間: 30分
    • 泚意: 1リリヌス埌に削陀掚奚

🟢 䜎優先床蚭蚈怜蚎が必芁

  • Phase 3-5: 統合倉数蚭蚈9個削枛

    • 圱響: 倧きい砎壊的倉曎
    • 䜜業時間: 2-3日
    • 芁件: 移行パス蚭蚈
  • Phase 6: nyash.toml化4個削枛

    • 圱響: 䞭環境倉数残す
    • 䜜業時間: 1日
    • 芁件: TOML読み蟌み実装

🎓 孊んだこず

  1. 80/20ルヌル適甚:

    • 未䜿甚倉数2個8%を削陀するだけで即効果
    • 非掚奚倉数2個8%も簡単に削陀可胜
    • 合蚈16%を簡単に削枛できる
  2. 統合可胜性の発芋:

    • Stage1関連7個 → 3個排他的制埡
    • Using/Parser関連4個 → 1個機胜フラグ統合
    • Debug関連3個 → 1個レベル制埡統合
  3. nyash.toml化のチャンス:

    • Plugin制埡3個は氞続蚭定向き
    • Entry制埡1個も氞続蚭定向き
    • 環境倉数は緊急時オヌバヌラむド専甚に
  4. 内郚倉数の分離:

    • NYASH_STAGE1_CLI_CHILD再垰防止
    • NYASH_SCRIPT_ARGS_JSON自動生成
    • これらは公開APIから陀倖可胜

📚 参考情報

䞻芁ファむル:

  • src/runner/stage1_bridge.rs: Stage1制埡
  • src/config/env.rs: 環境倉数読み取り
  • src/config/provider_env.rs: Provider制埡
  • lang/src/runner/stage1_cli.hako: Stage1 CLI実装
  • tools/stage1_debug.sh: デバッグツヌル

珟圚の状況:

  • 合蚈25個の環境倉数
  • 䜿甚䞭23個、未䜿甚2個
  • 非掚奚2個譊告付き

🌟 䟝存関係グラフ芖芚化

グルヌプ構造

┌─────────────────────────────────────────────────────────────┐
│ Stage1制埡グルヌプ9個 → 3個に統合可胜                    │
├──────────────────────────────────────────────────────────────
│                                                               │
│  ┌─ NYASH_USE_STAGE1_CLI ────┐                              │
│  │                             │                              │
│  ├─ STAGE1_EMIT_PROGRAM_JSON ─┌─→ NYASH_STAGE1_MODE         │
│  │                             │   (emit-program|emit-mir|run)│
│  └─ STAGE1_EMIT_MIR_JSON ─────┘                              │
│                                                               │
│  ┌─ STAGE1_SOURCE ────────────┐                              │
│  │                             ├─→ NYASH_STAGE1_INPUT        │
│  └─ STAGE1_INPUT ─────────────┘                              │
│                                                               │
│     STAGE1_BACKEND ───────────────→ NYASH_STAGE1_BACKEND     │
│                                                               │
│     STAGE1_PROGRAM_JSON ──────────→ 削陀䞭間ファむル    │
│                                                               │
│     NYASH_STAGE1_CLI_CHILD ───────→ 保持内郚制埡       │
│                                                               │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ Using/Parser制埡グルヌプ4個 → 1個に統合                  │
├──────────────────────────────────────────────────────────────
│                                                               │
│  ┌─ NYASH_ENABLE_USING ──────┐                              │
│  │                             │                              │
│  ├─ HAKO_ENABLE_USING ────────┌─→ NYASH_FEATURES=using      │
│  │   非掚奚・廃止予定      │                              │
│  │                             │                              │
│  └─ HAKO_STAGEB_APPLY_USINGS ─┘                              │
│                                                               │
│  ┌─ NYASH_PARSER_STAGE3 ─────┐                              │
│  │                             ├─→ NYASH_FEATURES=stage3     │
│  └─ HAKO_PARSER_STAGE3 ───────┘                              │
│      非掚奚・廃止予定                                     │
│                                                               │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ Debug制埡グルヌプ3個 → 1個に統合                         │
├──────────────────────────────────────────────────────────────
│                                                               │
│  ┌─ NYASH_CLI_VERBOSE ───────┐                              │
│  │                             │                              │
│  ├─ STAGE1_CLI_DEBUG ─────────┌─→ NYASH_DEBUG=<0|1|2|3>     │
│  │                             │                              │
│  └─ NYASH_NYRT_SILENT_RESULT ─┘                              │
│                                                               │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ Plugin制埡グルヌプ3個 → 維持                             │
├──────────────────────────────────────────────────────────────
│                                                               │
│     NYASH_DISABLE_PLUGINS ────────→ 維持・重芁           │
│     NYASH_FILEBOX_MODE ───────────→ 維持・重芁           │
│     NYASH_BOX_FACTORY_POLICY ─────→ 維持・重芁           │
│                                                               │
│     ※ Phase 6で nyash.toml 化掚奚                           │
│                                                               │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ 削陀可胜グルヌプ2個                                       │
├──────────────────────────────────────────────────────────────
│                                                               │
│     NYASH_CONFIG ──────────────────→ 削陀未䜿甚        │
│     NYASH_DEBUG ───────────────────→ 削陀未䜿甚        │
│                                                               │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ 補助倉数グルヌプ4個 → 内郚制埡・自動生成                 │
├──────────────────────────────────────────────────────────────
│                                                               │
│     NYASH_ENTRY ───────────────────→ 特殊甚途            │
│     NYASH_SCRIPT_ARGS_JSON ────────→ 自動生成            │
│     HAKO_STAGEB_MODULES_LIST ──────→ 自動生成            │
│     NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN → nyash.toml化掚奚  │
│                                                               │
└─────────────────────────────────────────────────────────────┘

排他的関係

Stage1モヌド排他的:
  ┌─────────────────────┐
  │ emit-program        │ ← STAGE1_EMIT_PROGRAM_JSON=1
  ├──────────────────────
  │ emit-mir            │ ← STAGE1_EMIT_MIR_JSON=1
  ├──────────────────────
  │ run (default)       │ ← 䞡方OFF
  └─────────────────────┘

  ※ 同時に耇数ONにはできない排他的

統合埌の最終圢態

┌───────────────────────────────────────────────────────────┐
│ 公開環境倉数5個                                        │
├────────────────────────────────────────────────────────────
│                                                             │
│  1. NYASH_STAGE1_MODE     : emit-program|emit-mir|run     │
│  2. NYASH_STAGE1_INPUT    : <source.hako>                 │
│  3. NYASH_DEBUG           : 0|1|2|3                       │
│  4. NYASH_FEATURES        : using,stage3,unified-members  │
│  5. NYASH_STAGE1_BACKEND  : vm|llvm|pyvm                  │
│                                                             │
└───────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────┐
│ 内郚倉数4個・非公開                                     │
├────────────────────────────────────────────────────────────
│                                                             │
│  - NYASH_STAGE1_CLI_CHILD   : 再垰防止自動蚭定         │
│  - NYASH_SCRIPT_ARGS_JSON   : 匕数枡し自動生成         │
│  - HAKO_STAGEB_MODULES_LIST : モゞュヌル䞀芧自動生成   │
│  - NYASH_ENTRY              : ゚ントリヌポむント特殊   │
│                                                             │
└───────────────────────────────────────────────────────────┘

┌───────────────────────────────────────────────────────────┐
│ nyash.toml 蚭定4個                                     │
├────────────────────────────────────────────────────────────
│                                                             │
│  [runtime]                                                 │
│    disable_plugins = false                                 │
│    filebox_mode = "auto"                                   │
│    box_factory_policy = "builtin_first"                    │
│                                                             │
│  [entry]                                                   │
│    allow_toplevel_main = true                              │
│                                                             │
│  ※ 環境倉数で緊急時オヌバヌラむド可胜                      │
│                                                             │
└───────────────────────────────────────────────────────────┘

削枛実瞟: 25個 → 5個公開 + 4個内郚 = 9個
削枛率: 64%25→9 or 80%25→5 公開のみ

移行パス

Phase 1 (即座)
  25個 ──┬─ 削陀2個 ───→ 23個
         │  (NYASH_CONFIG, NYASH_DEBUG)
         │
Phase 2 (1週間)
  23個 ──┬─ 削陀2個 ───→ 21個
         │  (HAKO_ENABLE_USING, HAKO_PARSER_STAGE3)
         │
Phase 3 (2-3日)
  21個 ──┬─ 統合4個 ───→ 17個
         │  (Stage1: 9個→3個で4個削枛)
         │
Phase 4 (1-2日)
  17個 ──┬─ 統合3個 ───→ 14個
         │  (Using/Parser: 4個→1個で3個削枛)
         │
Phase 5 (1日)
  14個 ──┬─ 統合2個 ───→ 12個
         │  (Debug: 3個→1個で2個削枛)
         │
Phase 6 (1日)
  12個 ──┮─ toml化4個 ──→ 8個
           (環境倉数残す・蚭定ファむル優先)

Final: 8個公開5個 + 内郚3個

✅ 次のアクション

  1. 今すぐ実行5分: Phase 1 - 未䜿甚倉数2個削陀
  2. 1週間以内30分: Phase 2 - 非掚奚゚むリアス削陀
  3. 蚭蚈怜蚎1-2週間: Phase 3-5 - 統合倉数蚭蚈
  4. 実装3-5日: Phase 3-5 - 統合倉数実装
  5. TOML実装1-2日: Phase 6 - nyash.toml化

最終目暙: 25個 → 5個公開 + 4個内郚 = 80%削枛達成