Последнее время из каждого утюга кричат по технологии будущего - что Chat GPT может писать код вместо программистов, а MidJourney создавать интерфейсы вместо дизайнеров. Мы полезли в Community фигмы, а там по запросу Figma to Code больше сотни плагинов, которые обещают сгенерировать чистый работающий код на основе ваших макетов и за пару кликов создать готовое web-приложение вместо ваших frontend-разработчиков. Все это звучит вдохновляюще, но так ли это на самом деле?

Аналитических материалов, сравнивающих наиболее удачные плагины или библиотеки, нам найти не удалось. Поэтому мы решили разобраться в этом вопросе самостоятельно и хотим поделиться результатами.

Возможно ли экспортировать макеты из Figma в готовое React приложение?

Сгенерировано в lexica.art
Сгенерировано в lexica.art

Чтобы разобраться на что реально способны инструменты для генерации кода из макетов, надо потратить кучу времени, сил и не сойти с ума. Поэтому давайте для начала разберемся, а что нам это даст, если отбросить хайп и всеобщее воодушевление:

  1. Мы подумали, что если получится, можно прийти и сказать - теперь, друзья, мы будем отдавать в разработку не просто фигму, а готовые страницы интерфейса. Осталось подключить АПИ и можем отмечать сдачу проекта. Это конечно фантазии, но приятные.

  2. Когда мы рисуем макеты мобилки, всегда смотрим их прямо на телефоне через Figma Mirror, потому что в реальной среде сразу понятно где у тебя проблемы. А вот десктопные версии можно полноценно оценить только после верстки, тогда уже бывает немного поздно вносить серьезные изменения.

  3. Может другим так не везет, но нам иногда попадаются заказчики, которые говорят, что в фигме этот шрифт выглядит иначе, а вот этот ваш красный в браузере какой-то не красный. И они отчасти правы - реальные носители отображают иначе.

  4. Иногда нужно быстренько собрать какой-то лендинг. Для этого раньше мы пользовались тильдой и к слову сказать, верстка в зеро-блоках и хитрые эффекты требуют там хорошей сноровки. Кроме того, основной наш инструмент все таки фигма - и если для сборки сайта оттуда никуда уходить не надо, то что может быть лучше.

С мотивацией разобрались. Теперь давайте сформулируем, каким требованиям должен соответствовать экспортируемый код, чтобы действительно помогать и упрощать этап разработки фронтенда.

Итак, внимание - Задача

Сформировать прямо из Figma код на React:

  • c использованием design tokens;

  • с использованием компонентов и nested структуры;

  • с учетом разных состояний и свойств компонентов (variants);

  • с учетом адаптивности;

  • в инструменте, который осилят обычные дизайнеры (без навыков программирования);

  • за адекватные деньги.


Спойлер: для тех, кому не хочется вникать в детали — выводы можно сразу почитать в конце статьи.

Сгенерировано в lexica.art
Сгенерировано в lexica.art

Исследование

Мы сравнивали наиболее популярные инструменты для генерации кода из Figma. 

Все эти инструменты можно условно поделить на два типа:

  1. Plugin only - запускается в Figma и прямо в окошке генерит код, который вы можете копировать или загрузить себе.

  2. Plugin + Web app. Плагин экспортирует макеты в веб-приложение, где вы видите свои ожившие дизайны и сгенерированный код. Возможности веб-приложений и принципы работы разные, об этом поговорим ниже.

Что мы проверяли:

  • Экспортирует код в React.

  • Экспортирует design tokens (достаточно типографики и палитры).

  • Создает компоненты, которые есть в макетах и/или дает возможность создавать/редактировать их вручную в приложении после экспорта.

  • Поддерживает variants (множественные состояния) для компонентов. 

  • Дает возможность настроить props и bindings, в том числе не только для слоев, а еще и для состояний.

  • Поддерживает переходы между страницами, ссылки, модальные окна.

  • Можно синхронизировать обновления из Figma.

Инструменты первого типа plugin only в основном генерят html+css, но есть и те, что умеют в React, Vue, Flutter, Swift и тд. Но конечно, речи в таких случаях не идет о компонентах, состояниях и всей прочей магии. Тем не менее мы попробовали сгенерить и проверить код в песочницах. Для простых формочек получается вполне похожая картинка. Нашу задачу это не решает, но кому-то может быть полезно.

С инструментами типа “Plugin + Web app” поинтереснее, тут мы встречаем большую вариативность по реализации:

  1. Какая часть работы может выполняться в самом плагине на стороне Figma и какая часть в веб-приложении. Здесь можно встретить варианты с одной “зеленой кнопкой” Export и варианты, где адаптив, переходы, структура контейнеров, интерактивные компоненты, анимация, загрузка, превью и даже публикация на сайт выполняется в Figma.

  2. Анализ экспортируемых макетов. Очевидно, что макеты должны удовлетворять некоторым условиям для того чтобы быть максимально эффективно интерпретированы в код. Интерпретатор как-то должен понять или додумать, где собрать flexbox, где stack, где grid, а где надо сделать абсолютное позиционирование или закрепить элемент. Некоторые пишут рекомендации в гайдах, некоторые не пустят тебя редактировать макет пока ты не разметишь все слои в понятные браузеру структуры. Кто-то правит(=ломает) твои макеты, кто-то обводит в твоих макетах непонятные слои красный рамочкой и пишет рекомендации - вот тут у тебя не хватает Autolayout, а здесь надо преобразовать группу во фрейм, а тут растрировать картинку (хотя это уже лишнее :)) Встречаются даже такие, которые применяют AI и сами, например, создают компоненты даже там, где дизайнер их не предусмотрел - круто конечно, но этот тот случай когда лучше не стоило так заморачиваться.

  3. Гибкость и разнообразие настроек в веб-приложении тоже сильно разнится. Есть очень минималистичные, где ты вообще ничего не можешь уже поменять, даже если очень надо. А есть такие, где количество настроек просто зашкаливает и надо сильно постараться чтобы разобраться. Такие мы помечали как не User friendly, рассчитывая на то, что все таки ищем инструмент для дизайнера, а не для разработчика и хотелось бы чтобы ему не пришлось осваивать новую профессию.

  4. Очень хромает везде работа с компонентами, они почти везде есть, но в очень упрощенном виде. Чего уж говорить про вариативность компонентов и попытки настроить props чтобы потом передавать в эти компоненты не только отображаемый контент, а еще и контекст типа статуса, типа - всего что мы бережно называем variants в фигме.

Результаты исследования мы собрали в сравнительную таблицу:

это исключительно мой опыт и мнение, где-то могла и ошибаться
это исключительно мой опыт и мнение, где-то могла и ошибаться

Останавливаться на конкретных инструментах здесь не будем, чтобы никого не обидеть и не рекламировать. Кроме того, информации очень много для статьи. Если Вам хочется обсудить конкретику - пишите в комментариях, мы с удовольствием поделимся своим мнением.

А теперь перейдем к выводам.

Выводы

  1. Выгрузка макетов страниц из Figma целиком, с адаптивом, переходами между страницами и чтобы не нужно было тратить массу времени на настройку и выравнивание страниц возможна. Для этого не обязательно обладать знаниями frontend-разработки и ваши макеты за короткое время превратятся в живой сайт. НО! Это подойдет для интерактивных прототипов, тестирования интерфейса и несложных сайтов. С такими задачами легко и максимально просто справляться с помощью Anima, Framer, Builder.io. Неплохо получается у Teleport.HQ и PXCode - но с ними придется повозиться побольше и дизайнеру там понадобится разобраться в предметной области верстальщика.

  1. Для разработки UI более сложных приложений и сервисов выгрузка страниц целиком лишена смысла, потому что генерируемый код, как говорят разработчики, проще выбросить и написать заново. Если посадить разработчиков в веб-приложение такого инструмента сразу после экспорта, где он сможет более менее настроить верстку и элементы, то будет чуть лучше. Но тогда получается мы имеем третий инструмент, в котором еще нужно научиться работать и не все гладко. Увы, пока это так, но мы верим, что в будущем ситуация поменяется.

  1. В процессе изучения инструментов для экспорта из Figma в код мы пришли к тому, что наиболее перспективным для нас направлением является выгрузка отдельных компонентов из Figma в React Components. Затем донастройка props и bindings. Мы пока взяли в работу Quest - нам показался он наиболее продвинутым, гибким и там есть хорошая документация. Сейчас наша цель разобраться и научить дизайнеров работе с инструментом, чтобы мы могли выдавать в разработку набор реальных React-компонентов. Затем хотим организовать процесс автоматического обновления кода по изменениям в макетах: когда дизайнер меняет макеты, нажимает кнопку “сгенерить код” и у разработчиков появляется новая верстка, которая без доработок заливается в код приложения. Иными словами хотим разгрузить программистов в тех случаях, когда изменения касаются только дизайнов. 

Если у нас все получится или мы разочаруемся и решим пилить свой инструмент, расскажем в следующих сериях.

PS ????????????

Друзья, открытый вопрос! А вы пользуетесь подобными инструментами, как и для чего?

Комментарии (2)