# Railway 推出 Feature Flags 讓 Agent 動態發布

> 📖 本站完整內容索引（documentation index）：[llms.txt](/llms.txt)

> 原作者：Railway (@Railway) · 策展與摘要：EasyVibeCoding · 平台：X (Twitter) · 熱度：🔥 · 日期：2026-07-19

> 原始來源：https://x.com/Railway/status/2077823644298813589

## 中文摘要

Railway 推出 Feature Flags 讓 Agent 動態發布。

**核心功能與 Agent 整合**
Railway 的 Feature Flags 允許開發者在不重新部署（deploy）的情況下，透過程式碼中的旗標（flag）動態控制功能開關。此功能已深度整合至 Dashboard、CLI、SDK 與 MCP，讓 Agent 能直接執行發布流程。使用者可透過 `railway setup agent --remote` 指令配置環境，讓 Agent 具備操作 Feature Flags 的 skill，例如執行「將新結帳流程設為預設關閉，並對 25% 的 Pro 使用者開放」等指令。Agent 會自動處理 SDK 讀取、建立旗標、設定規則並發起 Pull Request。

**發布流程與操作指南**
Feature Flags 支援 `bool`、`string`、`number` 與 `json` 等型別，並透過規則（targeting rules）進行動態調整。以下為標準的發布操作步驟：

1.  **初始化旗標**：使用 `railway flag set` 指令建立旗標並設定預設值。
    ```bash
    railway flag set checkout-v2 false
    ```
2.  **程式碼整合**：在應用程式初始化 SDK 並讀取旗標。
    ```typescript
    import { flags } from "railway";
    await flags.init();

    if (flags.getBoolean("checkout-v2")) {
      // 新版結帳邏輯
    }
    ```
3.  **設定目標規則**：傳遞使用者上下文（context）以進行精確控制。
    ```typescript
    const useNewCheckout = flags.getBoolean(
      "checkout-v2",
      { key: user.id, email: user.email, plan: user.plan },
      false,
    );
    ```
4.  **執行分階段發布**：利用 `bucket()` 函數進行比例分配，確保使用者體驗的一致性。
    ```bash
    railway flag set checkout-v2 true --rule-id rollout-25 --when 'bucket(key) < 0.25'
    ```

**效能與除錯機制**
Railway 的設計強調效能與可追溯性：
- **效能優化**：`flags.init()` 會在啟動時載入規則集，後續讀取皆在記憶體中進行，不需額外發送網路請求，適合高頻率呼叫。
- **透明化除錯**：若需了解旗標判定邏輯，可使用 `flags.evaluateBoolean()`，系統會返回詳細的 `trace`，說明每個規則是否匹配及其判定原因。
- **安全性設計**：規則衝突、無匹配或缺少判定所需 context 時，系統一律回傳旗標的預設值（default）；只有在應用程式完全無法讀取旗標（如連不上 Railway）時，才會採用開發者寫在程式碼中的 fallback 值。兩者分工明確，最壞情況也只是使用者看到原本的生產行為。

**規則衝突處理**
不同於傳統系統依賴優先級（priority）來解決衝突，Railway 採取「所有匹配規則同時評估」的策略。若規則間發生衝突或無規則匹配，系統一律採用預設值。這種設計消除了規則排序帶來的複雜性，確保生產環境的行為具有高度的可預測性與穩健性。

## 標籤

Agent, 功能更新, Deployment, CLI, SDK, MCP, Railway
