LoginSignup
7
8

More than 5 years have passed since last update.

Composerで自作ライブラリを試す

Last updated at Posted at 2018-05-01

背景

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",

まだまだ

よくわからないこともあるので、引き続き気にかけておきます。
何気なく使っているサービスは一度自分で検証してみるのは勉強になります。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8