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でした
要調査やでぇ〜〜