Composer sebagai Dependensi Manager pada PHP

bagi para pelaku koding atau programmer sudah menjadi hal yang lumrah ketika harus berkutik dengan barisan-barisan kode yang jumlahnya luar biasa banyak, hal ini terkadang bisa menjadi hal yang membosankana ketika dimana kita harus menulis ulang barisan-barisan program tertentu atau harus memilah milah file-file mana saja yang bisa digunakan untuk projek yang baru, akibatnya pekerjaan yang kita lakukan cenderung repetitive alias ngetikin barisan dan copas file folder kode yang itu-itu saja, capek bukan…….

programmer yang baik hati dan tidak sombong pasti selalu akan mengumpulkan file-file mana saja yang nantinya bisa digunakan untuk projek yang lain, atau bagian mana saja dari projek sebelumnya yang bisa dipakai untuk projek baru, hal ini akan cukup membantu tentunya jika file-file tersebut terstruktur secara rapi dan up-to-date, tetapi sayangnya terkadang file-file tersebut tidak up-to-date atau bahkan sudah tidak kompatibel dengan projek kita yang baru dikarenakan perubahan struktur dan hal lainya, terlebih lagi jika kita menggunakan library-libary yang bersifat opensources tentu saja akan repot ketika pada projek sebelumnya berjalan dengan lancar tetapi ketika digunakan pada projek yang baru malah menjadi sumber error dan kepusingan.

Dependensi

saya yakin istilah ini sudah tidak asing, apalagi jika kita sering beraktifitas menggunakan OS Linux seprti ubuntu dan varianya, pada saat kita akan menginstall sebuah aplikasi tertentu akan ada banyak dependensi yang dibutuhkan agar aplikasi tersebut bisa terinstall dan berjalan dengan baik.

pada konteks pemrogram PHP Dependensi bisa kita artikan sebagai library atau pusataka yang dibuat oleh programmer lain (biasanya berbentuk class atau kumpulan fungsi-fungsi tertentu) yang bisa kita gunakan secara bebas dalam aplikasi kita.

libray-libray inilah yang sering kita gunakan dalam proses pembuatan sebuah aplikasi, misalnya libray untuk membaca file excel, library untuk menggenerate file pdf, library untuk memanipulasi string,gambar dan yang lainya.

Composer

Composer jika diartikan kedalam bahasa indonesia artinya adalah pengarang atau pencipta, tetapi dalam dunia per-PHP-an composer adalah sebuah tools untuk memanajemen pustaka atau library yang kita gunakan atau sering disebut sebagai dependency manager  atau package manager.

konsep dari composer ini sebenarnya bukanlah hal yang baru, composer sendiri terinspirasi dari npm  milik node.js  dan bundler  pada bahasa pemrograman ruby .

sebenarnya pada PHP sudah ada dependensi manager secara default, mungkin sebagian dari kita mengenalnya dengan sebutan PEAR , berbeda dengan Composer, PEAR sudah mulai ditinggalkan oleh para developer karena banyak alasan, salah satunya PEAR  sudah terlalu ketinggalan jaman (karena ditinggalkan banyak library yang jadul)

dengan menggunakan composer kita juga bisa mengatur akan menggunakan library versi berapa (misalnya phpExcel 1.3  atau phpExcel 1.4.dev ), composer juga memungkinkan kita untuk meload atau memanggil library-libray tersebut secara otomatis karena Composer sudah dilengkapi dengan autoload , jadi kita tidak perlu lagi menginclude-kan atau meng-require_once  kan libray-libray yang akan kita gunakan, dan enaknya mudahnya lagi, ketika kita ingin mengganti versi dari library yang akan kita gunakan, kita hanya butuh merubah konfigurasi yang ada pada composer dan menjalankan perintah kecil teng…… maka library akan terupdate secara otomatis.

System Requirments

untuk dapat menggunakan composer kita minimal memiliki versi php 5.3.2+ , beberapa versi php lainya terkadang membutuhkan beberapa konfigurasi tambahan, tetapi secara default dan berdasarkan pengalaman jika sudah  menggunakan PHP versi 5.3.2+  belum  pernah ada masalah pada saat penginstallan maupun penggunaanya.

Composer memiliki beberapa cara untuk proses instalasi, bahkan composer memungkinkan kita menggunakanya hanya pada projek tertentu saja atau secara global, misalnya kita hanya akan menginstall composer dalam projek A , tanpa harus di install ke system, perbedanyaa adalah jika kita menginstall hanya pada projek A , maka ketika kita memanggil perintah composer diluar folder projek A  tidak akan bisa, lain halnya jika kita menginstall kedalam system, kita bisa menggunakan perintah composer dimanapun, so tergantung kebutuhan masing-masing, tetapi lebih disarankan untuk menginstall ke system (global).

Instalasi Local (Per Projek)

seperti yang sudah kita pahami diatas, menginstall composer secara local atau per projek makan kita hanya bisa menggunakan perintah composer pada folder projek dimana kita meletakan  file executable dari composer, pertama download dulu filenya di https://getcomposer.org/download/ kemudian buka terminal dan jalankan perintah

Instalasi Globally

jika diatas kita menginstal composer per-projek dan hanya bisa digunakan hanya dalam projek tersebut, kita bisa juga menginstal composer secara global (kedalam system), dengan begitu kita bisa memanggil perintah composer dari manapun, untuk instalalasinya hampir sama dengan cara instalasi untuk local , yang membedakanya hanyalah letak dari executable composer tersebut. untuk proses instalasinya bisa download file nya di https://getcomposer.org/download/ atau gunakan perintah berikut

untuk bisa digunakan secara global  jika kita menggunakan linux bisa menggunakan perintah

jika kita pengguna Mac OSX, terkadang folder /usr/local/bin  tidak ada, jika pada proses pemindahanya terdpat pesan No such file or directory , sebaikanya kita buat dulu foldernya dengan perintah mkdir -p /usr/local/bin  dan kemudian kita bisa pindahkan file executable composer, tahapan selanjutnya kita harus membuat PATH  kearah folder yang baru saja kita buat,

yang perlu diingat adalah, pada Mac OSX jika kita menggunakan MAMP's PHP , ada terdapat 2 versi PHP yang terinstall, untuk itu kita harus memilih versi mana yang akan digunakan oleh composer, secara lengkap instalasi composer dimacos  bisa dilihat dibawah

Bagi pengguna Windows, kita tinggal download aplikasi installer composer dan install seperti halnya menginstall aplikasi biasa.

setelah proses instalasi selesai, baik secara local  maupun secara global  kita bisa mengecek atau sekedar memverifikasi apakah composer sudah terinstall atau belum dengan perintah composer , jika kita mendapatkan hasil seperti dibawah, maka composer sudah siap untuk digunakan.

Menggunakan Composer

cara menggunakan composer sangat mudah jika kita sudah terbiasa mengunakan aplikasi Command Prompt pada windows atau Terminal pada linux, pertama-tama kita bisa mengguanakan cara otomatis atau manual, cara manual misalnya, kita cukup membuat sebuah file dengan nama composer.json , didalam file inilah nantinya semua pengaturan dependensi dari library yang akan kita gunakan, format minimal dari file compser.json  seperti dibawah

seperti yang kita lihat pada kode diatas, terdapat sebuah key  dengan nama require , key require  inilah yang mengatur kita akan menggunakan library yang mana dan versi yang mana, misalnya kita akan menggunakan sebuah library dengan nama carbon  dari nesbot  versi 1.21.*  yang berfungsi untuk prosesing dan conversi tanggal

atau kita bisa menjalankan perintah composer require nesbot/carbon , maka secara otomatis format diatas akan terbentuk, langkah terkahir jika kita harus menginstall dependensi yang tertulis dalam key  require  agar bisa digunakan dengan perintah composer install (jika menggunakan composer require nesbot/carbon tidak perlu lagi menjalankan perintah composer install )

jika kita meng-inginkan pembuatan file composer.json  secara otomatis kita bisa menggunakan perintah composer init , kemudian tinggal mengikuti langkah-langkah yang diminta pada saat proses nya, seperti gambar

setelah proses instalasi library selesai, akan tercipta beberapa file  dan folder  didalam projek, misalnya seprti folder dengan nama vendor , didalam folder inilah semua library disimpan nantinya, jika sewaktu-waktu kita ingin merubah, menambah atau mengganti versi  dari library yang kita gunakan kita cukup merubah nya di file composer.json  dan menjalankan perintah composer update.

Autoloading

setelah instalasi berhasil dan folder vendor  sudah terisi dengan kumpulan-kumpulan library yang akan kita gunakan, langkah selanjutnya adalah menggunakan library-library tersebut tanpa harus mengincludekan satu persatu, pertama kita buat dulu satu file diluar folder vendor  dengan nama index.php , kemudian panggil file autoload.php  yang ada dalam folder vendor

dengan begitu kita sudah bisa menggunakan semua library yang kita daftarkan dalam daftar composer.json  sebelumnya, misalnya pada contoh diatas kita menggunakan nesbot/carbon  untuk memanipulasi tanggal,

seperti gambar diatas, kita bisa menggunakan library carbonnya, banyak sekali libray yang ada, tinggal pilih dan pake, untuk libray-libray yang lain kita bisa menuju ke https://packagist.org/explore/, packagist  merupakan sebuah website yang menjadi tempat berkumpulnya libray-libray php siap pakai.

setalah satu libray berjalan dan kita pakai diprojek, misalnya kita ingin menambahkan libary baru, anggap saja kita butuh sebuah library yang berfungsi untuk mengolah string, kita akan menambahkan sebuah library dari spatie  dengan nama string , kali ini kita akan menggunakan perintah composer require spatie/string  tanpa harus menambahkan secara manual di file composer.json , maka file composer.json  kita akan berubah secara otomatis menambahkan spatie/string  kedalam key require

contoh penggunaan nya sama seperti penggunaan nesbot/carbon  pada contoh sebelumnya, kita hanya tinggal memanggil fungsi-fungsi yang ada pada library spatie/string

fungsi spatie/string  yang digunakan diatas akan mengambil karakter yang berada diantara Pertama  dan Ketiga  dan merubahnya menjadi huruf kapital, hasilnya bisa dilihat pada gambar dibawah.

Bagaimana jika menggunakan class atau fungsi kita sendiri ? ya pada akhirnya akan menjadi pertanyaan, jika diawal tadi kita menggunakan fungsi dan class (library) buatan orang lain, bagaimana jika kita menggunakan fungsi buatan kita sendiri ?

untuk hal yang satu ini, kita bisa menggunakan acuan yang ada pada PSR-0  atau PSR-4  (Autoloading) , dengan menerapkan namespace  pada fungsi atau class  yang kita buat, misalnya saya ingin membuat sebuah libray dengan fungsi menampilkan nama.

karena kita mengikuti acuan PSR-4 , langkah pertama kita akan membuat sebuah folder yang menjadi tempat library kita dengan nama app , kemudian didalam folder app  kita akan membuat sebuah folder (vendor) dengan nama Punyaku  dan didalam folder Punyaku  kita buat sebuah folder lagi dengan nama Liblary , sehingga struktur foldernya menjadi

terakhir kita akan membuat sebuah class  dengan nama Namaku.php , sehingga struktur folder pada aplikasi kita akan menjadi seperti gambar dibawah

untuk sementara kita akan membuat class  yang sangat sederhan, hanya untuk mencoba bagaiaman mengimplementasikan PSR-4  dengan Composer  dan Liblary  lain yang bukan buatan kita,

sampai sekarang, liblary  buatan kita tidak akan bisa dipanggil, kecuali kita mendifinisikan autoload  pada file composer.json , misalnya seperti

pada file composer.json  diatas, kita memodifikasi nya dengan menambahkan key autoload  dan sub key psr-4 , ini menandakan kita akan menggunakan acuan PSR-4  untuk proses autoloadingnya, kemudian pada bagian key psr-4  kita mendifinisikan nama dari vendor namespace  yang kita gunakan, pada contoh diatas kita menggunakan namespace  dengan nama Punyaku , untuk lebih jelas tentang php namespace  kita bisa membacanya di http://php.net/manual/en/language.namespaces.php, kemudian langkah selanjutnya adalah kita harus menjalankan perintah composer dump-autoload -o  dengan begitu nantinya class  atau library  yang kita gunakan bisa diload secara otomatis oleh autoload-nya composer.

setelah perintah composer dump-autoload -o  kita jalankan, sekarang kita mencoba memanggil liblary yang barusan kita buat dan menggabungkan nya dengan pemanggilan library-libray yang lain.

Dan hasilnya adalah, kesemua libray baik yang dibuat oleh orang lain dan libray yang kita buat bisa berjalan secara berdampingan, dengan begini, kita tidak akan kesulitan untuk memanajemen projek yang sedang kita kerjakan karena setiap file dan kode tersetuktur secara rapi

sekian dulu tentang composer  sebagai dependensi manajer  pada php, lain kali jika ada kesempatan kita akan belejar lagi tentang composer  dan php .

Published by

Khairu Aqsara

Khairu Aqsara a Web Developer almost every day and enjoys writing about his experiences . If you need help with your next project you know where to look.