Preskočiť na obsah
Architektúra

CLI — command-line interface

CLI (command-line interface) je textové rozhranie, cez ktoré sa softvér ovláda príkazmi v termináli — bez kliknutia, bez prehliadača. V modernom vývoji nie je CLI samostatný produkt, ktorý si objednáte: je to vrstva, ktorú by mal mať každý netriviálny systém popri svojom webovom rozhraní, lebo robí vývoj, nasadzovanie aj každodennú prevádzku rýchlejšími a hlavne automatizovateľnými.

Ako to funguje

Skoro každý softvér má grafické rozhranie — okná, tlačidlá, formuláre, ktoré ovládate myšou. CLI je to druhé rozhranie: namiesto klikania napíšete príkaz do terminálu, program ho vykoná a vráti výsledok — do konzoly, do súboru alebo cez návratový (exit) kód. Nie je to relikt minulosti ani niečo „len pre programátorov v čiernom okne“. Je to najpriamejší spôsob, ako softvéru povedať, čo má urobiť — a hlavne jediný spôsob, ktorý sa dá zapísať do skriptu a nechať bežať bez človeka.

A keďže CLI komunikujú v texte, dajú sa reťaziť: výstup jedného nástroja sa rúrou (znak |) privedie na vstup ďalšieho, takže z malých príkazov, z ktorých každý robí jednu vec dobre, poskladáte väčšiu operáciu bez písania nového kódu. To je jadro unixovej filozofie — myšlienky spred päťdesiatich rokov, vďaka ktorej zopár desiatok malých nástrojov vie vytvoriť tisíce užitočných kombinácií — a jeden z dôvodov, prečo CLI nezostarlo. Rovnaká logika dnes platí aj o vrstvu vyššie: to, čo robí rúra pre príkazy v termináli, robí REST API pre programy a MCP pre AI agentov.

Práve preto by mal byť každý netriviálny systém — webová aplikácia, SaaS, interná platforma — CLI-enabled už od začiatku. Čo cez webové rozhranie robíte ručne (založiť tenanta, naimportovať dáta, vygenerovať report, prepnúť feature flag, skontrolovať stav), cez CLI urobíte rovnako — ale navyše to viete vložiť do CI/CD pipeline, do plánovanej úlohy alebo do skriptu, ktorý zbehne o tretej ráno bez toho, aby pri tom niekto sedel. Bez CLI sa každá takáto operácia stáva ručnou prácou alebo skriptom „bokom“, ktorý nikto neudržiava. S CLI je súčasťou systému — verzionovaná, otestovaná, opakovateľná.

V praxi to znamená sadu príkazov, ktoré pokrývajú vývoj aj prevádzku: databázové migrácie a seedy, importy dát zo starých systémov, hromadné operácie (rozposielanie, prepočty), administratívne akcie (reset hesla, správa rolí), health-checky a diagnostiku. Dobrý CLI má pritom svoju hygienu — zmysluplné chybové hlášky, nenulový exit kód pri zlyhaní (aby skript vedel, že niečo nevyšlo), prepínač --help s popisom argumentov a deterministické správanie (rovnaký vstup dá rovnaký výstup). Napísať sa dá prakticky v ľubovoľnom jazyku — Python, Rust, Go, C, C++, Ruby, TypeScript — je to len program, ktorý prečíta argumenty a vypíše výsledok. Rozumné je zvoliť ten istý jazyk a tie isté typy ako zvyšok systému, aby CLI zdieľal validácie a dátový model: my preto najčastejšie siahame po TypeScripte (Node.js, knižnice ako commander.js) pri projektoch bežiacich na Node, po Go, keď treba samostatný binárny súbor bez závislostí, a po Bash skripte pri triviálnych prípadoch.

Tak to staviame: systém, ktorý dodáme, prichádza s CLI, ktoré jeho prevádzka potrebuje — nie ako príplatok, ale ako súčasť toho, že je softvér poriadne urobený. Samostatný CLI nástroj (bez webového rozhrania) dáva zmysel zriedkavejšie, ale dáva: jednorazové migrácie pri prevzatí klienta, generovanie dokumentov podľa konfigurácie, správa multi-tenant prostredia, nástroje pre interný vývojový tím. A platí to aj naopak — to isté, čo CLI robí pre skripty a ľudí v termináli, robí MCP server pre AI agentov: vystavuje operácie systému spôsobom, ktorý vie použiť stroj. Moderný systém je dobré navrhnúť tak, aby sa dal ovládať nielen klikaním, ale aj programaticky — cez CLI, cez API, a čoraz častejšie aj cez MCP.

Z našej praxe

Z našej praxe: takmer každý väčší projekt má svoj CLI a takmer žiadny klient si ho neobjedná samostatne — vznikne preto, lebo ho systém potrebuje. V klinickom IS to býva import historických dát zo starého systému (spracovať CSV, transformovať, overiť integritu, naplniť databázu). V multi-tenant SaaS správa tenantov (založiť, nastaviť počiatočnú konfiguráciu, seednúť staging). Vo všetkých projektoch databázové migrácie, ktoré bežia automaticky pri každom nasadení. Praktická kombinácia pre Node.js backend: TypeScript s commander.js spustený cez tsx, bez samostatného build kroku. Klient z toho väčšinou nevidí nič — vidí len to, že nasadenia, importy a údržba fungujú spoľahlivo.

Kedy to potrebujete

  • Staviate SaaS alebo internú platformu a chcete, aby sa rutinné aj výnimočné operácie (založenie účtu, import, report, prepnutie feature flagu) dali spustiť aj zo skriptu a z CI/CD, nielen z administrácie
  • Preberáte alebo migrujete klienta a treba jednorazovo, ale kontrolovane preniesť dáta zo starého systému — CLI dáva auditovateľný a opakovateľný priebeh
  • Vývojový tím potrebuje interné príkazy na správu prostredia — pridanie používateľa, reset hesla, seed dát, kontrola stavu — namiesto klikania v produkčnej databáze
  • Opakované úlohy (zálohy, prepočty, rozposielanie, synchronizácie) chcete zaradiť do cronu alebo pipeline bez bežiaceho webového servera a bez „skriptu bokom“, ktorý nikto neudržiava

Najčastejšie otázky

Je CLI to isté ako terminál alebo príkazový riadok?

Nie celkom — sú to vrstvy nad sebou. Terminál je aplikácia, ktorá zobrazuje textové rozhranie. V ňom beží shell (bash, zsh, PowerShell) — program, ktorý číta vaše príkazy a spúšťa ich. „Príkazový riadok“ je ten riadok, do ktorého píšete. A CLI je rozhranie konkrétneho programu, ktorý cez tento riadok zavoláte — napríklad git, npm alebo CLI vašej aplikácie. Keď niekto povie „spusti to z CLI“, myslí: napíš príkaz do terminálu.

Aký je rozdiel medzi CLI a grafickým rozhraním (GUI)?

GUI ovládate myšou cez okná, tlačidlá a menu — je názorné a nevyžaduje učenie príkazov. CLI ovládate písaním príkazov — strmšia krivka učenia, ale rýchlejšie pre opakované a dávkové operácie a hlavne automatizovateľné: čo zadáte raz ručne, môžete vložiť do skriptu, cronu alebo CI/CD a spúšťať bez zásahu. Nie je to buď–alebo: dobre urobený systém má oboje — GUI pre bežnú prácu a netechnických ľudí, CLI pre vývoj, prevádzku a automatizáciu.

Mal by mať môj softvér (SaaS, platforma) CLI?

Ak je netriviálny, tak áno — aspoň pre vývoj a prevádzku. Nemusí ísť o CLI pre koncových používateľov; ide o sadu príkazov, ktorými sa systém migruje, importuje, diagnostikuje a spravuje. Bez nej tieto operácie skončia ako ručná práca alebo ako neudržiavané skripty „bokom“. S ňou sú súčasťou systému — verzionované, otestované, spustiteľné z CI/CD. Náklad navyše je malý, najmä ak CLI zdieľa kód a dátový model so zvyškom aplikácie; návratnosť príde pri prvom väčšom nasadení, importe alebo incidente.

V čom sa píšu CLI nástroje?

Prakticky v ľubovoľnom jazyku — Python, Rust, Go, C/C++, Ruby, TypeScript a ďalšie. CLI je len program, ktorý prečíta argumenty a vráti výstup, takže jazyk je voľba, nie obmedzenie. Najrozumnejšie je vziať ten istý jazyk ako zvyšok systému, aby CLI zdieľal typy, ORM aj validačné schémy. V našich projektoch to býva TypeScript/Node.js (keď tam beží backend), Go (keď treba samostatný binárny súbor bez závislostí) alebo Bash (pre jednoduché skriptovanie príkazov shellu) — ale to je naša obvyklá voľba, nie pravidlo.

Ako zaradím CLI do cronu alebo CI/CD?

CLI je spustiteľný príkaz — zaradíte ho rovnako ako akýkoľvek iný. V GitHub Actions ho zavoláte v kroku „run:“. V cronte (systemd timer alebo crontab) definujete plán a príkaz. Dôležité je, aby program vracal správny exit kód: 0 pri úspechu, nenulový pri chybe — cron aj CI/CD podľa neho detekujú zlyhanie.

Potrebujete s tým pomôcť?

Ak riešite niečo z toho, čo tu opisujeme, ozvite sa. Povieme vám, či a ako vieme pomôcť.