自分で作成した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
パッケージ名は、Packagistに登録できます。 登録するとパパッケージ名だけの指定でインストールができるようになります。 仕事などで公開できない場合、Packagistに登録せず、composer.jsonのrepositoriesに、パッケージのURLを設定します。
ライセンス
公開するような場合は、ライセンスを指定しておきます。 MITライセンスの場合は、以下のようにします。
"license": "MIT"
require
自作のライブラリが外部ライブラリや、PHPの特定バージョンを必要とする場合は、requireで指定します。
"require": { "php": ">= 5.3.0" },
namespace(名前空間)の設定
namespaceを使用している場合は、autoloadの項目で設定します。
自作パッケージでsrcディレクトリのnamespaceが、"Ajisaba\DeviceDetect"になっている場合、以下のように指定します。
>?php namespace Ajisaba\DeviceDetect; ...autoloadには以下のようにします。
"autoload": { "psr-4": { "Ajisaba\\DeviceDetect\\": "src/" } }
autoloadの項目では、psr-4、psr-0、classmap、またはfilesのどれかを指定します。 namespaceを使用する場合は、通常psr-4を指定します。psr-0は、PSR-0: Autoloading Standard を見ると非推奨になっています。
ライブラリを呼び出す側
自作ライブラリをパッケージとしてComposerでインストールする場合の設定などの説明
-
設定
composer.jsonでは、requireに呼び出すライブラリ名とバージョンを指定します。 ローカル環境でのテストなどでPackagistに登録していない場合は、repositoriesにURLなどを設定します。
{ "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-[ブランチ名]になります。
"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"