composer

Tutorial – Membuat PHP Package sendiri [bagian 1]

Apa itu PHP Package ?

Anda pernah menggunakan PHP framework ? misalnya menggunakan Laravel atau Yii, pasti Anda pernah menjalankan perintah seperti berikut, misal untuk menambahkan suatu pustaka dari Facebook SDK :

composer require facebook/graph-sdk

atau menambahkan menambahkan pustaka untuk pengolahan waktu dari nesbot/carbon

composer require nesbot/carbon

Secara sederhana perintah di atas bisa diartikan untuk mengunduh PHP Package ke dalam direktori dan dapat digunakan di lingkungan proyek kita bekerja.

Jadi, PHP Package merupakan suatu pustaka yang mempermudah pekerjaan pengembang perangkat lunak berbasis PHP, sehingga para pengembang ini dapat fokus mengerjakan proses bisnis yang memerlukan upaya lebih.

Misal Anda males repot untuk melakukan pengolahan waktu pada PHP Native, Anda dapat menggunakan paket pustaka dari nesbot/carbon, tinggal pasang dan gunakan.

<?php

// contoh

require'vendor/autoload.php';

useCarbon\Carbon; 

$howOldAmI = Carbon::createFromDate(1994, 1, 1)->age;

echo $howOldAmI;

Jangan lupa baca dokumentasinya juga! πŸ˜„ karena pengembang yang baik selalu membaca dokumentasi.

Nah, pada artikel ini nanti akan dijelaskan bagaimana caranya membuat PHP Package sendiri dan mempublikasikannya juga, agar nantinya bisa digunakan oleh orang lain yang membutuhkan.

Ada kata-kata bijaknya juga πŸ˜„

Sharing is Caring

Sekilas tentang Composer

Intro

Menurut situs resmi dari Composer :

Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.

Dependency Management

Composer bukan paket manajer yang mana sama seperti Yum atau Apt. Ini berkaitan dengan paket atau pustaka, tetapi mengelolanya berdasarkan suatu proyek dan biasanya terpasang pada direktori (misal vendor) di dalam direktori proyek Anda.

Installation

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Jika sudah sukses Anda harusnya bisa melihat seperti ini di Terminal

andhikayuana@yuana-machine:~|β‡’  composer --version
Composer version 1.6.5 2018-05-04 11:44:59
andhikayuana@yuana-machine:~|β‡’

Let’s Create

Tibalah saat dimana kita akan mengetik kode-kode yang harapannya bisa menjadi manfaat bagi banyak orang πŸ˜„ Kita akan membuat pustaka secara sederhana untuk menghitung luas dan keliling bangun datar.

Membuat Kerangka Proyek

Pastikan Git, PHP, Composer sudah terpasang dan berjalan dengan baik. Mulailah dengan membuat direktori proyek Anda dan membuat beberapa berkas yang bisa membantu orang lain ketika memakai pustaka yang kita buat.

mkdir bangun-datar
cd bangun-datar
touch README.md LICENSE phpunit.xml .gitignore
mkdir src tests

Kemudian kita melakukan inisiasi composer di dalam proyek kita dengan menjalankan perintah

composer init

Dan kemudian ikuti petunjuk yang tertera di Terminal, contoh

andhikayuana@yuana-machine:~/Code/playground/bangun-datar|
β‡’ composer init


Welcome to the Composer config generator



This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [andhikayuana/bangun-datar]:
Description []: menghitung luas dan keliling bangun datar
Author [andhikayuana <andhikayuana@gmail.com>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? yes
Search for a package: phpunit

Found 15 packages matching phpunit

[0] phpunit/phpunit
[1] phpunit/phpunit-mock-objects Abandoned. Use instead.
[2] phpunit/php-token-stream
[3] phpunit/php-timer
[4] phpunit/php-text-template
[5] phpunit/php-file-iterator
[6] phpunit/php-code-coverage
[7] symfony/phpunit-bridge
[8] phpunit/phpunit-selenium
[9] johnkary/phpunit-speedtrap
[10] codedungeon/phpunit-result-printer
[11] codeception/phpunit-wrapper
[12] jean85/pretty-package-versions
[13] brianium/paratest
[14] codeception/stub

Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^7.5 for phpunit/phpunit
Search for a package:

{
"name": "andhikayuana/bangun-datar",
"description": "menghitung luas dan keliling bangun datar",
"type": "library",
"require-dev": {
"phpunit/phpunit": "^7.5"
},
"license": "MIT",
"authors": [
{
"name": "andhikayuana",
"email": "andhikayuana@gmail.com"
}
],
"require": {}
}

Do you confirm generation [yes]?

Sekarang untuk melakukan pemasangan dependensi yang didefinisikan tadi bisa menggunakan perintah

composer install

Jika sukses, direktori proyek Anda akan seperti berikut

.
β”œβ”€β”€ LICENSE
β”œβ”€β”€ README.md
β”œβ”€β”€ composer.json
β”œβ”€β”€ composer.lock
β”œβ”€β”€ phpunit.xml
β”œβ”€β”€ src
β”œβ”€β”€ tests
└── vendor

3 directories, 5 files

Lengkapi isi LICENSE dengan memilih lisensi yang cocok bagi pustaka yang Anda buat, dalam contoh ini menggunakan lisensi MIT. Anda bisa memilih lisensi dari situs https://choosealicense.com

Lengkapi konfigurasi pada berkas phpunit.xml untuk keperluan penulisan Unit Test dengan PHPUnit seperti berikut, atau ingin melakukan konfigurasi sendiri bisa baca dokumentasinya πŸ˜„

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.5/phpunit.xsd"
bootstrap="vendor/autoload.php"
forceCoversAnnotation="true"
beStrictAboutCoversAnnotation="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
colors="true"
verbose="true">
<testsuites>
<testsuite name="default">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>

<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
</phpunit>

Lengkapi README.md, diusahakan jelas dan mudah dimengerti

Inisiasi git dan jangan masukkan direktori vendor dalam git dengan perintah

git init
echo vendor >> .gitignore

Tambahkan perintah untuk ekseskusi tesnya pada berkas composer.json

{
...
"scripts": {
"test": [
"phpunit --testdox"
]
}
}

Anda bisa mencobanya dan bisa melihat hasilnya

composer test
> phpunit --testdox
PHPUnit 7.5.12 by Sebastian Bergmann and contributors.

Runtime: PHP 7.1.23
Configuration: /Users/andhikayuana/Code/playground/bangun-datar/phpunit.xml


Time: 123 ms, Memory: 2.00 MB

No tests executed!

Sampai di sini kita sudah selesai membuat kerangka proyek pustaka bangun-datar

Membuat Tes Unit

Mencoba membuat tes unit dengan PHPUnit, caranya kita buat berkas dengan akhiran nama berkas tersebut dengan Test.php pada direktori tests, contoh RectangleTest.php

touch test/BasicTest.php
// test/BasicTest.php
<?php

use PHPUnit\Framework\TestCase;

class BasicTest extends TestCase
{
public function testShouldSuccessWhenAssertTrue(): void
{
$this->assertEquals(5, 5);
}
}

Anda bisa menjalankan tesnya seperti pada perintah di sebelumnya

composer test
> phpunit --testdox
PHPUnit 7.5.12 by Sebastian Bergmann and contributors.

Runtime: PHP 7.1.23
Configuration: /Users/andhikayuana/Code/playground/bangun-datar/phpunit.xml

Basic
βœ” Should success when assert true [2.49 ms]

Time: 34 ms, Memory: 4.00 MB

OK (1 test, 1 assertion)

Tutorial kali ini sampai sini dulu, Tunggu bagian 2 dan jangan lupa untuk melakukan commit kode yang Anda buat πŸ˜„

Anda juga bisa membaca di sini https://yuana.id/tutorial-membuat-php-package-sendiri-bagian-1/

Terimakasih, semoga bermanfaat

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *