Žádné gemy (jedna hvězdička)
./blog.sh nepotřebuje žádné gemy. Tady je ta jedna hvězdička u té věty, protože tvrzení bez své výjimky za moc nestojí.
Napřed tvrzení: nula gemů, nula balíčků z npm, žádný Bundler, žádný lockfile, žádná složka node_modules potichu tloustnoucí ve tmě. Ruby 2.7 nebo novější a bash. Naklonuj a běží.
Hvězdička, hned na začátku
Dva volitelné widgety postranního panelu – Pixelfed a obecné RSS – rozebírají XML pomocí rexml. To je výchozí gem: přichází přibalený s každou normální instalací Ruby, takže pro většinu lidí tvrzení platí, jak je napsáno. Ale některé linuxové distribuce Ruby rozdělují do balíčků a výchozí gemy dávají do samostatného.
Takže: když ty dva widgety zapneš na Ruby z distribučního balíčku a sestavení si stěžuje na rexml, jsi ta hvězdička. Dvě cesty ven – nainstalovat balíček své distribuce, něco jako ruby-rexml, nebo gem install rexml. Tak či tak je to jeden balíček, jednou, a jen když ty widgety vůbec používáš.
To je celý příběh závislostí. Radši ho vypíšu, než abych ho zaokrouhlil na nulu a čekal, až s tím něčí sestavení nebude souhlasit.
Co ti skutečná nula koupí
Žádné síťové závislosti při sestavení znamenají, že se celý web sestaví bez připojení. V letadle, ve vlaku, na serveru, který se firewallem zahnal do kouta – ruby build/build_blog.rb to neví a nezajímá ho to.
A výstup je stejně nudný jako vstup. Změřeno na tomto webu, dnes, čtrnáct příspěvků:
| Změřeno na tomto webu | Hodnota |
|---|---|
| Plné sestavení, studené | 1,9 s |
| Plné sestavení, teplé (zapisují se jen změněné soubory) | 0,9 s |
| HTML titulní strany | 54 kB |
| Všechno CSS | 24 kB |
| Všechen JavaScript | 23 kB – 555 řádků v 8 souborech |
| Požadavky na cizí domény | 1* |
Ten JavaScript je úplný inventář: přepínač tématu, lightbox, hledání na straně klienta, načítání komentářů, widgety postranního panelu, mobilní navigace, návrat nahoru a sdílený pomocný soubor. Pod žádným z nich se neskrývá framework.
A ano, do tabulky se vloudila druhá hvězdička, stejná politika jako u té první: ten jeden požadavek na cizí doménu je moje vlastní self-hostovaná analytika Umami, na jiné mé doméně, přidaná přes konfiguraci. Engine sám dodává přesně nulu – žádnou CDN s písmy, žádný tracker, žádný embed volající domů. Vypni řádek analytiky v site.yml a to číslo je strukturální 0.
Proč se s tím obtěžovat
Protože každá závislost je malá stálá schůzka s budoucností. Nějaké úterý potřebuje aktualizaci, audit, náhradu, nebo zavrhne tu jedinou funkci, kterou jsi použil. Nástroj jen ze standardní knihovny tyhle schůzky vynechává – cena je napsat o trochu víc kódu sám, a u blogovacího enginu se ta cena ukázala jako překvapivě nízká.
Nula s vypsanou výjimkou je užitečnější než nula bez ní. Když věříš hvězdičce, můžeš věřit zbytku tabulky.

Komentáře