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でした

要調査やでぇ〜〜