Flutter v praxi: Ako som pre kolegov vyvinul desktop SDK aplikáciu

Ako už viete z niekoľkých mojich článkov, popri celoročnom bicyklovaní a sezónnych športoch mám aj zápal pre skúšanie nových technológií. Tie mobilné mi však nikdy neboli blízke. Skôr som chcel skúsiť vytvoriť nejakú desktopovú apku, ktorá prinesie prospech nielen mne, ale aj iným. A podarilo sa.

Výber technológie je základ

Už niekoľko posledných rokov som “poškuľoval” po rôznych technológiách, ktoré umožňujú rýchlo a jednoducho vytvoriť užitočnú one-click aplikáciu na všetko. Niečo ako švajčiarsky nožík na čokoľvek, čo potrebujem ku každodennej práci. Zaujal ma hlavne Electron.js, a to kvôli jeho podobnosti s inými webovými aplikáciami. Potom som ale objavil Flutter. Ten je síce primárne vyvíjaný pre univerzálne mobilné apky na Android a iOS, no má tiež relatívne dobré webové preklopenie. Mne sa ale zapáčila hlavne jeho stabilná podpora pre desktop, presnejšie pre Linux, macOS a Windows. Technológia bola teda jasná. Stačil už len nápad.

Od dokumentácie k praxi

Začalo sa to takto – 1. marca 2023 som si otvoril dokumentáciu jazyka Dart, ktorý vytvoril Google (odveta za Typescript od Microsoft-u). Prelúskal som ju za 2 dni a ďalšie 2 som už skúšal inštalácie, konfigurácie a spúšťanie Flutter projektu. Potom som si položil otázku, či má to “hranie sa” ešte zmysel, alebo sa chcem posunúť ďalej a otestovať na niečom praktickom, čo všetko Flutter naozaj dokáže. Samozrejme, zvíťazila možnosť B a ja som si zaumienil, že vytvorím aplikáciu pre naše tímové CLI.

Aby ste vedeli, o čo ide: V bart-e som súčasťou najväčšieho tímu našej firmy. Pracujeme na medicínskom projekte pre belgického klienta s názvom Crossuite, kde je už rozbehnuté obrovské množstvo mikroservis, APIs a rôznych druhov front-endov aj back-endov. Moji kolegovia preto už dávnejšie pripravili v GoLang CLI (command-line interface) aplikáciu pre terminál, ktorý nám slúži na sťahovanie, ladenie a spúšťanie dockerov, databáz a správu celého developmentu aj testovacieho ekosystému.

A i keď je zapamätanie si a písanie príkazov do terminálu dostatočne jednoduché, veril som, že sa to dá používateľsky posunúť na ešte vyššiu úroveň. Spomenul som si na frázu: „Ak váš tím potrebuje veľké množstvo externých aplikácií, je načase začať si tvoriť svoje vlastné nástroje“, a povedal si, že nastal ten správny čas niektoré programy zredukovať a pospájať viaceré známe služby pod jednu vlastnú strechu. Pustil som sa teda do rozšírenia nášho CLI aj o súbor inštalácií, nastavení a rôznych náročnejších operácií s databázou a samotnými docker kontajnermi.

AI pomocníci

Nebol by som dobrý frontendista, ak by som pri učení, testovaní a celkovom vývoji nepoužil aspoň niektoré dostupné AI nástroje :)

Ako prvý mi poslúžil GitHub Copilot, ktorý bol síce na začiatku horší, ako stredoškolák na steroidoch (t.j. všetko vie, všetko chce a čo ide ťažko, skúša väčšou silou), no časom sa priučil môjmu štýlu písania kódu a poskytoval mi celkom relevantné návrhy. 

Pomáhalo mi tiež JetBrains AI, ktoré efektívne navrhovalo rôzne CLI príkazy aj systémové skripty. A keď už som bol maximálne lenivý, a ani Copilot či JetBrains AI mi nedokázali poradiť, obrátil som sa na Google Bard (Gemini). Nie že by som ChatGPT nemal rád, ale Bard vie jednoducho lepšie “myslieť” a pracovať s aktuálnymi dátami.

A aby toho nebolo málo, využil som ešte aj nejaké AI generátory obrázkov na vytvorenie ikony aplikácie. Je to síce len zhluk rôznych predmetov, ktoré pripomínajú stôl, monitor, kontajnery a iné abstraktné narážky na počítač či vývoj, no stačilo mi doplniť cez ne text SDK (software development kit) a prvý postačujúci náčrt bol na svete.

Každý deň nová funkcionalita

Keď už som mal ikonu, vývoj nabral rýchly spád. Začalo sa črtať základné rozloženie aj prioritizácia a kategorizácia prvkov, ktoré majú byť dostupné okamžite. 

Potom som nasadil prvé veľké funkcie, ako možnosť inštalácie potrebných aj voliteľných aplikácií pre rozbehnutie vývojového prostredia. Cieľom bolo, aby si noví kolegovia v tíme s úplne prázdnym počítačom mohli jedným klikom nainštalovaťl všetko, čo potrebujú.

Následne prišlo na rad vytváranie a správa SSH kľúčov a registrácia do privátnych GitLabov. K nim som pridal aj vylepšenie v podobe pomyselnej funkcie cleanAll, ktorá umožňuje vývojárom premazávať priečinky, upravovať práva alebo nastavovať systém.

Čo všetko obsahuje SDK?

Keďže moje SDK malo byť najmä nástavbou nad používaným CLI, snažil som sa zachovať všetky princípy a funkčnosť príkazov. Konfiguračné súbory teda ostali nezmenené a niektoré príkazy sú aj dodnes priamo volané nad CLI zo SDK. 

Zároveň som však chcel, aby SDK CLI vhodne rozšírilo. Napríklad o možnosť updatovať ho, zmeniť jeho umiestnenie tak, aby bolo dostupné globálne, alebo overovať, či má developer nainštalovanú aktuálnu databázu.

Potom som ešte pridal:

  • autoload projektov,
  • možnosť spúšťať a stopovať Dockre,
  • alebo funkcie na vyhodnotenie, overenie a spustenie build Docker imagov priamo na našom GitLabe, a následne jeho stiahnutie a spustenie.

V tomto bode som si už bol aplikáciou taký istý, že som sa začal hrať s vychytávkami, ako:

  • reload,
  • zmena témy farieb,
  • pripnutie projektov,
  • zobrazenie výstupu Docker kontejneru,
  • zmena git branche nad projektom,
  • alebo zobrazenie konfiguračných súborov už s pridanými ENV premennými.

Ako šikovný doplnok som tiež pridal viaceré farebné indikátory, ktoré vývojárom oznamujú, kedy kontajner pracuje a či je v poriadku alebo nakoľko je vyťažená RAM. Červený indikátor znamená, že je niečo nefunkčné alebo nastala chyba, oranžová indikuje čiastočný alebo aktuálne vyhovujúci stav a zelená svieti, keď všetko funguje, ako má.

Po tomto všetkom som v septembri zorganizoval vlastnú one-man show, odprezentoval projekt medzi kolegami a potom doň už len spomedzi nich prihadzoval beta-testerov, ktorých počet rástol ako huby po daždi :) SDK aplikácia je ale vytvorená len pre interné použitie a je dostupná len mojim kolegom a spolupracovníkom.

A čo bude ďalej?

Changelog projektu sa naďalej mení pomerne často. Nedávno som pridal napríklad plnú podporu pre macOS a tesne pred finišom je už aj Windows verzia. Čaká ma ešte výzva v podobe pridania podpory pre dátovo starší Crossuite projekt Gama, ktorý je však stále veľmi dôležitý a zaslúži si starostlivosť. A pre testerov chystám samostatnú sekcie na end-to-end a unit testy.

A pretože aj pri one-man projekte sa treba stále posúvať, pre vývoj SDK som si preto nedávno vytvoril míľniky a kompletný CI/CD proces – od mergnutia kódu, cez testy a kontrolu code quality až k buildu. Ten funguje pre Linux interne v rámci AWS workera, a pre MacOS a Windows prostredníctvom remote Codemagic buildera.

Ako hodnotím Flutter?

Môžem zodpovedne napísať, že som si počas vývoja vyskúšal asi všetky metodiky a možnosti samotného Dart jazyka a framework Flutter. A hodnotím ho veľmi pozitívne. Páči sa mi jeho všestrannosť, univerzálnosť na poli mobilných aplikácií a prekvapivá funkčnosť i rýchlosť pri tých desktopových.

V rámci vyťaženia CPU je aplikácia na úrovni 0,5% a pritom na nej beží viacero podprocesov monitoringu, ako Docker stats alebo healthcheck. Pamäť sa pohybuje v rozmedzí 98-150MB pri Linux-e a 150-250MB na macOS a Windows. Vzhľadom na veľkosť projektu sú tieto hodnoty naozaj skvelé – oveľa lepšie, než pri dostupných hotových riešeniach rovnakého typu.

Samozrejme, vďaka Flutteru nikdy nevytvoríte natívnu appku. V prípade potreby prístupu k natívnym systémovým či mobilným požiadavkám, ako kamera, mikrofón alebo video codec, budete musieť vždy použiť ďalší doplnok, alebo vytvoriť si premostenie medzi natívnym loaderom a vygenerovanou aplikáciou. Myslím ale, že to za to stojí,

Podľa mňa má Flutter šancu preraziť a postupne sa zmeniť na niečo obrovské. A verím, že keď to príde, všetky polovičné riešenia ako Electron.js alebo Ionic, sa stanú minulosťou.

Poďakovanie autora :)

Aj keď o SDK píšem ako o one-man show, pravdou je, že nikto nie je ostrov. Vďaka za to, že aplikácia existuje, preto patrí aj mojim kolegom Martinovi Čuchtovi, Erikovi Sasákovi, Lukášovi Pollákovi a Petrovi Sliackému. Pripravili základné princípy fungovania CLI, ktoré tým pádom prebrala aj veľká časť SDK. Poďakovanie si tiež zaslúžia odhodlaní dobrovoľníci, čo CLI a SDK testovali, a v neposlednom rade celý bart a Crossuite, ktorí mi vždy radi poskytnú priestor na (zodpovedné!) experimenty.

SDK dnes používajú všetci developeri, QA tím a aj niekoľko ľudí z manažmentu. Kolegovia už netrpezlivo očakávajú verziu pre ich domáce Windows počítače a Belgičania zas zháňajú Gama podporu. Navyše sa mi poriadne naplnil aj zoznam funkcionalít, ktoré by chceli mať developeri aj/alebo testeri nasadené čím skôr. Vďaka dostatku času medzi sviatkami sa teda chystám pridávať jednu “fičúrku” za druhou. Snáď mi to pôjde minimálne rovnako dobre, ako doteraz.

Zaujíma ťa vývoj? Potom by ťa mohli baviť aj ďalšie články na túto tému!