Гайды

Что такое фиче-флаг — и почему код в проде ещё не значит «включено»

Иллюстрация: большой тумблер зажигает одну секцию в работающем приложении

Выложить код в прод и показать фичу пользователям — два разных события. Новичок думает, что это одно: залил — значит включилось. На деле между ними может быть неделя.

Секрет — маленький выключатель в коде, фиче-флаг. Код уже в проде, лежит и ждёт. А увидят его пользователи или нет — решает не новый релиз, а щелчок этого выключателя.

Что такое фиче-флаг

Фиче-флаг (feature flag, ещё «фича-тумблер») — это условие в коде: «показывать новую штуку или нет». По сути одна проверка if.

if (флаг «новая-лента» включён) {
  показать новую ленту
} else {
  показать старую
}

Значение флага живёт не в коде, а снаружи — в конфиге, базе или спец-сервисе. Поэтому его можно переключить, не трогая код и не выкатывая новую версию.

Зачем разделять «выкатить» и «показать»

Пока это одно событие, каждый релиз — прыжок с завязанными глазами. Залил код — и он сразу у всех. Баг вылез — откатывай весь релиз.

Флаг разрывает связку. Ты спокойно выкатываешь код в прод выключенным. Он там, задеплоен, прошёл проверки — но пользователи видят старое. Включаешь, когда сам готов: не в два часа ночи после мержа, а утром на трезвую голову.

Как это работает: одна проверка

Механика примитивна, и в этом сила.

  1. Оборачиваешь новую фичу в if (флаг включён).
  2. Значение флага держишь снаружи кода — в файле-конфиге или в базе.
  3. Меняешь значение — приложение читает его и ведёт себя иначе. Кода не касался.

Это не отдельная технология. Флаг можно сделать из обычной переменной окружения на старте, а позже — из строки в базе, которую меняешь на лету.

Что это даёт на практике

Три приёма, ради которых флаги и придумали.

  • Постепенный раскат (canary). Включаешь фичу сначала себе, потом 5% пользователей, потом всем. Что-то не так — откатил на выключателе, а не на релизе.
  • Аварийный рубильник (kill switch). Фича начала ломать прод — гасишь её одним щелчком, за секунды, без пересборки и деплоя.
  • A/B-проверка. Половине показал вариант A, половине B — смотришь, что заходит. Один код, два поведения.

Бонус для одиночки: можно вливать в главную ветку недоделанную фичу — выключенной. Она не мешает, потому что скрыта за флагом. Это спасает от долгоживущих веток, которые потом больно сливать.

Одна ловушка: флаги накапливаются

У флагов есть тёмная сторона. Каждый — это развилка if/else, две дороги в коде. Три флага — восемь возможных состояний. Забыл убрать десяток старых — и уже не понимаешь, в какой ветке живёшь.

Правило простое: флаг временный. Фича раскатана на всех и прижилась — удали флаг и мёртвую ветку. Флаг — строительные леса, а не часть здания.

Фиче-флаг и переменная окружения — это одно и то же?

Не совсем. Переменная окружения — это способ хранить значение снаружи кода. Фиче-флаг — это идея включать и выключать фичу без релиза. Простой флаг часто делают именно из переменной окружения, но флаг может жить и в базе, и меняться на лету — а переменную обычно задают один раз при старте.

Нужен ли фиче-флаг, если я один?

Один хороший флаг — да, стоит. Даже соло полезно уметь выкатить MVP с выключенной сырой частью и включить её, когда дошли руки. Только не строй систему из двадцати флагов на пет-проекте — это сложность на ровном месте. Один-два выключателя на реально рискованные куски.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →