1. ライブラリ側
  2. ライブラリを呼び出す側

自分で作成したPHPプログラムを、githubや個人的なgitベアレポジトリで管理している場合、Composerでインストールできるようにすることが可能です。 ただし、Composerでインストールするためには、レポジトリにcomposer.jsonを追加して必要な設定を記載する必要があります。

ライブラリ側

Composerで管理したい自作ライブラリ(パッケージ)の設定

  • 設定

  • Composerで管理したい自作ライブラリのトップディレクトリにcomposer.jsonファイルを追加します。

    追加したcomposer.jsonには、name、license、requireなどの項目を追加します。 namespaceを使用する場合は、autoload の項目も追加しておきます。

    githubに登録しているレポジトリがajisaba/DeviceDetectで、 ライセンスがMIT、namespaceが"Ajisaba\\DeviceDetect"の場合、composer.jsonは以下のようになります。

    {
        "name": "ajisaba/devicedetect",
        "license": "MIT",
        "require": {
            "php": ">= 5.3.0"
        },
        "autoload": {
            "psr-0": {
                "Ajisaba\\DeviceDetect\\": "src/"
            }
        }
    }

    参考: libraries (Composer Documentation)

  • パッケージ名

  • composer.jsonのnameは、パッケージ名になります。 パッケージ名はベンダー名とプロジェクト名から、以下のようにします。

    [ベンダー名]/[プロジェクト名]
    例 ベンダー名:ajisaba、プロジェクト名;DeviceDetect
    ajisaba/devicedetect

    パッケージ名は、Packagistに登録できます。 登録するとパパッケージ名だけの指定でインストールができるようになります。 仕事などで公開できない場合、Packagistに登録せず、composer.jsonのrepositoriesに、パッケージのURLを設定します。

  • ライセンス

  • 公開するような場合は、ライセンスを指定しておきます。 MITライセンスの場合は、以下のようにします。

        "license": "MIT"

  • require

  • 自作のライブラリが外部ライブラリや、PHPの特定バージョンを必要とする場合は、requireで指定します。

    例 PHP 5.3.0以上が必要な場合、以下をcomposer.jsonに追加しておきます。
        "require": {
            "php": ">= 5.3.0"
        },

  • namespace(名前空間)の設定

  • namespaceを使用している場合は、autoloadの項目で設定します。

    以下のように設定すれば、autoloadが設定したnamespaceを登録してくれます。

    例. 使用したいパッケージ内のファイルパスが ajisaba/DeviceDetect/src/DeviceDetect.php で、DevoceDetect.phpが以下のような内容の場合
    >?php
    
    namespace Ajisaba\DeviceDetect;
    ...
    autoloadには以下のようにします。
        "autoload": {
            "psr-0": {
                "Ajisaba\\DeviceDetect\\": "src/"
            }
        }

    autoloadの項目では、psr-4、psr-0、classmap、またはfilesのどれかを指定します。 上記では、psr-0を指定していますが、PSR-0: Autoloading Standard を見るとpsr-0は現在非推奨になっていますので、通常はpsr-4を指定します。

    参照: Composer Documentation autoload

ライブラリを呼び出す側

自作ライブラリをパッケージとしてComposerでインストールする場合の設定などの説明

  • 設定

  • composer.jsonでは、requireに呼び出すライブラリ名とバージョンを指定します。 ローカル環境でのテストなどでPackagistに登録していない場合は、repositoriesにURLなどを設定します。

    例 composer.jsonに自作パッケージ ajisaba/DeviceDetectを追加した場合。
    {
       "require": {
           "php": ">=5.3",
           "ajisaba/DeviceDetect": "dev-master"
       },
       "repositories": [
           {
               "type": "vcs",
               "url": "https://github.com/ajisaba/DeviceDetect.git"
           }
       ]
    }

    composerのインストールコマンドを実行すると、以下のようになり、カレントディレクトリのvendorディレクトリ以下にインストールされます。

    $ php composer.phar install
    Loading composer repositorInstalling dependencies (including require-dev)
      - Installing ajisaba/devicedetect (dev-master 8d0cab1)
        Cloning 8d0cab1cb02ef509997c72b5f7cda3c66c7d0a9a
    
    Writing lock file
    Generating autoload files

  • require

  • インストールしたいパッケージは、composer.jsonのrequireでパッケージ名とバージョンを指定します。

       "require": {
           "php": ">=5.3",
           "ajisaba/DeviceDetect": "dev-master"
       }

    バージョン番号は、gitのタグを使用しています。 例えば、タグに"1.2.3"があり、それをインストールしたい場合は、"1.2.3"と指定します。 タグが"v1.2.3"の場合も、タグの先頭文字の"v"は無視されるため、"1.2.3" と指定します。

       "require": {
           "ajisaba/DeviceDetect": "1.2.3"
       }

    参考: Composer Document Libraries(Platform pacages)

    バージョンは以下のように特定バージョン以上を指定することもできます。

        "ajisaba/DeviceDetect": ">=1.2.3"    # 1.2.3以上
    範囲を指定する場合は以下のようになります。
        "ajisaba/DeviceDetect": "1.2.*"

    ブランチ名で指定する場合は、dev-[ブランチ名]になります。

    例 masterブランチの場合
       "require": {
           "ajisaba/DeviceDetect": "dev-master"
       }

  • repositories

  • repositoriesでは、ソースの種類や置いている場所のURLなどを指定します。 gitなどのバージョン管理システムを使用している場合は、typeにvcsを指定し、 パッケージの置き場所はurlで指定します。

       "repositories": [
           {
               "type": "vcs",
               "url": "https://github.com/ajisaba/DeviceDetect.git"
           }
       ]

    自作では、レポジトリがプライベートネットワーク内にある場合があります。 SSHでアクセスできる場合は、urlに以下のように指定します。

    "url": "ssh://user@127.0.0.1/var/lib/git/DeviceDetect.git"

    同じマシン上にレポジトリ(例 /var/git/DeviceDetect.git)がある場合、以下のように指定できます。

    "url": "file:///var/git/DeviceDetect.git"

    githubから取得する場合は以下のように指定できます。

    "url": "https://github.com/ajisaba/DeviceDetect.git"