Co je to Composer a proč jej jako PHP programátor potřebujete

Ač je mi to s podivem, stále existuje docela velké procento lidí, kteří staví weby s PHP, ale nepoužívají nástroj Composer. Doba se mění, je vhodné se přizpůsobit okolnímu vývojářskému světu a nebát se. Composer může být skvělý parťák a pomocník pro rychlejší vývoj.

Pořád stavíte webové aplikace a stránky starým dobrým způsobem s index.php a voláním include/require, kterým poskládáte dohromady sadu nejrůznějších dílčích PHP skriptů? Gratuluji, pak jste buď boomer nebo dinosaurus.

Vážně, nic ve zlém. Ale buď jste zaspali dobu, nebo jste tak dlouho odkládali rozhodnutí se na ten Composer podívat, že jste se najednou ocitli na vedlejší koleji. Nebo už vám někdo přehodil výhybku a zatím jste to ještě nezjistili.

Co je to Composer? Stručně řečeno, Composer je nástroj pro správu závislostí balíčků a knihoven v PHP. Podobně jako jsou různé balíčkovací systémy pro Linux. Pomůže vám instalovat do projektu kód třetích stran, snadno jej udržovat a aktualizovat. První verze se objevila v roce 2012 a od té doby se stala defacto standardem ve světě PHP vývoje.

Nevzpomínám si přesně, kdy jsem na Composer narazil poprvé, bylo to zřejmě v počátcích mého tykání si se světem PHP frameworků CodeIgniter (který to tehdy nepodporoval) a Symfony (která na tom byla postavena). Asi v roce 2014, dva roky po vydání první verze Composeru.

A jak mě to tehdy sralo! Do snadno pochopitelného systému mi to vnášelo chaos jakýmsi autoloadingem, nutností používat příkazový řádek tam, kde jsem dříve prostě něco nakopíroval a includoval. Teď do toho začala být spousta užitečného kódu použitelná jenom v projektech s Composerem, no co vám budu říkat. Peklo na zemi.

Jenže celé je to o pochopení, kde vám ten nástroj pomůže. Nebo o přizpůsobení se současnému vývojářskému světu. Jak chcete. Ve chvíli, kdy jsem začal tvořit produkty založené na Composeru, pochopil jsem, že díky němu mám ve všem nějaký systém. Bolelo to, ale dnes jej beru jako takového projekťáka, který dohlíží, abych nenadělal binec.

S čím vám Composer pomůže?

Instalace balíčků. Velmi rychle stáhnete a nainstalujete kód, který už někdo vymyslel a začleníte jej do svého projektu. Ať je to celý framework nebo jen knihovna. Mrkněte na Packagist, oficiální repozitář Composeru. Hledáte PHP knihovny pro napojení na banky, platební brány, účetnictví, dopravce, emailingy a jiné služby? Pravděpodobně je zde naleznete.

Image
portál Packagist
Portál Packagist s databází knihoven pro Composer

Správa závislostí. Tak jako v Linuxu. Jeden kus kódu potřebuje ke svému fungování nějaký další. Je efektivnější se podělit o zdroje než psát nějaký velký blok kódu pokaždé znovu. Při instalaci knihovny Composer automaticky stáhne a začlení do projektu další věci, které požadovaná knihovna potřebuje.

Autoloading. Zapomeňte už na include a require. Když budete dodržovat správný systém pojmenování souborů v kódu, pak vám stačí dát na začátek skriptu napojení na autoloading knihovnu a vše ostatní se už bude samo načítat dle názvu volaných tříd:
<?php require 'vendor/autoload.php'; ?>

Aktualizace jedním vrzem. Projekt vám nějakou dobu běží, a protože používá knihovny třetích stran, je dobré je čas od času aktualizovat. Nemusí jít nutně o opravy zabezpečení. Ale třeba reakce na změněné API systémů, které knihovna s vaší aplikací propojuje. V Composeru snadno spustíte aktualizace jedné knihovny nebo všech balíčků jediným příkazem.

Kompatibilita. A když jsme u těch aktualizací a závislostí. Composer také hlídá, jestli mezi sebou jednotlivé verze balíčků hrají. Buď stáhne odpovídající aktualizace nebo pohlídá, abyste nedošli do nefunkční kombinace různých verzí.

Jak pracovat s Composerem a PHP bez frameworku?

Tohle asi bude bolavá část především pro vývojáře, kteří fungují ve Windows (a zatím s Composerem pořád nezačali). Musíte na příkazový řádek. Opustit komfort svého editoru. Ale možná taky ne. Pokud máte něco moderního, jako je Visual Studio Code, editor Zed či větší vývojové prostředí, určitě v něm příkazový řádek máte (označený jako Terminál).

  1. Ve složce, kde budete mít nový projekt, zavolejte příkaz composer init. V interaktivním rozhraní příkazového řádku zadávejte a potvrzujte dotazy. Až se vás zeptá na instalaci konkrétního balíčku, zadejte no.
  2. Vytvořte soubor index.php, kterému na začátek vložíte napojení na autoloader:
    <?php require 'vendor/autoload.php'; ?>
  3. Nyní si na Packagistu najděte knihovnu, kterou chcete do projektu začlenit, vykopírujte si příkaz ve tvaru composer require výrobce/balíček a v příkazovém řádku jej spusťte.
  4. Ve svém index.php pak už pokračujte zavoláním třídy z příslušného balíčku a jeho použitím, ideálně dle poskytnuté dokumentace. Každý ji přece píšeme, že.

V případě, že stavíte projekt na nějakém frameworku, pak asi začnete tím, že vytvoříte nový projekt zavoláním příkazu composer create-project s vytvořením kostry pomocí nějaké šablony. Takto začíná práce se Symfony, Drupalem, Laravelem a vlastně je to i první krok pro zmíněný CodeIgniter v aktuální verzi.

Nevýhody Composeru?

„Honzo, to je blbost. Nepoužívám žádné frameworky a podobný smetí. Já si chci psát vlastní čistý kód a nebýt na ničem závislý.“

Povídal mi nedávno kamarád, že je zcela proti frameworkům i Composeru, nedá dopustit na vlastní kód. Inu, v něčem má samozřejmě pravdu, ale řekl bych, že v drtivé většině zakázek, se kterými se každý z nás setkává, nedává psaní všeho od A do Z smysl. Z hlediska efektivity, ceny projektu, času i radosti z práce samotné. Chcete znovu vytvářet kolo?

Pár nevýhod Composeru ale dohromady dáme. Jako první bych zmínil nasazení a velikost projektu. Tím, jak je kód členěný do spousty souborů kvůli autoloadingu pak zpravidla obsahuje násobně větší množství souborů než postaru psaný web s několika obřími skripty. A kopírovat spoustu malých souborů na FTP zabere hodně času. Jenže, FTP by mělo konečně z hostingů zmizet. Byť si to ty nejpopulárnější české nemyslí.

Závislost na externích knihovnách. Samozřejmě, v momentě, kdy do projektu začleníte třetí kód, musíte si být velmi jistí tím, že nepřestane být v krátké době udržován. Případně, že jej zvládnete sami upravit. Na nové verze systémů či jen pro novou verzi PHP.

Pomalá aktualizace a spotřeba paměti. Toto byl problém hlavně jedničkové řady Composeru, který spotřeboval velké množství operační paměti, pokud si kvůli aktualizaci většího projektu načítal do paměti všechny možné závislosti. Dost jsem s tím bojoval u projektů, které nebyly nasazeny přes Git, ale přímo na hostingu s omezenou SSH konzolí. Častokrát mi server běžící Composer prostě odstřelil. Poslední dobou se to už nestává, Composer je optimalizovaný a třeba na Websupportu funguje u větších projektů i na základní konzoli s 256 MB RAM.

Soubory composer.lock a composer.json

V projektu postaveném na Composeru najdete kromě složky vendor, do které jsou kopírovány kódy třetích stran i dva soubory.

  • composer.json – definuje závislosti projektu a jejich požadované verze. Je to hlavní konfigurační soubor, ve kterém určujete, které balíčky se mají použít a jaké jsou jejich minimální a maximální verze. Můžete jej případně ručně editovat.
  • composer.lock – pracovní soubor Composeru, do kterého ukládá přesné verze balíčků, které byly nainstalovány při spuštění instalačního či aktualizačního příkazu. Cílem je zajistit konzistentní prostředí. Pokud někdo jiný spustí příkaz composer install na jiném počítači nebo serveru, Composer použije přesně stejné verze balíčků uvedené v tomto souboru. Neměli byste jej nijak editovat.

Výběr příkazů pro Composer

Začít je jednoduché. Vybral jsem několik příkazů Composeru, které vám pomohou v začátcích.

  • composer init – spustí inicializaci nového projektu. V praxi spíše nahradíte inicializací celého frameworku dle jeho dokumentace.
  • composer require výrobce/balíček – přidá a nainstalujte balíček do projektu. Přepínač --no-install jen přidá záznam do composer.json, ale nic nestahuje. Hodí se pro postupné přidání věcí k instalaci.
  • composer update – aktualizuje balíčky v projektu
  • composer install – provede instalaci dle záznamů v composer.json. Přepínač -W stáhne automaticky všechny potřebné závislosti, pokud se nějaké nové objeví. Přepínač --ignore-platform-reqs využijete v případě, kdy vám nesedí verze PHP, ale přesto chcete instalaci spustit.
  • composer remove výrobce/balíček – odebere balíček z projektu
  • composer show – zobrazí nainstalované balíčky
  • composer outdated – zobrazí seznam dostupných aktualizací
  • composer clear-cache – vymaže dočasné soubory Composeru, což se hodí při některých problémech s instalací

Další příkazy a jejich přepínače samozřejmě najdete v dokumentaci.

Jak nainstalovat Composer samotný?

Na Macu instaluji Composer pomocí nástroje Brew. V Linuxu je možné využít balíčkovací systémy příslušné linuxové distribuce. Ve Windows a jinde postupujte dle instrukcí. Stáhnete si soubor composer.phar, který pak voláte příkazem php composer.phar a za ním už příkazy, které znáte z předchozího textu.

Composer a redakční systémy

U Drupalu je to jasné. Přestože pořád najdete ke stažení zazipovaný balíček, který stačí rozbalit na hosting, doporučený způsob instalace je právě přes Composer. Důvod je prostý. Některé moduly vyžadují knihovny třetích stran a Composer je efektivní způsob, jak je tam dostat.

WordPress? Mrkněte na projekt WordPress Packagist. Ještě jsem jej v praxi neměl možnost nasadit, objevil jsem jej teprve nedávno, ale docela mě to zaujalo. U větších projektů na WordPressu může dávat velký smysl.

Tagy

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

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.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru