自分で作成した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"