composerでオリジナルパッケージを作成する話
PHPを使っていると様々なプロジェクトを利用しますね。
するとライブラリとか同じソースを作成することが多いですね。
たいていの人は、コピペして使っていたりします。
そうするとどうなるか?
ダブルメンテナンスでどっちがどっちだか、
片方を修正して、もう片方はバグが入ったまま、
そして、もう片方の別のバグを修正してもう片方をメンテせず…
うがぁ〜〜〜!!
そんな時代は嫌だぁ〜!
と言うことで今回は、PHP用の公式ライブラリの作成方法を調査しました
成果物はこちらに
https://github.com/wataru775/mmpp_util
依存関係というと、composerを利用することが一般的でしょう
今回も、もちろんTDDで、やっております。
地味にnamespaceとuse部分で悩んでおりましたw
ライブラリ側
ライブラリ側はシンプルに作成しました。ディレクトリを作成して、composerプロジェクトを作成
composer init
はい、構成を聞かれますので、いろいろ設定してください
できあがりと、phpunitの追加、ついでにソースはsrcディレクトリに置きます
{
"name": "mmpp/util",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "wataru",
"email": "wataru775@gmail.com"
}
],
"autoload": {
"psr-4": { "org\\mmpp\\util\\": "src" }
},
"require": {
"phpunit/phpunit": "^9.5"
},
"description": ""
}
ま、これだけでOKでしょう。MITのライセンスは、よー解らん系w
※ しらべなな… ふふふ、BlogネタGetだぜ!w
さてさて、ソースの構成はlaravelの構成を頂きました
tests/Unit
tests/Feature
ま、機能テストとユニットテストです… 略!
※ BlogネタGetだぜ!
さてさて、そんな感じで試験ですが… 激烈シンプルです
<?php
namespace Unit;
use org\mmpp\util\StringUtil;
use PHPUnit\Framework\TestCase;
class StringUtilTest extends TestCase
{
public function test_isNull(){
$this->assertTrue(StringUtil::isNull(''));
$this->assertTrue(StringUtil::isNull(null));
}
}
nullチェックです、本ソースはできあがっていませんが、パスは通りますってのを作ります
<?php
namespace org\mmpp\util;
class StringUtil
{
public static function isNull($value) : bool{
if(empty($value)){
return true;
}
return $value === null;
}
}
本当に、試験通すだけのソースです
はい、できあがりました。
phpunit.xmlでの試験は以下の感じで指定します…
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
このソースをGitHubに上げましょう!
私は、できあがっていませんのでv0シリーズにしましたが、普通はv1.0.0でしょうw
実際のv.0.0.1は以下です
https://github.com/wataru775/mmpp_util/releases/tag/v0.0.1
ま、略ですw
クライアント側!
次は、実際に使う側です。
先ほどと同じく、composerを初期化します
composer init
次に、リポジトリとライブラリを追加します!
{
"name": "wataru/util_sample",
"authors": [
{
"name": "wataru",
"email": "wataru775@gmail.com"
}
],
"require": {
"mmpp/util": "0.*"
},
"repositories": [
{
"type": "vcs",
"url": "git@github.com:wataru775/mmpp_util.git"
}
]
}
nameはともかく、requireにバージョン付きに追加します。
リポジトリはgitへ追加します
実際に追加されていると調べると…
composer updateかな?installとかと繰り返していたので、ごめんどっちかですw
試験を、tests/Unitにライブラリ作成で使ったのを使います
<?php
namespace Unit;
use org\mmpp\util\StringUtil;
use PHPUnit\Framework\TestCase;
class StringUtilTest extends TestCase
{
public function test_isNull(){
$this->assertTrue(StringUtil::isNull(''));
$this->assertTrue(StringUtil::isNull(null));
}
}
これが動けばOKです!
いやぁ〜調査しながら、やりましたが、便利かな…
GitLab対応は出来るのかな?
その辺りは調査だね。
あ、composerのバージョン1系の場合なぜかコケます
最近多い
2系はOKでした
要調査やでぇ〜〜