Composer Nedir ve Neden Kullanmalısınız?

Composer, PHP dünyasının en popüler bağımlılık yöneticisidir. Projenizde ihtiyaç duyduğunuz kütüphaneleri composer.json dosyasında tanımlayarak tek bir komutla kurmanıza, sürüm kontrolü yapmanıza ve otomatik autoload oluşturmanıza olanak tanır. Geleneksel manuel indirme yöntemlerine kıyasla, Composer %40 daha hızlı kurulum süresi ve %30 daha az sürüm uyumsuzluğu sağlar.
Özellikle VDS sunucu paketleri üzerinde çalışan büyük ölçekli uygulamalarda, bağımlılıkların tutarlı bir şekilde yönetilmesi, uygulama kesintilerini ve beklenmedik hataları önler. Ayrıca, Composer sayesinde semantic versioning (semver) prensiplerine uygun sürüm kısıtlamaları belirleyebilir, böylece güvenlik yamalarını kaçırmazsınız.
Composer Kurulumu ve İlk Yapılandırma
Composer'ı kurmak için öncelikle sunucunuzda PHP 7.2 veya üzeri bir sürümün yüklü olması gerekir. curl -sS https://getcomposer.org/installer | php komutu, Composer'ı composer.phar dosyası olarak indirir. Daha kalıcı bir kurulum için bu dosyayı /usr/local/bin/composer yoluna taşıyıp çalıştırılabilir yapabilirsiniz.
Kurulumdan sonra proje kök dizininizde composer init komutunu çalıştırarak interaktif bir şekilde composer.json dosyasını oluşturun. Bu dosyada paket adı, yazar, lisans ve en önemli kısım olan require bölümü yer alır. Örneğin, Laravel 10 projesi için "laravel/framework": "^10.0" gibi bir satır eklenir.
Bağımlılık Tanımlama: require ve require-dev
Composer iki ana bağımlılık alanı sunar: require ve require-dev. require kısmı, uygulamanın üretim ortamında kesinlikle ihtiyaç duyduğu paketleri içerir. require-dev ise geliştirme ve test aşamalarında kullanılan, üretimde gerekmeyen araçları (PHPUnit, PHP_CodeSniffer vb.) barındırır.
Bu ayrım, WordPress hosting gibi paylaşımlı ortamlarda paket çakışmalarını önler ve deployment sürecinde gereksiz dosyaların sunucuya aktarılmasını engeller. Örneğin, bir e-ticaret projesinde guzzlehttp/guzzle gibi HTTP istemcisi require içinde, phpunit/phpunit ise require-dev içinde tanımlanır.
Sürüm Kısıtlamaları ve Çakışma Çözümü
Composer, semver kurallarına göre sürüm kısıtlamaları belirlemenize izin verir. En yaygın kullanılan operatörler ^, ~, >= ve !=’dir. Örneğin "^1.2" ifadesi, 1.2.0 ile 2.0.0 arasındaki tüm sürümleri kapsar, ancak 2.0.0 ve üzerini dışarıda bırakır. Bu sayede, güvenlik güncellemeleri otomatik olarak alınırken büyük kırılma (breaking) değişiklikleri engellenir.
Çakışma durumunda Composer, composer why ve composer why-not komutlarıyla hangi paketlerin hangi sürüm gereksinimi getirdiğini gösterir. Çözüm adımları arasında composer update vendor/package --with-all-dependencies komutu ile tüm bağımlılıkların uyumlu bir sürüme yükseltilmesi yer alır. Gerektiğinde conflict anahtarını composer.json içine ekleyerek belirli paketlerin birlikte kullanılmasını engelleyebilirsiniz.
Otomatik Autoload ve PSR-4 Standardı

Composer, autoload bölümünde PSR-4 standartlarına uygun bir haritalama tanımlamanıza izin verir. Örneğin:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Bu yapı, src/ klasöründeki tüm sınıfların App\ isim alanı (namespace) altında otomatik olarak yüklenmesini sağlar. composer dump-autoload -o komutu ise sınıf haritasını optimize eder ve üretim ortamında %20’ye varan performans artışı sağlar.
Autoload özelliği, fiziksel sunucu (dedicated server) gibi yüksek trafikli ortamlarda dosya okuma sayısını azaltarak I/O yükünü hafifletir. Böylece, büyük bir Laravel uygulamasında her istek için sınıf arama süresi milisaniyeler içinde kalır.
Bağımlılık Güncellemeleri ve Güvenlik Yönetimi
Composer paketleri sık sık güvenlik yamaları alır. Bu yamaları kaçırmak, projeyi saldırılara açık bırakır. composer outdated --direct komutu, doğrudan eklediğiniz paketlerin yeni sürümlerini listeler. Daha kapsamlı bir kontrol için composer audit (Composer 2.2 ve üzeri) komutu, paketlerdeki bilinen CVE’leri tarar ve risk seviyesini raporlar.
Güvenlik güncellemelerini otomatikleştirmek için CI/CD boru hatlarına composer install --no-dev --optimize-autoloader ve ardından composer audit adımlarını ekleyebilirsiniz. Böylece, bir güncelleme sırasında ortaya çıkabilecek dependency hell (bağımlılık cehennemi) riskini önceden görür ve müdahale edersiniz. Üretim ortamında SSL gibi ek güvenlik önlemleriyle birlikte, Composer’ın sağladığı paket bütünlüğü kontrolü (hash doğrulaması) güvenliği iki katına çıkarır.
Performans Optimizasyonu: Cache ve Parallel Install
Composer, paket indirme ve çözümleme aşamalarında ~/.composer/cache dizininde dosyaları önbelleğe alır. Bu önbellek, aynı paketlerin birden fazla proje tarafından tekrar indirilmesini engeller ve kurulum süresini %30’a kadar kısaltır. Özellikle AMD Ryzen VDS sunucular gibi çok çekirdekli ortamlar, composer install --prefer-dist --no-interaction --profile --parallel komutu ile paralel indirme desteğinden faydalanabilir.
Bir diğer optimizasyon yöntemi ise composer config --global process-timeout 2000 ile zaman aşımı süresini artırmak ve composer config platform.php 8.2 gibi platform ayarlarıyla paketlerin hedef PHP sürümüne göre derlenmesini sağlamaktır. Bu ayarlar, özellikle e-ticaret hosting çözümlerinde yüksek trafik altında sorunsuz bir çalışma sunar.
Gerçek Dünya Senaryosu: Büyük Bir E‑Ticaret Projesinde Composer Kullanımı
Bir e‑ticaret sitesinin altyapısını düşünün: Laravel, Symfony, Guzzle, Stripe SDK ve bir dizi SEO optimizasyon paketi (spatie/laravel-sitemap, barryvdh/laravel-debugbar) gerektirir. Proje başlangıcında composer init ile temel paketler tanımlanır, require-dev kısmına PHPUnit ve PHPStan eklenir. Geliştirme sürecinde composer require spatie/laravel-sitemap:^5.0 komutu ile SEO haritası oluşturulur.
Yayın aşamasında composer install --no-dev --optimize-autoloader çalıştırılarak sadece üretim paketleri kurulur, autoload optimize edilir ve composer audit ile güvenlik taraması yapılır. Bu adımlar, SEO hosting paketinin sağladığı hızlı CDN entegrasyonu ile birleştiğinde sayfa yükleme süresi %45 azalır, dönüşüm oranı artar.
Sıkça Sorulan Sorular
Composer ile global paket kurmak güvenli mi?
Evet, global paketler (örneğin composer global require phpstan/phpstan) sadece geliştirme ortamında kullanılır ve üretim sunucusuna aktarılmaz. Ancak, global paketlerin de güncel tutulması gerekir; aksi takdirde güvenlik açıkları ortaya çıkabilir.
composer.lock dosyası neden önemlidir?
composer.lock, projenizdeki tam paket sürümlerini ve bağımlılık ağacını kilitler. Bu dosya sayesinde aynı kod tabanı farklı makinelerde aynı sürümlerle çalışır, sürüm çakışması ve “bende çalışıyor” sorunları ortadan kalkar.
Composer'ın --prefer-source ve --prefer-dist seçenekleri arasındaki fark nedir?
--prefer-source, paketleri kaynak kod (git) olarak çeker; bu sayede git pull ile güncellemeler yapılabilir. --prefer-dist ise paketleri sıkıştırılmış arşiv (zip/tar) olarak indirir, kurulum daha hızlıdır. Çoğu üretim ortamında --prefer-dist tercih edilir.
Composer ile bir paketi tamamen kaldırmak nasıl yapılır?
composer remove vendor/package komutu, paket dosyalarını vendor klasöründen siler ve composer.json ile composer.lock dosyalarını günceller. Ardından composer install ile bağımlılık ağacı yeniden oluşturulur.
Sonuç ve Bir Sonraki Adımınız
Composer, modern PHP projelerinin bel kemiğidir. Doğru sürüm kısıtlamaları, düzenli güvenlik taramaları ve autoload optimizasyonları sayesinde uygulamanız daha hızlı, daha güvenli ve daha sürdürülebilir olur. Şimdi projenizin kök dizininde bir composer.json dosyası oluşturun, temel paketleri ekleyin ve composer install ile ilk kurulumunuzu gerçekleştirin. İlerleyen aşamalarda alan adı (domain) kaydı ve kurumsal e-posta entegrasyonlarını da Composer yönetimli projelerinizle sorunsuz bir şekilde bağlayabilirsiniz.