Полноценный таск-менеджер на Gleam: один язык для всех платформ
Создаём Task Manager на Gleam: один язык для всех платформ
Мечта о коде, который пишется один раз и запускается везде, преследует разработчиков годами. Мы пробовали Java applets, Electron, React Native и Flutter. А что, если дело не в фреймворках? Что, если ключ — правильный язык с самого начала?
Знакомьтесь с Gleam. Это статически типизированный язык, который компилируется в Erlang для бэкенда и JavaScript для фронтенда. Полная унификация стека. Сегодня разберём на примере простого task manager'а — приложения Doable. Оно покажет, как это работает на деле.
Идея: один код для всех устройств
Суть в том, что Gleam берёт один и тот же исходный код и строит из него разные runtime'ы. Никаких компромиссов с "почти кросс-платформой".
Doable — базовый CRUD: создавать, читать, обновлять, удалять задачи. Звучит просто? Зато за этим стоит полный стек:
- JSON HTTP API на Erlang с PostgreSQL
- Веб-фронтенд в браузере с реактивным состоянием
- Десктоп для Windows, macOS, Linux через Tauri
- Мобильные apps для iOS и Android, тоже на Tauri
Всё на одном языке. Одни типы. Одна логика валидации.
Архитектура: разработка и продакшн
Как работают разработчики
Нужны быстрые циклы: меняешь код — сразу видишь результат. Без перестроек и ожиданий.
Сetup для dev'а решает это:
- PostgreSQL в Docker, отдельные БД для dev и тестов
- Gleam API-сервер запускается локально или в Docker
- Lustre dev-сервер с hot reload для веба, десктопа и мобилок
- Прокси API убирает CORS-проблемы — всё через один вход
- Интеграционные тесты бьют прямо по роутеру на тестовой БД
Такие фичи ускоряют работу. 30 секунд на чейндж — это тормоз, а не разработка.
Как бегает в продакшене
В проде всё проще: Docker-контейнеры. Caddy — единая точка входа. Проксирует на Gleam API и статический фронт.
Красиво вот что: браузер тянет фронт через file server Caddy, API — через прокси. Tauri-apps бандлят фронт локально, но дергают API через HTTP-плагин Tauri. Один код, оптимизация под платформу.
Разбор стека
Бэкенд: надёжность Erlang
API компилируется в Erlang с Wisp и Mist. Получаешь не просто фреймворк, а проверенную concurrency, fault tolerance и распределённость. Erlang — это telecom-наследие десятилетий.
PostgreSQL — классика для хранения данных. Надёжно, как часы.
Общий код: главный профит
Gleam позволяет создать shared-проект — библиотеку, которая компилится и в Erlang, и в JavaScript. Типы, валидация, сериализация — всё общее. Меняешь структуру задачи — изменения летят везде автоматически.
Никаких несоответствий типов. Никаких "у меня работает" сюрпризов. Компилятор ловит ошибки на этапе сборки.
Фронтенд: паттерны Elm
Веб на Lustre с Elm Architecture. Управление состоянием предсказуемое, тесты лёгкие. Если делал Elm — поймёшь сразу. Нет? Изучи: это стандарт для UI.
Десктоп и мобилки используют те же паттерны, просто на разных таргетах.
Почему это важно для твоего проекта
Типобезопасность на всём стеке спасает в сложных приложениях. Что меняется:
Рефакторинг без страха. Переименовал поле в схеме — обновил в shared-типах. Компилятор покажет все 47 мест.
Консистентность бесплатно. Не дублируешь валидацию на TypeScript, Swift или Kotlin. Пишешь в Gleam — компилируешь куда надо.
Онбординг быстрее. Новички учат один язык и типы, а не три экосистемы.
Операционка проще. Меньше зависимостей, стратегий деплоя и runtime-косяков.
Реальность на практике
Gleam — будущее всего веба? Нет. Экосистема меньше TypeScript или Python. Библиотек и спецов пока не густо.
Но для новых full-stack проектов с упором на типы — идеал. Убирает кучу багов на корню.
Doable простой нарочно. Доказывает: архитектура работает. В реальных apps добавишь фич, но философия та же: пиши раз, проверяй везде, деплои многими путями.
Как начать
Кривая обучения есть, но не крутая. Синтаксис — микс JavaScript, Python, Rust. Типы мощные, но не требуют гениальности с первого дня.
Стартуй с Erlang-бэкенда. Собери API. Добавь Lustre на фронт — и shared-типы сотрут классы багов. Попробуешь unified stack — старые подходы покажутся архаикой.
Может, будущее full-stack — не в инструментах по слоям, а в языке, который покрывает все слои.
Готов нырнуть в Gleam? Читай доки и подумай, как типобезопасный кросс-платформенный код поможет твоему следующему проекту.