Что такое Phoenix generators и как они ускоряют разработку?
Phoenix generators — mix-задачи (phx.gen.schema, phx.gen.context, phx.gen.html, phx.gen.json, phx.gen.live, phx.gen.auth), которые генерируют Ecto-схемы, миграции, контроллеры, шаблоны и тесты одной командой, устраняя ручной boilerplate.
Phoenix generators: что это и зачем нужны
Phoenix generators — это mix-задачи, которые генерируют шаблонный код по одной команде. Они создают модели, миграции, контроллеры, шаблоны, тесты и роуты, избавляя от ручного написания boilerplate. Код генерируется один раз и сразу становится вашим — его можно редактировать без ограничений.
Основные генераторы
mix phx.gen.schema
Создаёт только Ecto-схему и миграцию без HTTP-слоя.
mix phx.gen.schema Blog.Post posts title:string body:text published:boolean views:integer
Генерирует: lib/my_app/blog/post.ex и priv/repo/migrations/TIMESTAMP_create_posts.exs.
mix phx.gen.context
Создаёт схему, миграцию и контекст-модуль с CRUD-функциями.
mix phx.gen.context Blog Post posts title:string body:text user_id:references:users
Генерирует модуль MyApp.Blog с функциями list_posts/0, get_post!/1, create_post/1, update_post/2, delete_post/1, change_post/1.
mix phx.gen.html
Генерирует полный стек: контекст + HTML-контроллер + HEEx-шаблоны + тесты.
mix phx.gen.html Blog Post posts title:string body:text
Создаёт: контроллер, шаблоны index/show/new/edit/form, тесты, и подсказывает добавить роут в router.ex:
resources "/posts", PostController.
mix phx.gen.json
То же самое, но для JSON API без шаблонов — создаёт view-модули и fallback контроллер.
mix phx.gen.json Accounts User users name:string email:string:unique
mix phx.gen.live
Генерирует LiveView-стек: контекст + LiveView-модули + компоненты.
mix phx.gen.live Blog Post posts title:string body:text
Создаёт PostLive.Index, PostLive.Show, PostLive.FormComponent и соответствующие HEEx-шаблоны.
mix phx.gen.auth
Генерирует полную систему аутентификации: регистрация, вход, сброс пароля, сессии, токены.
mix phx.gen.auth Accounts User users
Создаёт ~25 файлов: контроллеры, LiveView-формы, Ecto-схему с хешированием пароля через bcrypt, миграции, тесты. Это наиболее ценный генератор — заменяет недели работы.
mix phx.gen.channel
mix phx.gen.channel Room
Генерирует WebSocket-канал RoomChannel с заглушками для join/3, handle_in/3 и тест.
Типы полей в генераторах
string,text,integer,float,boolean,map,arrayreferences:table_name— внешний ключ- Модификаторы:
:unique,:null,:size:255
mix phx.gen.schema Order orders \
user_id:references:users \
total:decimal \
status:string \
meta:map
Подводные камни
- Генераторы создают отправную точку, а не production-ready код — валидации, индексы и бизнес-логику нужно добавлять вручную.
phx.gen.authдобавляет bcrypt — не забудьте добавитьbcrypt_elixirв зависимости до запуска генератора.- Роуты не добавляются автоматически — генератор только показывает, что добавить в
router.ex. - При повторном запуске генератор перезаписывает файлы без предупреждения (с флагом
--force). mix phx.gen.htmlсоздаёт тесты с реальными HTTP-запросами к БД — нужна тестовая БД.- Схема и контекст создаются отдельно, но gen.html создаёт оба — это может дублировать файлы.
- Модификатор
:uniqueдобавляет уникальный индекс в миграцию, но не валидацию в changeset — она нужна отдельно. - Генераторы не поддерживают полиморфные ассоциации — их нужно реализовывать вручную.
Common mistakes
- Сводить generators к названию метода без lifecycle и failure path.
- Игнорировать модель runtime: Phoenix 1.8 работает поверх Plug, Endpoint, Router, Controllers/LiveViews, PubSub и OTP supervision.
- Не отделять validation, authorization, transaction boundary и business logic.
What the interviewer is testing
- Объясняет generators через конкретную точку lifecycle в Phoenix (Elixir).
- Приводит корректный минимальный пример без вымышленных методов или callbacks.
- Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.