背景
Composerって普段何気なくphpのライブラリをインストールするだけに使っていたのだが、
ちょっと気になったので自作パッケージ作ってみたときのメモ
環境
- Packgistは使わない
- 自作パッケージはgithubで管理
- php7.2.2
- laravelフレームワークのソフトウェアで読んでみる
- 上記ソフトウェアはdockerで動かしている
ライブラリ側
ついでに普段ChromePhpでコンソールにログを吐かせることが多く、
環境ごとに入れたりするのが面倒なので、そちらをcomposerで呼べるようにする。
(こんなことしなくてもChromePhp自体はすでにpackageになっているのだが、
自分で拡張も効くようにあえて作ってみることにする)
クラス
<?php
namespace Sleazoids;
use ChromePhp;
class C
{
public static function log($message)
{
return ChromePhp::log($message);
}
}
こんな感じで。
後々ログの扱い方によっては関数追加していくのも良い。
composer.json
これでchromePhpとの依存関係を書く。
後述するが、stabilityを解決しておく。
{
"name": "SLEAZOIDS/chrome-logger-ex",
"description": "chrome-logger-extension",
"type": "library",
"minimum-stability": "stable",
"require": {
"ccampbell/chromephp": "4.1.0"
}
}
リポジトリに設置
上記のクラスとcomposer.jsonをgithubに置いてみた。
https://github.com/SLEAZOIDS/chrome-logger-ex
今回はPackagistには登録しないことにする
ライブラリを使う側
ライブラリを使いたい環境で、
compose.jsonに(もともとあった場合追記)してupdateする
{
"autoload-dev": {
"psr-4": {
"Sleazoids\\": "vendor/SLEAZOIDS/chrome-logger-ex/src/ChromeLoggerEx"
}
},
"repositories":[{
"type": "vcs",
"url": "https://github.com/SLEAZOIDS/chrome-logger-ex"
}],
"require-dev": {
"SLEAZOIDS/chrome-logger-ex": "dev-master"
}
}
一応ログ系ライブラリなのでdevに。
ライブラリのインストール
composer update
でインストールし、
composer dump-autoload
で自動的に読み込まれるようにする
ライブラリを使う
require_once 'vendor/autoload.php';
で、autoload.phpをrequireしておく
あとは、名前空間にならえば使える
$a = 'ここは' . 'どこだ?';
\Sleazoids\C::log($a);
落とし穴(勝手にはまったところ)
psr-4での定義名
autoloadする際のpsr-4で定義する名前と、
クラスの名前空間は一致させないと正しく読み込まれない。
(今回で言うと「Sleazoids」)
githubでライブラリを更新するとupdateでエラー
以下のようなエラーが出た時には
$composer update
[InvalidArgumentException]
Could not find package SLEAZOIDS/chrome-logger-ex at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability
ライブラリ側のcomposer.jsonで以下のようにstabilityの解決をしないといけない
"minimum-stability": "stable",
まだまだ
よくわからないこともあるので、引き続き気にかけておきます。
何気なく使っているサービスは一度自分で検証してみるのは勉強になります。