Environments
environment คืออะไร?
หัวข้อที่มีชื่อว่า “environment คืออะไร?”GrowthBook มาพร้อมกับ environment ในตัวสามแบบ: development, staging และ production environment คือ context ที่มีชื่อกำกับ ซึ่ง:
- เก็บ สถานะ flag ของตัวเอง (enabled/disabled, override rules)
- มี SDK Connection ของตัวเองพร้อม
clientKeyที่ไม่ซ้ำกัน
นั่นหมายความว่า flag หนึ่งสามารถเปิดอยู่ใน development และปิดอยู่ใน production ได้ในเวลาเดียวกัน — โดยไม่ต้อง deploy เพื่อย้าย flag ระหว่าง stage
ผู้ดูแลระบบยังเพิ่ม environment ที่กำหนดเองได้ด้วย (เช่น qa, canary) จาก Settings → Environments
toggle flag ต่อ environment
หัวข้อที่มีชื่อว่า “toggle flag ต่อ environment”ทุก Feature มี toggle ในระดับ environment:
- เปิด Feature ใน GrowthBook
- เลื่อนไปที่ส่วน Environments คุณจะเห็นแถวสำหรับแต่ละ environment
- คลิก toggle ข้าง ๆ production เพื่อเปิดใช้งาน flag ที่นั่น
- สถานะ flag ใน development และ staging ยังคงไม่เปลี่ยนแปลง
override rule (การบังคับค่า, การรัน experiment, การทำ percentage rollout) ก็แยกตาม environment เช่นกัน — rule ใน development ไม่ส่งผลกระทบต่อ production
SDK Connections — หนึ่ง clientKey ต่อหนึ่ง environment
หัวข้อที่มีชื่อว่า “SDK Connections — หนึ่ง clientKey ต่อหนึ่ง environment”ไปที่ Settings → SDK Connections เพื่อดู connection หนึ่งตัวต่อหนึ่ง environment แต่ละ connection มี clientKey ที่ไม่ซ้ำกัน ใช้ key ที่ถูกต้องในแต่ละ context ของการ deploy:
// Development appconst gb = new GrowthBook({ apiHost: 'https://cdn.growthbook.io', clientKey: 'sdk-dev-abc123',});
// Production appconst gb = new GrowthBook({ apiHost: 'https://cdn.growthbook.io', clientKey: 'sdk-prod-xyz789',});โดยทั่วไปคุณจะเก็บ clientKey ไว้ใน environment variable แล้ว inject ตอน build/runtime:
const gb = new GrowthBook({ apiHost: 'https://cdn.growthbook.io', clientKey: process.env.GROWTHBOOK_CLIENT_KEY,});// .env.development
// GROWTHBOOK_CLIENT_KEY=sdk-dev-abc123
// .env.production
// GROWTHBOOK_CLIENT_KEY=sdk-prod-xyz789
import { GrowthBook } from '@growthbook/growthbook';
const gb = new GrowthBook({
apiHost: 'https://cdn.growthbook.io',
clientKey: process.env.GROWTHBOOK_CLIENT_KEY,
});
await gb.init({ timeout: 2000 });
// Same flag key works across all environments.
// The value returned depends on which environment
// the clientKey belongs to.
const isOn = gb.isOn('my-flag');สร้าง SDK Connection เพิ่ม
หัวข้อที่มีชื่อว่า “สร้าง SDK Connection เพิ่ม”- ไปที่ Settings → SDK Connections
- คลิก Add SDK Connection
- ตั้งชื่อ (เช่น
Production Node), เลือก environment เป็น production และเลือกภาษาของ SDK - คัดลอก
clientKeyที่ถูกสร้างขึ้นมา แล้วเก็บไว้อย่างปลอดภัยเป็น environment variable ใน production deployment ของคุณ
ข้อแลกเปลี่ยน
หัวข้อที่มีชื่อว่า “ข้อแลกเปลี่ยน”| ตัวเลือก | Benefit | Cost |
|---|---|---|
| แยก environment ชัดเจน (dev/staging/prod) | ปลอดภัยกว่า ทดสอบก่อนปล่อยจริงได้ | จัดการหลาย SDK key/permission ซับซ้อนกว่า |
| ใช้ environment เดียว | ตั้งค่าเร็วกว่า | เสี่ยง flag รั่วเข้า production โดยไม่ตั้งใจ |
ข้อผิดพลาดที่พบบ่อย
หัวข้อที่มีชื่อว่า “ข้อผิดพลาดที่พบบ่อย”- ทดสอบ flag ใน production environment ตรงๆ โดยไม่ผ่าน staging ก่อน
- ลืม sync ค่า flag ระหว่าง environment ทำให้ staging กับ production ไม่ตรงกัน
- ให้สิทธิ์แก้ไข production environment กับทุกคนในทีมโดยไม่จำกัด
💡 ตัวอย่างจากของจริง
ทีม engineering ขนาดใหญ่อย่าง Booking.com แยก permission ต่อ environment อย่างเข้มงวด — เฉพาะ senior engineer เท่านั้นที่แก้ production ได้