Gleamilla täystohon taskienhallinta-appi: Yksi kieli, kaikki alustat
Gleamilla täystietokantasovellus: Yksi kieli, kaikki alustat
Kehittäjät ovat vuosikymmenten ajan metsästäneet unelmaa, jossa koodi kirjoitetaan kerran ja pyörii kaikkialla. Java appletit, Electron, React Native ja Flutter ovat olleet yrityksiä. Entä jos ratkaisu ei olekaan frameworkeissa, vaan oikeassa kielessä alusta asti?
Tässä tulee Gleam: staattisesti tyypitetty kieli, joka kääntyy sekä Erlangiksi (backend) että JavaScriptiksi (frontend). Se mahdollistaa aidon yhtenäisen täystietokannan. Tässä artikkelissa rakennamme esimerkin: yksinkertaisen tehtävänhallintasovelluksen, joka näyttää, miten homma toimii käytännössä.
Visio: Yksi koodipohja, monta alustaa
Useimmat frameworkit lupaavat "kirjoita kerran, aja kaikkialta", mutta tarkoittavat vain yhtä deployment-tyyppiä. Gleam menee syvemmälle – sama lähdekoodi kääntyy eri ympäristöihin.
Sovelluksemme, Doable, hoitaa perusasiat: tehtävien luonti, lukeminen, päivitys ja poisto. Yksinkertainen pintataso kätkee alleen koko arkkitehtuurin:
- JSON HTTP API Erlangilla ja PostgreSQL-tallennuksella
- Selainpohjainen frontend reaaliaikaisella tilanhallinnalla
- Natiivit desktop-sovellukset Windowsille, macOS:lle ja Linuxille Taurin avulla
- iOS- ja Android-sovellukset myös Taurilla
Kaikki samalla kielellä. Samalla tyyppijärjestelmällä. Samalla validointilla.
Arkkitehtuuri: Kehitys vs. tuotanto
Kehitysympäristö reaalisessa työssä
Kehityksessä nopea palaute on kuningas. Tarvitset Dockerin tietokannalle ja API-palvelimelle, hot-reloadin frontendille ja integraatiotestit ilman jatkuvaa kääntämistä.
Toteutus on sujuva:
- PostgreSQL Dockerissa, erilliset dev- ja test-tietokannat
- Gleam API Dockerissa tai lokaalisti aktiivisessa kehityksessä
- Yksi Lustre dev-palvelin hoitaa hot-reloadin selaimeen, desktopiin ja mobiiliin
- API-proxy estää CORS-ongelmat – kaikki kulkee yhdestä pisteestä
- Integraatiotestit suoraan reitittimeen testitietokannalla
Tämä nopeuttaa työtä. 30 sekunnin odotus muutosten välillä tappaa tuottavuuden.
Tuotantoympäristö pelkistettynä
Tuotannossa kaikki on Dockerissa. Caddy toimii yhtenäisenä sisäänkäyntinä, proxyaa Gleam API:lle ja tiedostopalvelimelle frontendin jakamiseksi.
Selainklientit hakevat front-endin Caddyn tiedostopalvelimelta ja API-kutsut proxyn läpi. Tauri-sovellukset paketoivat saman front-endin paikallisesti, mutta käyttävät Taurin HTTP-pluginiä API:lle. Sama sovellus, optimoitu per alusta.
Tekniset palikat purettuna
Backend: Erlangin luotettavuus
API kääntyy Erlangiksi Wisp- ja Mist-kirjastoilla. Saat web-frameworkin lisäksi Erlangin perinnön: rinnakkaisuus, vikasietoisuus ja hajautus telecom-tasolla.
PostgreSQL tuo relaatiotallennuksen, jota Erlang-kehittäjät ovat luottaneet 90-luvulta.
Jaettu koodi: Todellinen voitto
Gleamin nerokkuus on shared-kirjastossa, joka kääntyy sekä Erlangiksi että JavaScriptiksi. Tyypit, validointi ja sarjastus jaetaan. Tehtävästruktuurin muutos päivittyy automaattisesti kaikkialle.
Ei tyyppivirheitä frontendin ja backendin välillä. Ei "toimii mun koneella" -yllätyksiä. Kääntäjä nappaa ongelmat ennen runtimea.
Frontend: Elm-mallin perinteet
Web-frontend käyttää Lustre-kirjastoa ja Elm Architecturea – tuttu Elm-kehittäjille, muille oppimisen arvoinen. Se tekee UI-tilasta ennakoitavaa ja testattavaa.
Desktop ja mobiili noudattavat samaa mallia eri kohteissa.
Miksi tämä kiinnostaa seuraavaa projektia?
Täystietokannan tyyppiturvallisuus kasvaa tärkeäksi monimutkaisissa sovelluksissa. Muutokset:
Refaktorointi ilman pelkoa. Muuta kenttä skeemassa, päivitä shared-tyyppi – kääntäjä näyttää kaikki 47 paikkaa. Ei arvuuttelua.
Alustojen yhtenäisyys ilmaiseksi. Validointi kirjoitetaan Gleamissa, kääntyy kolmelle kohteelle ilman TypeScript-, Swift- tai Kotlin-käännöksiä.
Uusien kehittäjien oppiminen nopeutuu. Yksi kieli ja tyyppijärjestelmä kolmen sijaan moninkertaistaa tehon.
Käyttöönotto yksinkertaistuu. Vähemmän kieliä, riippuvuuksia, deploy-strategioita ja yllätyksiä.
Käytännön totuus
Onko Gleam web-kehityksen tulevaisuus? Ei kaikille. Ekosysteemi on pienempi kuin TypeScriptillä tai Pythonilla – rekrytointi ja kirjastot ovat haaste.
Pienille tiimeille vihreät kentät, joissa tyyppit ja yhtenäisyys ratkaisevat? Poistaa kokonaisia bug-kategorioita.
Tehtävänhallinta on yksinkertainen tarkoituksella. Se todistaa arkkitehtuurin toimivuuden pienessä mittakaavassa. Isommat sovellukset monimutkaistuvat, mutta perusperiaate pysyy: käännä kerran, validoi kaikkialla, deployaa moneen.
Aloita näin
Jos kiinnostaa, oppimiskäyrä on jyrkkä mutta hallittava. Gleamin syntaksi muistuttaa JavaScriptiä, Pythonia ja Rustia. Tyyppijärjestelmä on vahva, mutta ei vaadi heti mestaruutta.
Aloita Erlang-backendista ja API:sta. Lisää Lustre frontendille ja katso, miten shared-tyypit tappavat bugeja. Kun koet yhtenäisen täystietokannan, palaaminen sirpaleiseen malliin tuntuu vanhanaikaiselta.
Tulevaisuus ei ehkä ole erikoistyökaluja kerroksille. Se voi olla kieli, joka osuu kaikkiin kerroksiin.
Kokeile Gleamin täystietokantaa? Sukella Gleam-dokumentaatioon ja mieti, miten seuraava projektisi hyötyisi tyyppiturvallisesta kääntämisestä kaikille alustoille.