Že je AI mým každodenním pomocníkem, to ani nemá smysl zmiňovat. Já už si dnes efektivní práci bez jazykových modelů představit neumím. Jako vývojář tyto nástroje samozřejmě používám v trochu jiném nastavení než marketéři nebo SEO specialisté. Nejčastěji pro dílčí úlohy, dost často bez orchestrace několika agentů najednou. Nad tím, co předávám klientům, si stále udržuju kontrolu.
Vždycky mě hrozně pobaví články nebo přednášky na téma „vyměnil jsem závislost na neschopném programátorovi za závislost na AI“. Dost často ale sklouzávají jen k tomu, že výstupem agentních úloh je statický web na frameworku Astro. Nic proti tomu, sám mám statických webů několik, většinou na platformě Hugo. AI mi s nimi samozřejmě pomáhá.
Jenže AI už dávno není jen generátor HTML výstupů. Současné modely bez problémů zvládají obsluhovat i redakční systémy jako jsou Drupal nebo WordPress. Stačí si vybrat jak. Méně efektivní cesta je, že za vás klikají v prohlížeči. Smysluplnější je předání přístupů ke kódu, k serveru/hostingu a do administrace. WP i Drupal mají ovládání přes příkazový řádek (WP-CLI a Drush), stejně jako REST API, přes které lze komfortně pracovat s obsahem, což šetří drahocenné tokeny.
Zadání: migrace Drupal 7 na Drupal 11 s novým designem
Na dva víkendy jsem sedl k počítači s tím, že schopnosti AI jsou již dostatečné, aby zvládla pokročilejší úlohu spojenou s ovládáním redakčních systémů. Ve frontě jsem měl dlouhodobě odkládaný úkol – migraci webu z již nepodporovaného Drupalu 7 na Drupal 11.
Nepustil jsem se do ní dříve, protože daný web je skoro mrtvý. Zatímco před osmnácti lety mi vydělával 15 až 20 000 Kč měsíčně, postupně to klesalo, můj zájem o něj spolu s tím upadal a poslední ránu mu zasadilo právě AI – web je postavený na dotazech, které vám AI dneska rovnou zodpoví. Zkrátka ideální kandidát na pokusy.
Původní stav: Drupal 7, ke kterému se web dostal po upgradech ze starších verzí. Nebyl v úplně top kondici. Spousta zbytečných modulů, za ty roky jsem na něm vystřídal řadu způsobů práce s obrázky a jejich vkládání do obsahu. Taky zde byl nepořádek ve štítcích, spousta jich obsahovala jediný článek. Designově to bylo poplatné době vzniku a navíc web ani nebyl responzivní.
Požadovaný cílový stav:
- migrace obsahu ze staré instalace do nového Drupalu z mojí instalační sady
- přenesení obrázků bez ohledu na způsob vložení do současné Drupal Media knihovny
- nový responzivní design s důrazem na Core Web Vitals a přístupnost
- doplnění vizitek autorů a strukturovaných dat do článků
- zredukování štítků a přeskupení článků k těm zbylým
- doplnění popisků ke štítkům
- udržení čtenáře, přidání souvisejícího obsahu na základě štítků
Kdybych měl neomezeně volného času, tak bych si rád celou migrací prošel ručně. Ostatně, s migracemi, upgrady Drupalu nebo se změnou na jiný redakční systém mám bohaté zkušenosti. Jenže čas není, i proto ten web tak dlouho stál na odstavné koleji.
Tip: Mrkněte, jak jsem migroval Drupal 7 na Backdrop, Drupal na WordPress, nebo Drupal mezi dvěma generacemi CMS.
Použité nástroje – žádný Codex ani Claude
Bral jsem to celé jako experiment, takže jsem si přidal ještě jeden úkol. Obejít se bez dvojice hlavních AI. Kromě několika málo obrázků, které jsem na konci vygeneroval v ChatGPT, jsem tu nevyužil nic od OpenAI ani Anthropicu.
Asi dva měsíce si platím OpenCode Go coby zálohu pro případ, kdy vyčerpám pětihodinové okno ve svém Codexu a potřebuji přesto rychle ještě něco s AI vyřešit. Má to výhodu. Za malý paušál je zde celá plejáda modelů, které mohu v rámci kreditu využít. Samozřejmě, některé mi předplatné vyčerpají rychleji než jiné.
Já sáhl primárně po modelu DeepSeek V4.1 Flash. V rámci předplatného má bohatou rezervu a podle recenzí by měl být již dostatečně schopný splnit moje zadání.
Trochu jsem si to zkomplikoval volbou harnessu. Protože jsem migraci nezvládl v rámci prvního víkendu (prostě jsem u ní neseděl osm hodin denně), tak jsem se trefil do změn v OpenCode, které způsobily, že původní harness s touto službou přestal fungovat.
Začal jsem totiž s GitHub Copilotem, který jsem díky BYOK (přines si svůj klíč) propojil s OpenCode. Vše fungovalo na jedničku, dokud OpenCode nezačalo vyžadovat posílání speciální hlavičky s každým požadavkem, což zatím v tomto nástroji nejde nastavit.
Mezitím se objevila kromě klasické terminálové aplikace pro OpenCode i desktopová, takže jsem přesedlal a zhruba polovinu práce dokončil s ní.
Rozběhnutí vývojové verze webu a migrace obsahu
Přípravu nové vývojové kopie z vlastní instalačky na počítači a její vystavení na stage VPS mám naskriptovanou. Dokonce ještě z doby bez AI. Stejně jako doplnění projektu na vlastní Gitea a přípravu deployment procesu. Na toto jsem tedy AI nevyužil, je to otázka jednoho příkazu a následné rychlé kontroly, že vše běží.
Původní web jsem nechal na svém místě na serveru. Používám Virtualmin, každý projekt tam má svoje oddělené SSH, ke kterému se mohu připojit přes klíč bez zadávání hesla. A tento přístup, bez uvedení hesla, jsem AI předal do instrukcí.
Prvním úkolem bylo vytvoření plánu pro migraci. Požadoval jsem přenesení všech typů obsahu do správných nových entit (jen články a stránky), sjednocení obrázků do Drupal Media Library, přenesení autorů tak, že jim vzniknou zablokované uživatelské profily, ale články s nimi budou spárované. Stejně tak bylo potřeba přenést strom kategorií (celkem čtyři) a štítků (nižší desítky).
Normálně bych si na toto nachystal v původním webu export do XML pomocí modulu Views data export. DeepSeek mi ale tvrdil, že jej nepotřebuje. Vše si poskládal z migračního modulu se všemi jeho výhodami a pro data si sáhl do databáze původního webu.
Obsah i obrázky se přenesly na první dobrou. Několik chyb jsem ale našel:
- Všechno bylo spárováno na jediného existujícího uživatele v nové instalaci
- Všechny články měly stejné datum
- Kategorie a štítky neměly přenesené URL
Nebyl to až tak velký problém, spravil to další prompt po rychlé kontrole webu. Tu jsem prováděl ručně, orchestraci AI agentů, kdy jeden by kontroloval druhého, jsem nevyužil. A je také pravda, že na datum a URL aliasy u štítků jsem v původních instrukcích žádný důraz nekladl.
Když jsem se koukal, jak DeepSeek migraci nachystal, měl bych k tomu asi jednou výtku. Přečetl si původní databázi a do PHP kódu si natvrdo připravil pole s URL adresami a názvy uživatelských účtů autorů. Být ten web výrazně větší, úplně by to nefungovalo dobře.
Nebyla by orchestrace agentů a automatická kontrola lepší, než abych proseděl část víkendu u počítače? Dost možná. Na druhou stranu, zadal jsem vždy velký blok práce a hrál u toho hru.
Příprava nového designu
Původní web vypadal dnes již žalostně. Chtěl jsem vytvořit modernější řešení, bez frameworku, s responzivním designem a hlavně důrazem na rychlostní metriky Core Web Vitals a na přístupnost.
Zde jsem kromě DeepSeeku použil ještě Kimi K3 a GLM-5.3. Nakonec mě ale stejně zaujal nejvíce výstup od DeepSeeku. Design jsem nechal navrhnout pro hlavní typové stránky, tedy:
- Homepage
- Výpis kategorie nebo štítku
- Detail článku
- Stránka typu O nás
AI mi je vygenerovala do samostatné složky jako klasické soubory HTML, CSS a JS. Následně jsem požádal o vytvoření tématu vzhledu pro Drupal podle této předlohy spolu s žádostí, aby se využilo systém Single Directory Components. Podařilo se to velmi dobře a rychle, rozhodně rychleji, než kdybych to měl kódovat ručně.
Doladění vzhledu a obsahové struktury
Někdy před dokončením vizuální stránky jsem musel přepnout z GitHub Copilota na OpenCode Desktop. Narazil jsem na problém s gitem. Copilot si totiž vytvořil samostatnou větev, která nebyla ve složce s projektem, ale bokem. OpenCode na to přišel a dovedl s ní pracovat. Před spuštěním projektu jsem to nechal sjednotit, protože mám pocit, že Copilot už nebudu potřebovat.
Vizuální nedostatky, které jsem řešil, způsobil asi málo podrobný prompt. Některé části stránek tak zůstaly v nakódovaném tématu vzhledu přímo v šabloně a nepřebíraly obsah z administrace (popisek kategorií, vizitka autora). Jiné zase nevypadaly úplně dobře (stránkovač, výsledky hledání). Opět se to opravilo dalšími žádostmi na AI.
Naopak, co zafungovalo bez většího zásahu, bylo sjednocení štítků. AI navrhlo, co sloučit a co smazat bez náhrady. Zapojil jsem do hry i data z Plausible a Google Search Console, byť to bylo spíše jen cvičně. Miniaturní návštěvnost webu už více klesnout nemůže.
Kolik to stálo?
Nepřekročil jsem ani v nejmenším limity OpenCode Go, tedy měsíční desetidolarové předplatné. Měsíční limit jsem na tomto projektu spálil jen ze 6 %. Statistiky, které OpenCode ukazuje ve své nástěnce, hovoří o 255 M tokenech a 1158 tokenech. Ale podle mě nejsou úplné. OpenCode předělával v průběhu září své rozhraní a nevidím historii dozadu.
Codex vs. GitHub Copilot vs. OpenCode Desktop
Velmi se nabízí srovnání Codexu s GitHub Copilotem a OpenCode Desktopem. Jak jste asi pochopili, TUI nástroje v terminálu mě příliš neoslovují. Codex je můj primární nástroj pro většinu klientských úkolů i pro vlastní projekty. Používám jej v kombinaci s klasickým vývojovým prostředím, v tomto případě s PhpStorm.
Na přelomu roku jsem si přestal platit GitHub Copilot. Když jsem zjistil, že jeho aplikace umí pracovat s klíči i mimo jeho předplatné, tak jsem ji na chvíli nainstaloval a používal s lokálními modely a právě s OpenCode. Škoda, že si nyní nerozumí.
Funkčně mi Copilot i Codex přijdou podobné, líbí se mi hlavně možnost označit kus stránky ve vestavěném prohlížeči a připomínkovat konkrétní prvek. Tohle OpenCode Desktop zatím postrádá, stejně jako snadné propojování na MCP servery, které jsou v Codexu. Ovšem beru ji stále jako zálohu a alternativu a jako taková funguje dobře.
DeepSeek vs. OpenAI
Kdybych nebyl lakomý, zvýšil bych si předplatné u OpenAI, místo tarifu Plus bych si pořídil Pro a měl bych výrazně větší prostor pro manévrování. Ale alternativní modely mě baví, hraju si s nimi i lokálně a tak zatím funguji s ChatGPT Plus s OpenCode Go. A kupodivu mi to vlastně velmi dobře stačí. Celkové náklady jsou 20 + 10 dolarů, což je úplně v pohodě.
DeepSeek je na programátorské úkoly docela schopný. Neřeším teď úplně eleganci vygenerovaného kódu, k cíli to většinou vede a ne špatným směrem. Verze 4.1 Flash je navíc velmi rychlá a nepozoruju, že bych na výsledky čekal výrazně déle než u modelů od OpenAI. A pak ta obrovská zásoba requestů, které mohu v rámci OpenCode Go využít, není k zahození.
A kde jsem nechal designové nástroje? V únoru jsem zmiňoval Pencil.dev, nyní už Pen.dev, s jehož pomocí člověk rychle navrhne design a nemusí čekat na iterace od designéra. Po pravdě, hraju si s ním pro jiný svůj projekt, ale u Backup HowTo jsem design nepotřeboval vyšperkovat. Chtěl jsem cokoli lepšího než původní vzhled.
Zvládne tedy AI migraci blogu Drupalu?
Ověřil jsem si, že AI dovede v Drupalu nastavit prakticky cokoliv. Některé věci jsem ale nastavil sám – třeba pravidla pro generování URL aliasů, napojení na Mailtrap nebo modul pro sitemapu. Myslím si, že je vhodné zvažovat, co je rychlejší svěřit AI a co zpracovat sám. Vykonání instrukcí a přemýšlení AI přeci jenom zabere čas. A pokud něco zvládám opravdu rychle, nedává smysl instruovat další nástroj.
S výsledkem jsem spokojen. Web vypadá výrazně lépe než dříve. Z pohledu administrace je to nebe a dudy, komfort práce v Drupalu 11 je o míle dopředu než by v sedmičce. Nějaké mouchy se ještě najdou, třeba v designu a mezerování některých prvků. Sám jsem zvědav, jestli mě to nenakopne se o web postarat trochu více po obsahové stránce a třeba jej znovu oživit.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Přidat komentář