COMPOSER: PHP BAĞIMLILIK YÖNETIMI AÇIKLANDI
Composer, bağımlılıkları verimli bir şekilde yöneterek PHP'de devrim yarattı
Composer, PHP'de bağımlılık yönetimi için bir araçtır. Geliştiricilerin PHP projelerinin dayandığı kütüphaneleri yönetmelerini sağlayarak geliştirme, test ve üretim ortamlarında tutarlı sürümler sağlar. 2012 yılında Nils Adermann ve Jordi Boggiano tarafından tanıtılan Composer, kod kütüphanelerinin nasıl yüklendiğini, güncellendiğini, otomatik olarak yüklendiğini ve sürüm kilitlendiğini basitleştirerek PHP topluluğunda tekrar eden bir sorunu çözmüştür.
Composer'dan önce, PHP geliştiricileri genellikle kütüphaneleri manuel olarak indirmek, dahil etmek ve uyumluluk sorunlarını kendi başlarına çözmek zorundaydı. Bu durum, ortamlar arasında farklı kurulumlara, bağımlılık cehennemine ve verimsiz geliştirme iş akışlarına yol açıyordu. Composer, JavaScript için npm veya Ruby için Bundler gibi diğer ekosistemlerdeki araçlara benzer şekilde, bağımlılık yönetimine standartlaştırılmış ve otomatikleştirilmiş bir yaklaşım getirerek oyunu değiştirdi.
Composer, bir projenin bağımlılıklarını ve kısıtlamalarını listeleyen bir bildirim olan composer.json dosyasıyla çalışır. Bir geliştirici composer install veya composer update komutunu çalıştırdığında, Composer belirtilen paketlerin uygun sürümlerini Packagist'ten (Composer'ın varsayılan paket deposu) alır ve bunları vendor klasöründeki standart bir yapıya yükler.
Composer'ın Temel Yetenekleri
- Bağımlılık Çözümlemesi: Gerekli kütüphanelerin hangi sürümlerinin birbiriyle uyumlu olduğunu otomatik olarak belirler.
- Otomatik Yükleme: PSR-4 standartlarına dayalı bir otomatik yükleyici sağlayarak özel ekleme veya gereksinim ihtiyacını azaltır.
- Sürüm Kilitleme:
composer.lockdosyası, belirli sürümleri kilitleyerek geliştirme, kalite güvencesi, hazırlık ve üretim aşamalarında tutarlılık sağlar. - Komut Dosyaları: Kurulum olaylarından önce veya sonra çalıştırılacak özel komut dosyalarını destekler.
- Genel Paketler: Geliştirme araçlarının (örneğin PHPUnit, PHP_CodeSniffer) genel kurulumunu destekler.
Composer, PHP uygulama çerçevelerinin modüler ve paket odaklı olmasının önünü açtı. Symfony, Laravel, Drupal 8+ ve diğer modern çerçeveler, ekosistemlerinin mimarisi için Composer'a büyük ölçüde güvenmektedir.
Sonuç olarak Composer, daha iyi bağımlılık hijyeni sağlayarak, anlamsal sürümlemeyi destekleyerek ve Packagist aracılığıyla yeniden kullanılabilir, paylaşılabilir bir kod kültürünü teşvik ederek PHP geliştirmeyi profesyonelleştirdi.
Composer'ın PHP ekosistemi için önemi abartılamaz. 2012'de piyasaya sürüldüğünde PHP, web geliştirme için en yaygın kullanılan programlama dillerinden biri haline gelmişti, ancak üçüncü taraf kütüphaneleri yönetmek için merkezi ve topluluk odaklı bir sistemden yoksundu. Geliştiriciler genellikle kodu kopyalayıp yapıştırmak veya PEAR (PHP Eklentisi ve Uygulama Deposu) gibi eski araçlara güvenmek zorunda kalıyordu. Composer bu anlayışı kökten değiştirdi.
1. PHP Ekosisteminin Birleştirilmesi: Composer, geliştiricilerin bağımlılıkları hassas bir şekilde belirlemesini, paylaşmasını ve çözmesini sağladı. Yaygın Composer desteğiyle PHP projeleri, kurulumlar arasında daha sürdürülebilir ve tutarlı hale geldi.
2. Açık Kaynak İş Birliğinin Kolaylaştırılması: Composer ve varsayılan deposu Packagist, kod paylaşımı ve açık kaynaklı projelere katkıda bulunma engellerini azalttı. Geliştiriciler, her yeni projede tekerleği yeniden icat etmek yerine, uygulamaları yüzlerce yüksek kaliteli, topluluk tarafından yönetilen paketten oluşturabildiler. Bu, ekosistem genelinde inovasyonu ve üretkenliği hızlandırdı.
3. Modern Mimariyi Destekleme: Composer, ayrıştırılmış, modüler kod tabanları aracılığıyla temiz mimariyi teşvik etti. Laravel gibi çerçeveler, Composer'ı yapılarına derinlemesine yerleştirerek, doğru bağımlılık enjeksiyonunu ve endişelerin ayrılmasını güçlendirdi. Bu, PHP geliştirmenin kurumsal düzeyde yazılım mühendisliğinde görülen en iyi uygulamalarla daha yakın bir uyum sağlamasını sağladı.
4. En İyi Uygulamaların Merkeziyetsizleştirilmesi: Composer, adlandırma kuralları, otomatik yükleme ve kod yapısı konularında en iyi uygulamaları teşvik ederek PSR (PHP Standartları Önerisi) hareketinin ortaya çıkışını hızlandırdı. PHPStan, Psalm ve PHP_CodeSniffer gibi araçlar Composer odaklı hale gelerek Composer etrafında statik analiz ve kalite güvence araçlarından oluşan bir ekosistem oluşturdu.
5. Endüstriyel Benimseme: Composer ile PHP geliştirme, büyük işletmeler ve SaaS platformları için daha uygulanabilir hale geldi. Bağımlılıkları sabitleme ve denetleme, güvenli güncellemeleri uygulama ve tekrarlanabilir derlemeler çalıştırma yeteneği, Composer'ı DevOps süreçlerinin ve CI/CD süreçlerinin kritik bir parçası haline getirdi.
Composer olmasaydı, PHP muhtemelen bugün olduğu modern dile dönüşemezdi. Composer, genellikle "betik" dil ortamı olarak görülen ortama düzen, yapı ve profesyonel araçlar getirerek PHP'nin Python, Node.js ve Ruby kullanımının arttığı bir dünyada rekabetçi kalmasına yardımcı oldu.
Composer'ın etkisini tam olarak anlayabilmek için, iç işleyişini ve bileşenlerini anlamak önemlidir. Composer, temel olarak bir komut satırı arayüzü ve PHP'de yerleşik bir bağımlılık çözümleme sistemi aracılığıyla çalışır. Sürecin perde arkasında nasıl ilerlediği aşağıda açıklanmıştır:
1. composer.json Dosyasını Yönetme
composer.json dosyası, Composer destekli her projenin merkezinde yer alır. Proje adı, açıklamalar, bağımlılıklar, gerekli PHP sürümleri, otomatik yükleme yapılandırması ve isteğe bağlı betikler gibi meta verileri içerir. Örnek:
{"require": {"monolog/monolog": "^2.0"},"autoload": {"psr-4": {"App\": "src/"}}}2. SAT Çözücü ile Bağımlılık Çözümleme
Composer, composer.json dosyasındaki tüm kısıtlamaları ve bağımlılıklardan kaynaklanan geçişli gereksinimleri göz önünde bulundurarak, kurulacak tutarlı bir paket sürümleri kümesi belirlemek için SAT (Boolean Satisfiability Problem) çözücü algoritmasının bir sürümünü kullanır.
Çözüldükten sonra, Composer son sürümleri ve kaynak konumlarını composer.lock'a yazar. Bu, farklı ortamlarda kesin kurulumlar sağlar.
3. Kurulum ve Satıcı Otomatik Yükleme
Paketler Packagist'ten (veya özel depolardan) indirilir ve vendor klasöründe saklanır. Composer, vendor/autoload.php dosyasında dinamik olarak verimli bir PSR-4 tabanlı otomatik yükleyici oluşturur ve bu da tanımlanmış ad alanlarındaki tüm sınıflara anında erişim sağlar.
4. Bağımlılıkları Güncelleme
composer update komutunu çalıştırmak, tüm paketleri kısıtlamaların izin verdiği en son sürümlere günceller. Bu, composer.lock komutunu değiştirir. Bu arada, composer install komutu, composer.lock komutunda kilitlenen paketlerin aynısını yükleyerek tekrarlanabilir derlemeler sağlar.
5. Komut Dosyası ve Kancalar
Composer, kurulum/güncelleme öncesi ve sonrası komut dosyalarını destekler. Örneğin, kurulumdan sonra otomatik testler çalıştırmak için:
"scripts": {"post-install-cmd": ["phpunit"]}Komut dosyaları, kabuk komutlarını, Composer eklentilerini veya PHP geri çağırmalarını çağırarak derleme, dağıtım veya doğrulama iş akışlarına esneklik katar.
6. Özel Depolar ve Eklentiler
Packagist varsayılan depo olsa da, özel veya kurumsal depolar tanımlanabilir. Ayrıca, Composer varsayılan davranışı değiştirebilen, yeni komutlar ekleyebilen veya dahili süreçleri genişletebilen eklentileri destekler.
Composer, temel olarak kod tabanınız ile kullandığı bağımlılıklar arasında bir sözleşme uygulayıcısı olarak çalışır. Net sınırlar, güvenilir kurulumlar ve otomasyon desteğiyle Composer, PHP bağımlılık yönetimine mühendislik disiplini getirmiş ve modern PHP projelerinde vazgeçilmez olmaya devam etmektedir.