Vibe coding s Nette

AI agent vám za pár sekund napíše sto řádků PHP. Jestli budou opravdu fungovat, o tom rozhoduje něco, co si agent sám obstarat nedokáže: základ, který si umí přečíst a ověřit a na kterém může stavět.

Nette ho buduje léta, už v době, kdy to vypadalo jako detail pro fajnšmekry.

  • Otypované do morku kostí – agent typy čte, místo aby je hádal
  • Jasné konvence – ví, kam která třída patří
  • Uzavřená smyčka – vidí vaši skutečnou aplikaci a kontroluje si vlastní práci

IDE bylo pro člověka, analýza je pro stroj

Roky jsme nástroje milovali za našeptávač, za typ, který vyskočí při najetí myší, za skok na definici. To všechno je ale pomoc pro lidské oko a ruku. Agent obrazovku nečte. Potřebuje informaci, kterou si přečte jako text a hlavně si ji umí ověřit sám.

V tom je celý rozdíl mezi IDE a statickou analýzou. PhpStorm vám decentně podtrhne místo, kde možná předáváte null. PHPStan tutéž věc napíše do konzole jako chybu, kterou agent přečte, pochopí a opraví, aniž byste u toho museli sedět.

Otázka proto už nezní „jak hezky mi editor popíše tohle API?“, ale „kolik toho o sobě říká sám kód?“

Nette toho říká hodně

Když PHP 7.1 doplnilo typový systém o nullable typy, bylo Nette vůbec prvním full-stack frameworkem, který si otypoval celé své API, včetně declare(strict_types=1) v každém souboru. Jakmile PHP 7.4 přidalo typované property, Nette je převzalo. Co uměl jazyk vyjádřit nativně, to Nette používalo, většinou dřív než ostatní.

A tam, kde nativní typy nestačí, nastupují anotace. PHP neumí zapsat „neprázdný seznam řetězců“ ani „návratová hodnota závisí na argumentu“. Nette obojí zapíše, přesně tam, kde na tom záleží:

$data = $form->getValues(RegistrationData::class);
echo $data->email;   // $data je RegistrationData, plně otypované

Žádný nativní typ PHP tohle nezvládne: „když ti předám jméno třídy, vrátíš mi instanci té třídy“. Podmíněný návratový typ to zvládne a přečte si ho statická analýza, vaše IDE i agent. Napíšete $data->emial a chybu máte ještě před spuštěním.

Stejná péče prostupuje celým frameworkem: array shapes, class-string<T>, positive-int, non-empty-string. Všechny balíčky Nette procházejí PHPStanem na plný level 8, ne jen části, ne s hromadou výjimek. Stavíte na základu otypovaném tak důsledně, jak to jen jde. A na dobře otypovaném základu se snadno staví dobře otypovaná aplikace.

Celý příběh najdete v článku AI agent je tak dobrý, jak dobré jsou vaše typy.

Celé je to o smyčce

Agent je přesně tak dobrý, jak dobrá je zpětná vazba, kterou dostává. A ta nejlepší je smyčka. Něco napíše, spustí statickou analýzu a testy, přečte si výsledek, opraví chybu a zkusí to znovu. Napiš, ověř, oprav, opakuj. Tomuhle cyklu se říká agentní smyčka a je to okamžik, kdy se z generátoru textu stane něco, co kód opravdu doladí do funkčního stavu.

Nette mu dá do ruky všechno, co k tomu potřebuje:

  • PHPStanrozšířením pro Nette, které analyzátor naučí specifika frameworku: ví, že $this['menu'] je vaše MenuControl, odvodí typ prvku z addText(), rozumí #[Inject]
  • Nette Tester na testy. Zatím žádné nemáte? Nechte si je od agenta vygenerovat jako úplně první věc, protože bez nich nemá jak poznat, že něco rozbil.
  • Automatický lint PHP, Latte, NEON, JSON a JavaScriptu po každé jednotlivé úpravě, takže rozbitá šablona se nikdy nedostane až do prohlížeče

Vaše aplikace, ne odhad

Požádejte libovolnou AI, ať „vygeneruje entitu pro tabulku product“, a bude vaše sloupce hádat podle vzorů, které pochytila při trénování. Jenže sloupec s cenou se u vás jmenuje unit_price a je tam currency_id, o kterém jste se nezmínili.

MCP Inspector hádání odstraní. Je to server, díky kterému se agent podívá přímo do vaší běžící aplikace: na služby v DI kontejneru, na skutečné schéma databáze, na routy, na logy Tracy. Všechno je výhradně pro čtení a funguje to v každém editoru, který podporuje Model Context Protocol: Claude Code, Cursor, VS Code s Continue a další.

Mění se i ladění. Místo kopírování stack trace do chatu řeknete „koukni do logu a zjisti, co se rozbilo“, a agent si výjimku přečte sám.

Agent, který zná Nette

Plugin pro Claude Code dodá to, co ve vašem kódu nikde nenajde: jak se věci v Nette dělají. Celá rodina skills pokrývá architekturu, formuláře, databázi, komponenty, bezpečnost, Latte, NEON a další. Každý se zapne sám, jakmile na jeho téma přijde řeč. Zeptáte se na validaci formuláře a naskočí skill pro formuláře. Zeptáte se na BlueScreen a naskočí ten pro Tracy.

Výsledek vypadá, jako by ho psal někdo, kdo Nette dělá roky, ne jako obecné PHP poslepované z útržků.

Jak začít

Celé nastavení zabere zhruba deset minut:

  1. Nainstalujte si AI nástroj, doporučujeme Claude Code
  2. Přidejte plugin pro Nette, aby agent znal framework
  3. Nastavte MCP Inspector, aby znal vaši aplikaci

Pak už jen popište, co chcete, zavřete agenta do smyčky a nechte ho pracovat. Až budete chtít z agenta vytěžit víc, přečtěte si Vibe coding v praxi.

Když má s AI pracovat i vaše aplikace

Celá tahle stránka je o AI, která pomáhá psát kód. Uvnitř vaší aplikace ale může AI dělat docela jinou práci: shrnout článek, roztřídit příchozí dotazy, vytáhnout z faktury údaje do databáze.

Na to je AI Access, PHP knihovna s jedním rozhraním pro OpenAI, Claude, Gemini, DeepSeek i Grok. Přepnutí mezi nimi je změna jediného řádku. A protože nemá žádné závislosti, nepřitáhne vám do projektu SDK od výrobce ani konflikty verzí.