Създай пълен task manager с Gleam: един език за всички платформи
Създаване на пълен Task Manager с Gleam: Един език за всички платформи
Мечтата всеки разработчик да пише код веднъж и да го пуска навсякъде ни преследва от години. Пробвахме с Java applets, Electron, React Native и Flutter. Ами ако проблемът не е в рамките, а в избора на език от самото начало?
Тук идва Gleam – статично типизиран език, който компилира към Erlang за backend и JavaScript за frontend. Това позволява истинско обединено развитие на цял стек. Днес ви показвам как работи на практика с прост task manager – приложение, което разкрива цялата сила на подхода.
Идеята: Един код за множество платформи
Когато рамки обещаваха "пиши веднъж, стартирай навсякъде", обикновено мислеха за един вид деплой. Gleam отива по-дълбоко – същият код компилира за различни среди.
Нашето приложение Doable е умишлено просто. Поддържа основните операции: създаване, четене, промяна и изтриване на задачи. Но зад тази CRUD фасада стои цял архитектонски стек:
- JSON HTTP API на Erlang с PostgreSQL за съхранение
- Уеб фронтенд с реактивно управление на състоянието
- Десктоп апликации за Windows, macOS и Linux чрез Tauri
- Мобилни апликации за iOS и Android, също с Tauri
Всичко от един език. Един тип систем. Една логика за проверка.
Архитектура: Разработка срещу производство
Как работят разработчиците
В разработка искаме бърза обратна връзка. Docker за базата данни и API сървъра. Hot-reload сървър за всички фронтенди. Тестове без прекомпилиране.
Настройката е чиста:
- PostgreSQL в Docker с отделни бази за dev и тестове
- Gleam API сървърът стартира в Docker или локално
- Един Lustre dev сървър с hot reload за браузър, десктоп и мобилни
- API proxy заобикаля CORS проблеми – всичко минава през един вход
- Интеграционни тестове директно върху рутера с тестова база
Това ускорява работата. 30 секунди чакане между промени убива продуктивността.
Как работи в производство
При деплой всичко се опростява. Docker контейнери за всичко. Caddy е единственият вход – proxy към Gleam API и файлов сървър за фронтенда.
Уеб клиентите взимат фронтенда от Caddy и API заявки през същия proxy. Tauri десктоп и мобилни апликациите bundлират фронтенда локално, но ползват Tauri HTTP за API към Caddy. Същото приложение, оптимизирано за платформата.
Разбивка на техническия стек
Backend: Надеждността на Erlang
API сървърът компилира към Erlang с Wisp и Mist. Получаваш не просто уеб фреймуърк, а наследство от телеком инфраструктура. Erlang runtime управлява concurrency, fault tolerance и дистрибуция по-добре от повечето езици.
PostgreSQL осигурява релационна база с дългогодишна надеждност.
Споделеният код: Истинската сила
Gleam блести с shared проект – библиотека, която компилира за Erlang и JavaScript. Типове, валидация, сериализация – всичко споделено. Промениш структура на задача, и се отразява навсякъде.
Няма несъответствия между фронт и бек. Компиляторът хваща грешки преди runtime.
Frontend: Elm архитектура
Уеб фронтендът е на Lustre с Elm Architecture – стандарт за предсказуемо UI състояние. Ако познаваш Elm, ще ти е познато. Десктоп и мобилни следват същите шаблони.
Защо да го ползваш в следващия проект
Пълен тип safety става ключов при сложни апликации. Ето какво се променя:
Рефакторинг без страх. Преименуваш поле в схемата, ъпдейтваш в shared типове – компилаторът сочи всички 47 места.
Консистентност без усилие. Не превеждаш валидация между TypeScript, Swift и Kotlin. Пишеш веднъж в Gleam.
По-бърз онбординг. Новите разработчици учат един език, не три екосистеми.
По-просто управление. По-малко зависимости, деплой стратегии и runtime изненади.
Реалността на практика
Gleam ли е бъдещето на уеб разработката? Не съвсем. Екосистемата е по-малка от TypeScript или Python –影响ва наемане и библиотеки.
Но за нови full-stack проекти, където тип safety и един код са приоритет, елиминира цели класове бъгове.
Примерът с task manager е прост нарочно. Доказва, че архитектурата работи на малък мащаб. За големи проекти добавяш сложност, но философията остава: компилирай веднъж, проверявай навсякъде, деплой на много.
Как да започнеш
Ако те грабна, кривата на обучение е реална, но преодолима. Синтаксисът е близък до JavaScript, Python, Rust. Типовете са мощни, без да те притискат от ден първи.
Започни с Erlang backend. Създай API. Добави Lustre за фронтенд и виж как shared типове елиминират бъгове. След като опиташ обединено full-stack развитие, връщането към раздробени подходи ще ти се стори старомодно.
Бъдещето може да не е в различни инструменти за слоеве, а в език, който покрива всички.
Готов ли си за full-stack с Gleam? Започни с документацията и помисли как следващият ти проект печели от тип-safe компилация на всички платформи.