ข้ามไปยังเนื้อหา

สร้าง Flag

Feature ใน GrowthBook แมปตรงกับ feature flag ในโค้ดของคุณ ต่อไปนี้คือวิธีสร้างขึ้นมาตั้งแต่ต้น

  1. ล็อกอินเข้า GrowthBook ที่ http://localhost:3000 (หรือ Cloud URL ของคุณ)
  2. ในแถบด้านซ้าย คลิก Features
  3. คลิกปุ่ม Add Feature ที่มุมขวาบน
  1. Feature Key — ใส่ identifier ที่เป็นตัวพิมพ์เล็กและคั่นด้วยขีดกลาง เช่น my-flag นี่คือสตริงที่โค้ดของคุณจะใช้ตลอดไป — เลือกอย่างรอบคอบ
  2. Value Type — เลือก Boolean สำหรับ flag เปิด/ปิดแบบง่าย ๆ
  3. Default Value — ตั้งเป็น false (ปิดเป็นค่าเริ่มต้นในทุกที่)
  4. คลิก Create Feature

โดยค่าเริ่มต้น flag ของคุณมีอยู่แต่ถูกปิดใช้งานในทุก environment

  1. ในหน้ารายละเอียดของ Feature ให้หาส่วน Environments คุณจะเห็นแถวสำหรับ development, staging และ production
  2. คลิก toggle ข้าง ๆ development เพื่อสลับจาก Disabled เป็น Enabled
  3. เนื่องจากยังไม่มี override rule ใด ๆ ผู้ใช้ทุกคนจะได้รับ default value เป็น true ใน development

เคล็ดลับ: คุณสามารถตั้ง default value เฉพาะแต่ละ environment ให้ต่างจาก default ส่วนกลางได้ ทำให้คุณปล่อย true ใน development ได้ โดยยังคงเป็น false ใน production จนกว่าคุณจะพร้อม

เมื่อ feature มีอยู่ใน GrowthBook แล้ว ให้ใช้ SDK ประเมินค่า:

import { GrowthBook } from '@growthbook/growthbook';
const gb = new GrowthBook({
apiHost: 'https://cdn.growthbook.io',
clientKey: 'sdk-YOUR_DEV_KEY',
});
await gb.init({ timeout: 2000 });
if (gb.isOn('my-flag')) {
console.log('Flag is ON');
} else {
console.log('Flag is OFF');
}

สำหรับ boolean flag คุณก็ใช้ getFeatureValue ได้เช่นกัน ซึ่งต้องระบุ fallback อย่างชัดเจน:

const flagValue = gb.getFeatureValue('my-flag', false);
// returns true or false, never throws
import { GrowthBook } from '@growthbook/growthbook';

const gb = new GrowthBook({
  apiHost: 'https://cdn.growthbook.io',
  clientKey: 'sdk-YOUR_DEV_KEY',
});

await gb.init({ timeout: 2000 });

// boolean shorthand
if (gb.isOn('my-flag')) {
  console.log('Flag is ON');
}

// explicit value with fallback
const flagValue = gb.getFeatureValue('my-flag', false);
ตัวเลือกBenefitCost
Boolean flagเรียบง่าย เข้าใจง่ายที่สุดใช้ได้แค่ on/off ไม่ flexible
Multi-variate / JSON flagflexible กว่ามาก ปรับ config ได้ละเอียดซับซ้อนกว่าในการ maintain และ validate
  • สร้าง flag โดยไม่ตั้งชื่อที่สื่อความหมาย (เช่น flag1)
  • ไม่ตั้ง description ทำให้ทีมอื่นไม่เข้าใจว่า flag ทำอะไร
  • สร้าง flag ซ้ำสำหรับ feature เดียวกันในหลาย environment

💡 ตัวอย่างจากของจริง

Spotify ใช้ feature flag ตั้งชื่อตาม convention ที่ชัดเจน (team-feature-purpose) เพื่อให้ค้นหาและ audit ได้ง่ายเมื่อมี flag หลักพันตัว

ในส่วนไหนของ GrowthBook UI ที่คุณใช้สร้าง Feature ใหม่?
Default Value บน Feature มีไว้เพื่ออะไร?
เมธอด SDK ตัวไหนที่ต้องระบุ argument สำหรับ fallback อย่างชัดเจน?
จะเกิดอะไรขึ้นถ้าคุณเปลี่ยนชื่อ Feature key ใน GrowthBook หลังจาก deploy ไปแล้ว?