Перейти к содержанию
Innovialabs

Что такое feature flags и как они делают релизы безопаснее

Основы3 мин

Коротко

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

Коротко: что такое feature flag

Feature flag (флаг функции, feature toggle) — условие в коде, которое решает, показывать ли пользователю новую функцию. Значение флага хранится вне кода: в конфиге, базе или специальном сервисе — и меняется без пересборки и деплоя.

if (flags.isEnabled("new-checkout", user)) {
  return renderNewCheckout();
}
return renderOldCheckout();

Главная идея — разделить деплой и релиз. Деплой — это доставка кода на сервер. Релиз — момент, когда функция становится доступна пользователям. С флагами это два независимых решения.

Почему это делает релизы безопаснее

  • Мгновенный откат. Функция ломается — выключаете флаг, а не откатываете весь деплой.
  • Постепенный запуск. Сначала команда, потом небольшая доля пользователей, затем все.
  • Меньше долгоживущих веток. Незаконченный код можно сливать в main, спрятав за выключенным флагом (trunk-based development).
  • Релиз по бизнес-сигналу. Маркетинг открывает функцию в нужный день, без участия разработчиков.

Типы флагов

ТипЗачемСрок жизни
ReleaseСпрятать незаконченную или новую функцию до запускаКороткий: удалить после полного релиза
ExperimentA/B-тест: разным группам — разные вариантыДо конца эксперимента
Ops / kill switchАварийно отключить тяжёлую или рискованную часть системыДолгий, часто постоянный
PermissionОткрыть функцию определённым тарифам или клиентамДолгий

Разделение важно: release-флаг, забытый на год, — это долг, а kill switch, живущий годами, — норма.

Какие инструменты бывают

  • Конфиг или переменные окружения. Самый простой вариант для пары флагов, но смена значения часто требует перезапуска.
  • Своя таблица в базе + админка. Гибко, но таргетинг, аудит и проценты раскатки придётся писать самим.
  • Open-source решения — например, Unleash, Flagsmith, GrowthBook. Можно развернуть у себя.
  • SaaS-сервисы — например, LaunchDarkly. Готовые SDK, таргетинг, аудит, но это внешняя зависимость и подписка.
  • Стандарт OpenFeature — единый API для работы с флагами, который позволяет сменить провайдера без переписывания кода.

Выбор зависит от числа флагов, нужен ли таргетинг по пользователям и готовы ли вы поддерживать решение сами.

Как не накопить флаговый долг

Каждый флаг — это ветка if в коде и лишний сценарий для тестов. Без дисциплины их становится сотни.

  • Владелец и срок. У каждого флага есть ответственный и ожидаемая дата удаления.
  • Понятные имена. checkout-v2-release, а не flag1 или test_new.
  • Удаление — часть задачи. После полного релиза заводите задачу на удаление флага и старой ветки кода.
  • Регулярный аудит. Раз в спринт или месяц проверяйте флаги, которые давно на 100% или 0%.
  • Безопасное значение по умолчанию. Если сервис флагов недоступен, код должен работать в предсказуемом режиме.

Частые ошибки

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

Частые вопросы

Ветка изолирует код до слияния, флаг — уже после. С флагами код живёт в main и деплоится, но функция остаётся выключенной, пока вы не решите её открыть.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.