Composer Nedir, Nasıl Kurulur, Kullanılır
Uzun zamandır PHP ile yazılım geliştiriyorsanız, bazı kütüphaneleri/dosyaları yeniden indirmek, yazmak, güncel sürüm kullanmaya çalışmak için zaman harcamanın büyük bir kayıp olduğunu fark etmişsinizdir. Zend, Symfony ve Laravel gibi kütüphaneleri kullanarak proje yapıyorsanız siz daha bir ihtiyaç sahibisinizdir.
Nedir ?
PHP için bağımlılık yönetim aracıdır. Projenizin ihtiyaç duyduğu kütüphaneleri tanımlamanızı ve sizin için kurmasını ve güncellemesini sağlar. Php için geliştirilmiş bir bağımlılık yönetim aracıdır. Projemizde kullanmak istediğimiz php kütüphanesinin ihtiyacı olan php dosyalarını projeye dahil edilmesini sağlayan, çeşitli güncellemeleri otomatik yapabilen bir araçtır. Php’de Composer’ın yaptığı işlemleri Ruby’de bundler, NodeJs’de Npm, Java’da Maven yapmaktadır.
Aslında bağımlılık (gereksinim) yönetim araçlarını ilki değil; Node.js‘deki nmp ve Ruby deki Bundler ilham alınarak yapılmıştır.
Kimler Kullanmalı ?
Aslında PHP ile kod yazan herkesin kullanması gerektiğini düşünüyorum. İllaha ki belirli kütüphaneler veya frameworkler vb kullanıyorsunuzdur; ve en son version kullanmak (benim gözümde) her zaman daha sağlıklıdır. Benim belli başlı kütüphanelere sürekli bir göbek-bağım var ve her seferinde git yeniden al yapmak zaman ve odak kaybı bir iş.
Neden İhtiyaç Duyulur ?
Geliştirdiğimiz projelerimizde birçok kütüphaneye ihtiyaç duyarız ve bu kütüphanaleri projemize ekleriz. Bu kütüphaneler sürekli geliştiriliyor,güvenlik açıkları gideriliyor performans artırıcı güncellemeler yapılıyor bir üst versiyonları çıkarılıyor bizimde bu güncellemeleri almamız gerekiyor aksi takdirde projemizde güvenlik açığı oluşabilir, performans açısından istediğimizi alamayabiliriz, eski versiyonu kullandığımız için bu teknolojide geride kalmış olabliriz. Birden fazla kütüphane kullandığımız için bu kütüphaneleri tek tek projemize eklemek veya projede bulunana kütüphaneleri güncellemek biraz zahmetli olucaktır işte tam burada devreye composer giriyor. Biz ihtiyacımız olan kütüphaneyi veya güncellemesini istediğimiz kütüphaneyi composer’a belirtiyoruz composer bizim yerimize istediğimiz kütüphaneyi projemize ekliyor veya güncelliyor. Bir örnek ile gözümüzde canlandıralım Bizim Php ile yazdığımız kod başka birinin Bilgisayarın’da çalışmayalbilir bu sorun Php versiyonundan kaynaklanıyor olabilir bizim kodumuz Php 5.3 üstünü destekliyordur ancak o kişi Php 5.2 kullanıyır olabilir eğer biz projeye Composer aracını yüklemişsek o kişi Composer’ı kullanarak versiyon sorununa takılmadan projeyi çalıştırabilir.
Composer Nasıl Kurulur ?
Çalışmak için PHP 5.3.2 ve üstüne gereksinimi vardır – düşünün Composer’ın bile bir gereksinimi varken bizim projelerimizin mi olmayacak =)
Not: PHP ile kuracaksanız ve PHP’yi Path olarak göstermediyseniz; PHP.exe’nin olduğu dizinden kurmanız gerekiyor. Örneğin ben şuan tekrar kurmak istesem şöyle bir yol izlemem gerekiyor;
Command Prompt’a (cmd)
php -r "readfile('https://getcomposer.org/installer');" | php
Linux’ta da PHP nereye yüklü ise cd ile gidip ayni islemi yapmalısınız…
Kurulum esnasında sorun yaşayacağınızı sanmıyorum ama bir sorun olursa iletişim sayfasından ya da sosyal medya üzerinden de sorabilirsiniz.
Windows Kurulumu
Windows’a kurulum yapmanın en kolay yolu Composer-Setup.exe’yi indirip kurmak. Kurulum yaparken composer’i direk PATH’e ekleyecektir, bu da Command Prompt’tan, dizin belirtmeden composer yazarak kullanabilmenizi .
Nasıl Kullanılır ?
Composer’ımızı kurduğumuza artık ihtiyacımız olan paketleri yükletebiliriz. Composer ayar (kurulum) dosyası oluşturmak için projenin ana (root) dizininde JSON dizini oluşturmamız gerekiyor. Eğer JSON bilmiyorsanız hemen öğrenin, bu devirde JSON bilmeden olur mu ?!
Örnek amaçlı PSR Log Paketini indirmek için aşağıdaki gibi bir composer.json dosyası oluşturmanız gerekiyor.
"require": {
"psr/log": "dev-master"
}
}
PSR Log’u kurmak için artık tek yapmanız gereken projenizin dizinine gidip (terminal veya cmd) aşağıdaki kodu çalıştırmak
Projenizin ana dizinine baktığınızda vendor diye bir klasör oluşturmuş ve için psr’ın gerekli PHP dosyalarını indirmiş olduğunu görebilirsiniz. Çok kolay değil mi ??
Sadece hazır paketleri değil kendi paketlerinizi de yapıp (illaha package olmasına gerek yok, zip, repo (vcs), dosya da olabilir) bu şekilde projelerinize dahil edebilirsiniz.
Otomatik Yükleme (Autoloading)
Bir sürü pakete sahipsiniz ve bunları projenize otomatik yüklemeye ihtiyacınız var. Neyse ki composer bu konuda da size yardımcı oluyor.
Yapmanız gereken index.php veya bootstrap dosyasınıza (yada nasıl yöntemler kullanıyorsanız artık) en üste aşağıdaki kod satırını ekleyin. İnmiş ve include / require edilmesi gerekenleri sizin için projenize dahil edecektir.
Windows’ta yaptığınızda direkt composer
komutu ile çağırabilir olduğunuz için öyle yazıyorum duruma göre;
olarak da çağırabilirsiniz. Bunun için composer.phar
dosyasını getcomposer.org adresinden indirip proje dizinine atmanız gerekiyor (direk buradan da indirebilirsiniz).
Eğer Windows’taysanız ve komut satırına php
yazınca hata alıyorsanız, PHP.exe’nin olduğu yeri PATH
’ler arasina eklemeniz gerekiyor. Eğer hata alıyorsanız; Çalıştır‘a (Win + R)
yazıp entera basın, Sistem Özellilkleri (System Properties) açılacak oradan Ortam Değişkenleri… (Environment Variables…) buttonuna basın ve açılan pencerede aşağıdaki ya da yukarıdaki kısımda bulunan Path’e çift tıklayarak açın. Ardından, eğer Windows 10’da iseniz yeni bir kayıt eklemeye, önceki sürümlerdeyseniz açılan metin kutusunun sonuna PHP.exe‘nin bulunduğu dizinin yolunu yapıştırın (öncesine noktalı virgül eklemeniz gerekebilir, oraya biraz incelerseniz rahatça anlarsınız zaten)
Eğer sizde direkt composer
yazınca gelmiyorsa, benim direk composer olarak çağırdığımı siz, sizde çalıştığı şekliyle kullanarak ilerlersiniz.
Composer Nasıl Kullanılır?
Composer’u kullanmaya başlamak için tek ihtiyacınız, proje dizininizde composer.json
adında bir JSON dosyası olması (bazı durumlarda otomatik oluşamadığı için kendiniz oluşturmanız daha sağlıklı). Bu JSON dosyasının içinde ihtiyaç duyulan paketler ve versiyon bilgisi, varsa private repository yolları gibi bilgiler tutuluyor.
Örneğin:
"require": {
"monolog/monolog": "1.0.*"
}
}
composer.json
dosyasının içine yapıştırın ve kaydedin. Ardından bu dizinde bir terminal (cmd – command promt) penceresi açın ve;
yazıp enterlayın. Composer otomatik olarak sizin için vendor klasörü oluşturacak, monolog‘u ve monolog için gerekli olan paketleri sizin için indirecek ve ardından gereksinim(ler)inizin için vendor dizinine autoload.php
adında bir PHP dosyası oluşturacak. Her paketi (kütüphaneyi) tek tek include ya da require etmek yerine siz sadece autoload.php
’yi require etseniz yeterli olacak.
Monolog’un Logger örneğiyle devam edecek olursak;
Öncelikle composer.json
dosyamızı yukarıdaki gibi doldurduk (require monolog yazan yer), ardından terminale (komut satırına) composer install yazdık ve gerekli paketlerin inmesini bekledik. İşlem başarıyla biterse vendor diye bir dizin ve içine ‘composer‘ ve ‘monolog‘ adında iki klasör, ‘autoload.php‘ diye bir PHP dosyası oluşmuş olması gerekiyor.
Not: Terminal veya komut satırında proje dizininde olmanız gerekiyor. Bunun için Windows’ta boş cd
linux veya macintosh’ta pwd
yazarak aktif olduğunuz yeri görebilir ve cd
komutu ile proje dizininize gidebilirsiniz.
index.php’yi oluşturalım, ve içine aşağıdaki kodları yapıştırıp kaydedelim.
/index.php
require __DIR__ . '/vendor/autoload.php';
use MonologLogger;
use MonologHandlerStreamHandler;
use MonologHandlerFirePHPHandler;
// Logger'i olusturalim
$logger = new Logger('my_logger');
// Biraz handler ekleyelim
$logger->pushHandler(new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG));
$logger->pushHandler(new FirePHPHandler());
// artik Logger'i kullanabilirsiniz
$logger->addInfo('Loggerimiz kullanima hazir');
Sayfayı çalıştırdığınızda my_app.log
adında bir dosya oluşacak ve içinde
yazacak. Okuyup yaparken yavaş bir işlemmiş gibi geliyor fakat kullanacağınız paketleri bilip composer.json dosyanızı hızlıca hazırlarsanız zamanla çok kullanışlı olduğunu göreceksiniz.
Bu sadece kurulum aşamasıydı elbette. Kullandığımız paketlere güncelleme geldiğinde otomatik güncellemek için yapmamız gereken sadece
Sürüm Seçimi
Yukarıda yaptığımız monolog kurulumunda sadece 1.0.* yani 1.0.[en üst versiyon] çağırdık. Development versiyonunu kurmak için dev-master
, spesifik bir versiyonu çağırmak için direk versiyonu ya da en üst kararlı versiyonu çağırmak için asteriks *
yazabilirsiniz.
Spesifik versiyonu kullanma;
"require": {
"monolog/monolog": "1.0.3"
}
}
Development versiyonunu kullanma;
"require": {
"monolog/monolog": "dev-master"
}
}
Son kararli sürümü kullanma;
"require": {
"monolog/monolog": "*"
}
}
JSON Dosyası Oluşturmadan Başlangıç
Windows, Macintosh, Linux ayırt etmeksizin bazı durumlarda hata oluşmakta, bu hata genelde güvenlik/izin ile ilgili hatalardır. Eğer izinsel bir problem bulunmamakta ise komut satırını kullanarak direk başlangıç yapabilirsiniz. Şahsen daha çok komut satırı kullanan birisi olduğum için tavsiye edeceğim yöntem de bu…
composer help
yazarak tüm composer komutlarını görebilirsiniz, ben sadece en ihtiyaç duyacaklarınızı göstereceğim.
require
Argüman belirtimi zorunlu değildir. Alabileceği argümanların hepsini değil, sadece çok kullandıklarım olan dev
ve no-dev
i açıklayacağım diğerlerine buradan bakabilirsiniz;
–dev: Paketi require-dev
e ekler.
–no-dev: Güncellerken require-dev
deki paketleri es geçer.
yayıncı/paket
kısmında ise öncelikle (bildiğim kadarıyla) varsa VCS’lerinize, daha sonra packagist.org‘daki paketlere bakarak arama yapar.
versiyon
argümanı da zorunlu değildir. Belirtmezseniz son stabil versiyonu hedef alır.
Bir kaç örnek yapalım;
composer require monolog/monolog dev-master
composer require dev ahmetertem/query_builder
install
install
komutu require
’dan farklıdır. Install sadece hazır composer.json
dosyasındaki belirtilmiş paketleri kurmanıza yarar ve güncelleme işlevi yoktur. Yani eğer kurulum yaptıysanız kurulum yaptıklarınızı yeniden işlemeye çalışmaz (eğer farklı versiyon hedef göstermediyseniz tabîi), sadece kurulu olmayanları kurar.
require
’da olduğu gibi parametrelere sahiptir. İncelemek için buraya bakabilirsiniz.
update
Adı üstünde güncelleme için kullanılır, eğer install yapmadıysanız install
işlemi de yapar. Yine install
ve require
’da olduğu gibi parametrelere sahiptir, onun için ise buraya bakabilirsiniz.
Özel repositoryler için composer konusuna bir sonraki yazımda değineceğim. Buraya kadar olan kısımla ya da composer ile ilgili başka bir sorunuz varsa yorum atabilirsiniz ;)
Kaynak
- http://ahmetertem.com.tr/composer-nedir-nasil-kurulur-kullanilir/
- http://ahmetertem.com.tr/composer-nasil-kullanilir/
- https://www.bulutfon.com/gelistirici-makaleleri/genel-gelistirici-makaleleri/composer-nedir-nasil-kurulur-kullanilir